SQL注入waf绕过(1)-基于时间的注入

admin 2024年7月7日11:09:08评论43 views字数 2500阅读8分20秒阅读模式

前言

Web 应用防火墙是一个不错但不完美的解决方案,用于保护网站。它是一个基于请求过滤规则的防御框架,但这些规则可能非常简单且易于绕过。让我们探索常见的 SQL 注入防御机制及其绕过方法!

环境准备

这次,我将使用 testphp.vulnweb.com 网站作为示例,并在中间使用 CloudFlare 防火墙作为代理:

SQL注入waf绕过(1)-基于时间的注入

现在是时候转到终端,检查攻击面。我将我的终端分成两个,因为我将使用两个常见的 SQL 注入工具:

SQL注入waf绕过(1)-基于时间的注入

大多数渗透测试员都熟悉的一个工具是 sqlmap。另一个不那么知名但也非常出色的工具是 ghauri。这两个工具都非常适合自动化 SQL 注入。理想情况下,您想要将 HTTP 请求作为文件或 URL 查询字符串传递给其中一个工具。在我的经验中,sqlmap 在网络上更加激进,但它也更快。然而,它的一个缺点是,如果您不小心,您的 IP 可能很容易被阻止。

首先,让我们尝试看看 sqlmap 如何在我们的 WAF 代理网站 k1t.uk 上工作,默认情况下:

sqlmap -u k1t.uk

SQL注入waf绕过(1)-基于时间的注入

正如您注意到的那样,它立即给我返回了 403 错误并识别出了 CloudFlare。这是因为 sqlmap 默认情况下使用自己的 User-Agent。这是一个非常讨厌的特性,因为您每次都需要指定一个 –random-agent 标志。另一方面,ghauri 则不需要这样做!

检测没有WAF的SQL注入

终于是时候去狩猎 SQL 注入了!我们将首先使用 sqlmap,但带有 –random-agent 标志。如果您在 X 上关注我,您可能已经看到我分享了一些 sqlmap 命令。其中一个特别有趣的命令是用于爬虫网站的命令。没错 —— sqlmap 也可以用作爬虫。让我们尝试使用 sqlmap 爬虫命令在原始网站上,该网站不在 WAF 之下。由于这是一个故意易受攻击的网站,即使使用这个功能也应该很容易找到 SQL 相关内容:

sqlmap -u testphp.vulnweb.com --random-agent --crawl=3 --forms --hostname --current-db --smart

命令参数解释:

-u 指定目标 URL。

–random-agent 选择一个看起来像普通用户浏览器的随机用户代理。这有助于避免基本的 CloudFlare 用户代理阻止。

–crawl=3 指定爬虫将深入多少层 —— 链接深度。

–forms 告诉 sqlmap,这个工具也可以尝试将数据放入 POST、PUT 或 HTML FORMs 中找到的任何其他请求。请注意,这个选项可能非常危险,如果您是在测试认证流程时。我通常在看到登录表单时使用这个选项,并尝试使用 sqlmap 绕过它们,但深度为 1。

–hostname 和

–current-db —— 我将使用这些来验证 SQL 注入是否成功。它们将显示 SQL 服务器的主机名和 Web 应用程序使用的数据库。

–smart 标志不应该经常使用,但当我知道有一个故意易受攻击的应用程序时,它将足够好。这只用于在 heuristic 检查告诉工具存在高可能性漏洞时进行 SQL 注入。

在运行该命令后,我们可以看到它已经成功地利用了数据库:

SQL注入waf绕过(1)-基于时间的注入

我们可以看到当前数据库名称和主机名。此外,我们还可以看到该端点可用的 SQL 注入类型:

SQL注入waf绕过(1)-基于时间的注入

让我们复制 sqlmap 标识出的易受攻击的端点,因为我们将在整个写作过程中使用它:

SQL注入waf绕过(1)-基于时间的注入

让我们再次运行 sqlmap,但仅针对该特定端点,替换为 WAF 代理 URL k1t.uk,并添加 –random-agent 标志和 –technique=T,以尝试基于时间的攻击:

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T

SQL注入waf绕过(1)-基于时间的注入

我们可以看到,攻击也很成功 —— 基于时间的方法真的很好。–random-agent 标志模拟了 sqlmap 请求,使其看起来像是来自普通浏览器的请求。

简单WAF规则绕过

让我们想象一个场景:网络安全团队发现有来自 sqlmap 的请求,决定部署一个简单的 WAF 规则。有很多请求包含 "sleep" 这个词,于是有人尝试使用以下规则将其列入黑名单:

SQL注入waf绕过(1)-基于时间的注入

在这种情况下,它将仅检查 URL 查询中是否包含小写或大写的字符串 "sleep"。如果我们试图从攻击端再次运行此操作,我们会注意到,我们将被阻止:

SQL注入waf绕过(1)-基于时间的注入

当尝试绕过一些基本规则的 WAF 时,我建议使用以下命令列出 sqlmap 的篡改脚本:

sqlmap --list-tampers

正如我们所知,它只会过滤掉小写和大写的 "sleep" 字符串,因此使用 randomcase 篡改脚本可能会起作用。

SQL注入waf绕过(1)-基于时间的注入

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T --tamper=randomcase

SQL注入waf绕过(1)-基于时间的注入

我们可以看到,这种篡改对于相当基本的规则是有效的。

稍微高级的WAF规则绕过

通常会有更智能的规则,就像这里的这个一样:

SQL注入waf绕过(1)-基于时间的注入

它会将所有内容转换为小写,然后再与字符串进行比较。如果我们部署了这个规则,在大多数情况下之前的篡改脚本将不起作用,因此我们接下来应该尝试的针对 sleep 载荷的篡改脚本是 charencode:

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T --tamper=charencode

SQL注入waf绕过(1)-基于时间的注入

这次它成功了!

总结

我们目前学到的是,要检查可用的篡改脚本,并根据情况和工具输出选择相应的篡改脚本。这次我们探讨了哪些篡改技术可能对抗基于时间的SQL注入有效。我们看到 Ghauri 工具对于相当简单的WAF规则也有效。理想情况下,你可能希望同时使用 sqlmap 和 Ghauri。接下来,我们将探索其他SQL注入WAF绕过技术,包括错误、布尔和基于联合的攻击。

原文:

https://infosecwriteups.com/sqli-waf-bypass-techniques-part-1-time-based-attacks-7749689c72ed

由道一安全翻译

原文始发于微信公众号(道一安全):SQL注入waf绕过(1)-基于时间的注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月7日11:09:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入waf绕过(1)-基于时间的注入https://cn-sec.com/archives/2928181.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息