说到SQL盲注,一般来说就是两种:布尔盲注和时间盲注。布尔盲注基于True和False,是比较常用和便捷的手法;时间盲注基于延时,较为麻烦,一般来说是作为没有任何回显情况下的最后的注入手段。而很少见到有人提到基于报错的盲注方式。
报错盲注思路类似布尔盲注,利用的是SQL语句报错与否造成的回显结果的不同,我们需要找到一句能够报错的SQL语句,而且它还要满足一个条件:能够用布尔来控制报错与否。
下面举一个简单的例子,我们尝试这么一条SQL语句:
select pow(999,999)
我们可以看到回显是:
#1690 - DOUBLE value is out of range in 'pow(999,999)'
我们改造一下,改造成能够用于盲注的句式:
select * from flag.flag where fid=1 and (database()='flag')*999*pow(999,102)
对’flag’字符串进行修改,可以看到不同的结果:
思路很简单,就是利用MySQL的double类型溢出报错,而pow函数会返回double类型的数据。
这只是一个简单的思路和用法,如果有更多的骚操作和骚思路,欢迎跟我一起交流~