Skip to content

3、SQLMap 输出说明

sqlmap 输出在其扫描过程中向我们展示了很多信息。这些数据通常对理解至关重要,因为它会指导我们完成自动 SQL 注入过程。这准确地向我们展示了 SQLMap 正在利用的漏洞类型,这有助于我们报告 Web 应用程序具有哪种类型的注入。如果我们想在 SQLMap 确定注入类型和易受攻击的参数后手动利用 Web 应用程序,这也会变得很方便。

日志消息说明

以下是在 SQLMap 扫描期间通常会发现的一些最常见的消息,以及之前练习中的每个消息及其描述的示例。

URL content is stable

Log Message :

  • "target URL content is stable"

这意味着在连续相同请求的情况下,响应之间没有重大变化。从自动化的角度来看,这很重要,因为在稳定响应的情况下,更容易发现由潜在的 SQLi 尝试引起的差异。虽然稳定性很重要,但 SQLMap 具有先进的机制来自动消除可能来自潜在不稳定目标的潜在“噪音”。

Parameter appears to be dynamic

Log Message :

  • "GET parameter 'id' appears to be dynamic"

总是希望测试参数是“动态的”,因为它表明对其值所做的任何更改都会导致响应发生变化;因此该参数可以链接到数据库。如果输出是“静态的”并且没有改变,它可能表明被测试参数的值没有被目标处理,至少在当前上下文中是这样。

Parameter might be injectable

Log Message:

  • "heuristic (basic) test shows that GET parameter 'id' might be injectable (possible DBMS: 'MySQL')"

如前所述,DBMS 错误是潜在 SQLi 的良好指示。在这种情况下,当 SQLMap 发送一个故意使用的无效值(例如?id=1",)..).))')时出现 MySQL 错误,这表明被测试的参数可能是 SQLi 可注入的并且目标可能是 MySQL。需要注意的是,这不是 SQLi 的证明,只是表明检测机制必须在后续运行中得到证明。

Parameter might be vulnerable to XSS attacks

Log Message:

  • "heuristic (XSS) test shows that GET parameter 'id' might be vulnerable to cross-site scripting (XSS) attacks"

虽然这不是它的主要目的,但 SQLMap 还运行快速启发式测试以检测是否存在 XSS 漏洞。在使用 SQLMap 测试大量参数的大规模测试中,拥有这些类型的快速启发式检查非常好,尤其是在没有发现 SQLi 漏洞的情况下。

Back-end DBMS is '...'

Log Message:

  • "it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]"

在正常运行中,SQLMap 测试所有支持的 DBMS。如果有明确迹象表明目标正在使用特定的 DBMS,我们可以将有效负载缩小到该特定的 DBMS。

Level/risk values

Log Message:

  • "for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]"

如果有明确的迹象表明目标使用特定的 DBMS,则还可以将针对同一特定 DBMS 的测试扩展到常规测试之外。
这基本上意味着为该特定 DBMS 运行所有 SQL 注入有效负载,而如果未检测到 DBMS,则只会测试顶部有效负载。

Reflective values found

Log Message:

  • "reflective value(s) found and filtering out"

只是警告在响应中发现了部分使用的有效负载。这种行为可能会给自动化工具带来问题,因为它代表了垃圾。但是,SQLMap 具有过滤机制,可以在比较原始页面内容之前删除此类垃圾。

Parameter appears to be injectable

Log Message:

  • "GET parameter 'id' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable (with --string="luther")"

此消息表明该参数似乎是可注入的,但仍有可能是误报。在基于布尔的盲注和类似的 SQLi 类型(例如,基于时间的盲注)的情况下,误报的可能性很高,在运行结束时,SQLMap 执行广泛的测试,包括用于删除的简单逻辑检查的假阳性结果。

此外,with --string="luther"表示 SQLMap 识别并使用响应中常量字符串值的出现luther以与响应区分开TRUEFALSE。这是一个重要的发现,因为在这种情况下,不需要使用高级内部机制,例如动态/反射去除或响应的模糊比较,这些不能被视为误报。

Time-based comparison statistical model

Log Message:

  • "time-based comparison requires a larger statistical model, please wait........... (done)"

SQLMap 使用统计模型来识别定期和(故意)延迟的目标响应。要使此模型起作用,需要收集足够数量的常规响应时间。这样,即使在高延迟网络环境中,SQLMap 也可以统计区分故意延迟。

Extending UNION query injection technique tests

Log Message:

  • "automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found"

与其他 SQLi 类型相比,UNION 查询 SQLi 检查需要更多请求才能成功识别可用负载。为了减少每个参数的测试时间,尤其是当目标看起来不可注入时,请求的数量被限制为此类检查的恒定值(即 10)。但是,如果目标很有可能容易受到攻击,尤其是当发现另一种(潜在的)SQLi 技术时,SQLMap 会扩展 UNION 查询 SQLi 的默认请求数,因为成功的预期更高。

Technique appears to be usable

Log Message:

  • "ORDER BY' technique appears to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test"

作为 UNION 查询 SQLi 类型的启发式检查,在UNION发送实际有效负载之前,检查一种称为 的技术ORDER BY的可用性。在可用的情况下,SQLMap 可以 UNION 通过执行二进制搜索方法快速识别所需列的正确数量。

请注意,这取决于易受攻击的查询中受影响的表。

Parameter is vulnerable

Log Message:

  • "GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]"

这是 SQLMap 最重要的消息之一,因为它意味着该参数被发现易受 SQL 注入攻击。在常规情况下,用户可能只想找到至少一个可用于目标的注入点(即参数)。但是,如果我们在 Web 应用程序上运行广泛的测试并想要报告所有潜在的漏洞,我们可以继续搜索所有易受攻击的参数。

Sqlmap identified injection points

Log Message:

  • "sqlmap identified the following injection point(s) with a total of 46 HTTP(s) requests:"

接下来是所有注入点的列表,包括类型、标题和有效负载,这是成功检测和利用已发现 SQLi 漏洞的最终证明。应该注意的是,SQLMap 仅列出那些可证明可利用(即可用)的发现。

Data logged to text files

Log Message:

  • "fetched data logged to text files under '/home/user/.sqlmap/output/www.example.com'"

这表示用于存储特定目标的所有日志、会话和输出数据的本地文件系统位置 - 在本例中为www.example.com. 在这样的初始运行之后,成功检测到注入点,未来运行的所有详细信息都存储在同一目录的会话文件中。这意味着 SQLMap 会尝试尽可能减少所需的目标请求,具体取决于会话文件的数据。