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

Vol*_*ile 5 mysql sql-injection

我正在做一个关于webapp安全性和漏洞的学校项目,为此我创建了一个非常简单的网站,带有登录和搜索栏.

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

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

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

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

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

谢谢!

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

Vol*_*ile 3

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

我没有使用 ORDER BY,而是使用 SELECT 并强制查看存在多少列:

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

可以通过执行以下操作在黑暗中枚举:

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

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

希望这可以帮助别人。