完全盲目的SQL注入列枚举?

时间:2013-12-16 01:45:32

标签: mysql sql-injection

我正在做一个关于webapp安全性和漏洞的学校项目,为此我创建了自己的非常简单的网站,其中包含登录和搜索栏。

现在,我已经故意使登录静默,而搜索栏显示SQL注入的输出。因此,出于演示目的,我想对登录进行基于时间的完全盲目的SQL注入攻击......但是我有点卡住了。

我不知道如何在基于时间的情况下枚举表中登录查询的列数:

SELECT * FROM customer WHERE cMAIL='' AND cPWD='';

我不能做ORDER BY n;#,因为当出现问题时我绝对没有错误输出。我能得到任何指示的唯一方法是通过SLEEP()或BENCHMARK()。

但我不能将ORDER BY放入SELECT IF()语句中。那么如何找出存在多少列呢? (这使我的工会不可能)。

谢谢!

编辑:值得一提的是,该网站的目的非常不安全(不使用mysqli,只是mysql)。因为它仅用于演示

1 个答案:

答案 0 :(得分:3)

好的,我找到了自己问题的答案:

我没有使用ORDER BY,而是使用SELECT和bruteforced来查看存在多少列:

SELECT * FROM customer WHERE cMAIL='' AND cPWD='';

可以通过以下方式在黑暗中进行枚举:

SELECT * FROM customer WHERE cMAIL='' UNION SELECT null,null,null AND SLEEP(5);# AND cPWD=''

您只需向数据库添加更多空值,直到数据库休眠5秒钟。然后你知道给定表中有多少列。

希望这可以帮助别人。