介绍

    假设你正在进行 Web 应用审计,发现有某个 Web 页面接受来自用户端提供的动态数据,这些数据通过 ,POSTCookie 参数或 HTTP User-Agent 请求头发送。
    因而,你想测试是否可以通过参数构造出 SQL 注入漏洞,如果有漏洞,则可以利用它们从后端 DBMS(Database Management System,数据库管理系统)中获取尽可能多的信息,甚至进一步控制底层的文件系统和操作系统。

    简而言之,考虑下面的 url:

    假设:

    页面显示跟原来的不一样(AND+1=2 条件取值为 False)。这可能说明 的 GET 参数 id 存在 SQL 注入漏洞。此外,这种情形也表明用户输入的数据在 SQL 语句传送到 DBMS 之前没有被过滤。

    这种设计缺陷在动态网页应用中十分常见,此类型漏洞与后端 DBMS 或后端编程语言并没有关系,漏洞的引入通常存在于代码的编写逻辑里面。从 2013 年开始,已将此类漏洞列入最常见(译者注:原链接失效,重新添加了有效链接)严重 Web 应用漏洞的名单。

    从上面的例子我们发现了存在可以利用的参数,现在我们可以通过在每一次的 HTTP 请求中修改 id 进行相关的漏洞检测。

    如你所见,通过在 id 参数后面添加符合语法并且布尔值为 True 的 SQL 语句(例如 id=1 AND 1=1),能够使 Web 应用返回和之前合法请求(没有添加其它的 SQL 语句)一模一样的页面。由此可见,后端 DBMS 执行了先前我们注入的 SQL 语句。上面的例子展示了一个基于布尔值的简单 SQL 盲注。当然,sqlmap 可以检测出任意类型的 SQL 注入漏洞,并相应地调整其后续的工作流程。

    在这个简单的场景中不只是可以添加一个或多个 SQL 判断条件语句,还可以(取决于 DBMS 类型)添加更多的 SQL 堆叠查询(Stacked queries)语句。例如:[...]&id=1; 其他 SQL 查询语句#

    sqlmap 能自动识别和利用这类型漏洞。将源链接 http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 添加到 sqlmap,它能够自动完成下面操作:

    • 识别有漏洞的参数(比如这个例子中的 )
    • 识别后端 DBMS 的相关指纹信息

    直连 DBMS

    在 sqlmap 0.8 版本推出前,sqlmap 被认为是 Web 应用渗透测试工程师/新手/技术爱好者等受众使用的又一款 SQL 注入工具。然而,随着使用者的成长,渗透技术的发展,sqlmap 同样也跟着演化。现在 sqlmap 支持一个新的开关选项 -d,它允许你通过 DBMS 守护进程监听的 TCP 端口直接连接目标数据库服务器,便于你使用 SQL 注入技术对目标数据库进行攻击。