我可以用sqlmap注入SQL,但我无法理解这是如何工作的。我的脚本上没有echo
或print
命令,但sqlmap返回带有数据库名称和详细信息的数据。
以下是它找到的实例:
$sql ="SELECT * FROM application where id=$id";
$act_res = mysql_query($sql);
如果没有回显或打印,我也停止错误报告,那么sqlmap是如何通过sql注入获取信息的呢?
答案 0 :(得分:2)
您的代码有一个安全问题:
您需要清理输入$id
。
如果您的数据库中的ID是int
,您可以再次保护SQL注入,并检查它是否为int
is_int ()功能。
SQLMAP脚本将在易受攻击的$id
输入中尝试注入。
如果黑客将ID; SQLInjectionHere--
放入$id
,则查询将为:
SELECT * FROM application WHERE id=ID; SQLInjectionHere"
攻击者可以在未经许可的情况下执行另一个SQL请求。
您还可以使用-v
PS:使用SELECT *的不良做法( Why? )
答案 1 :(得分:0)
一种方法是使用SLEEP()
。如果你发送SLEEP(5)
,SLEEP(10)
,SLEEP(15)
,并且响应需要5.3秒,10.2秒和15.5秒来生成,你可以非常肯定你找到了一个洞