SQL 注入 bool 盲注
当一些回显的地方被限制了,只能有固定的几种输出,在测试之后,我们可以发现特定的输入会返回特定的结果之后。我们可以构造一个条件表达式猜测数据表中的内容,IF(exp, var2, var3) 这个函数会在 exp 表达式为真时,返回 var1 , 否则返回 var2 。
所以,当我们知道一些对应的 输入-输出 配对之后。我们就可以构造表达式猜测表内容。
举例:
假设有一个注入点,输入参数 1 时,返回 True,输入 2 时,返回 False,其他输入返回 Error。
我们要猜测 flag 表中的 flag 字段的 flag 值,那么我们可以构造如下 payload
1 | IF(ascii(substr((select flag from flag),{var_idx},1))> {var_c},1,2) |
我们查询 flag 表中 flag 字段 ,假设我们已经知道她的长度(你可以很容易根据相同的原理测试出她的长度)我们然后从 0 - len 逐步截取一个字符,将他转为 asiic 码之后,与我们猜测的 var_c 进行对比,如果比我们猜测的内容大,那么这个表达式的结果将是 1 , 而我们已经知道输入 1 会返回 True,那么我们将知道我们的猜测是成立的,不断调整 var_c ,直到确定出一个确切的答案。
重复以上步骤,借助 二分法 或是 其他什么方法,我们可以在有限的步骤内很容易的猜出 flag
下面是一个脚本范例
1 | import requests |
时间盲注也是差不多原理
将返回的结果换成 sleep 函数,根据延时感知结果。
Author: 哒琳
Permalink: http://blog.jieis.cn/2022/b0cfc1ad-b9f9-466a-bfe7-40036f5fb1ea.html
Comments