查看一些apache日志,我会多次遇到以下模式(URL解码):
GET /foo.php?id=1 and union select 0x5E5B7D7E,0x5E5B7D7E,0x5E5B7D7E,... --
显然这是一次SQL注入尝试。但为什么上面显示的常数?我看不出它有多么特别重要,虽然看起来很频繁。
对于它的值,上面的常量映射到以下ASCII字符:“^[}~
”或“~}[^
”如果您反转字节顺序。十进制值为1,583,054,206
,八进制为013626676576
。代码似乎没有映射到有用的x86指令序列。
谷歌搜索这个数字只是揭示了在其他网站上使用相同的SQL注入攻击的残余尝试 - 没有关于攻击本身的信息。
任何人都有见解?
答案 0 :(得分:8)
此值是唯一标识符。如果页面上出现值“^[}~
”,那么机器人知道你很容易受到sql注入的攻击,就好像值“0x5E5B7D7
”一样,那么你的sql server就没有解释它。这个SQL注入测试可能只用一个0x5E5B7D7E开始,然后继续预定义的数量。这是因为使用union选择union必须返回与要附加的select相同数量的列,并且bot必须强制使用此值。
请注意,此测试不适用于盲sql注入,因为值“^[}~
”将不可见。 mysql的blind sql injection test会向sleep(30)
或BENCHMARK(5000000,md5(1337))
注入一个电话。这将导致页面加载几秒钟,从而表示正在执行此sql代码。