说到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类型的数据。


这只是一个简单的思路和用法,如果有更多的骚操作和骚思路,欢迎跟我一起交流~


Web MySQL SQL注入

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

CVE-2019-1003000复现
Hello World