SQL 注入 - UNION SELECT 并返回“关键字”以查找可利用的列

信息安全 Web应用程序 工具 sql注入 自动化测试 模糊测试
2021-08-15 06:39:44

我有一个问题,我希望有人可以帮助以UNION SELECT脚本/自动方式查找可利用的列(已经找到使用的列数ORDER BY

手动执行此操作

使用http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,4,5,6,7,8--我知道我可以手动查看页面上显示的列号以查找可利用的列,但是尝试使用脚本以自动方式将这些从响应内容或页面源中解析出来是非常困难的找到显示的可利用列(除非有人知道可以做到这一点的可靠方法?)。

使用扫描仪/模糊器自动执行此操作

在一些扫描仪/模糊器和 sql 注入工具中,我发现了一些关于在页面上UNION SELECT返回特定“关键字”的参考,这将表明如果在响应内容中找到“关键字”,则该特定列是可利用的……

例如:

http://www.site.com/index.php?id=-2 UNION SELECT "EXPLOITABLE",2,3,4,5,6,7,8--   <-- The word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,"EXPLOITABLE",3,4,5,6,7,8--   <-- The word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,"EXPLOITABLE",4,5,6,7,8--   <-- The word EXPLOITABLE **DID** appear on the page content so this column **IS** exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,"EXPLOITABLE",5,6,7,8--   <-- The word EXPLOITABLE did not appear on the page content so this column is not exploitable
http://www.site.com/index.php?id=-2 UNION SELECT 1,2,3,4,"EXPLOITABLE",6,7,8--   <-- The word EXPLOITABLE did not appear on the page content so this column is not exploitable

依此类推,直到它到达最后一列编号 8.......

“关键字”是通常不会在网页上找到的单词,因此可以防止错误的肯定,例如 EXPLOITABLE、InJeCtAbLE、AASSDDFFGG(或您想要的任何变量)。

我遇到的问题:

当我正在编写一个 sql 注入工具/模糊器时,我正在寻找以自动化/可编写脚本的方式找到这些可利用列的最佳方法,最合乎逻辑的方法似乎是上面描述的使用“关键字”的方法(除非任何人都可以建议更好的方法)

这是因为我可以只GET使用带有和“关键字”的每个 url UNION SELECT,存储响应内容,然后查看我使用的变量“关键字”是否出现在响应内容中。如果是,那么我将知道它是可利用的,如果不是,我将转到下一个 url,依此类推,直到脚本在所有列号上都尝试过。

这是否是使用 UNION SELECT 确定可利用列的最佳/最可靠的方法,或者您能建议使用更好的方法吗?

1个回答

最好的方法之一,但要小心基于错误的注入问题。您可能会发现每个结果都会在输出中显示随机标记,因为每列都绑定到一个整数结果,并且字符串会导致强制转换错误。在这种情况下,检测它的唯一方法是在输出中查找典型的 SQL server / MySQL / PostgreSQL 错误消息,并在页面中查找不同的令牌计数