前言
Web 应用防火墙是一个不错但不完美的解决方案,用于保护网站。它是一个基于请求过滤规则的防御框架,但这些规则可能非常简单且易于绕过。让我们探索常见的 SQL 注入防御机制及其绕过方法!
环境准备
这次,我将使用 testphp.vulnweb.com 网站作为示例,并在中间使用 CloudFlare 防火墙作为代理:
现在是时候转到终端,检查攻击面。我将我的终端分成两个,因为我将使用两个常见的 SQL 注入工具:
大多数渗透测试员都熟悉的一个工具是 sqlmap。另一个不那么知名但也非常出色的工具是 ghauri。这两个工具都非常适合自动化 SQL 注入。理想情况下,您想要将 HTTP 请求作为文件或 URL 查询字符串传递给其中一个工具。在我的经验中,sqlmap 在网络上更加激进,但它也更快。然而,它的一个缺点是,如果您不小心,您的 IP 可能很容易被阻止。
首先,让我们尝试看看 sqlmap 如何在我们的 WAF 代理网站 k1t.uk 上工作,默认情况下:
sqlmap
-u
k1t
.uk
正如您注意到的那样,它立即给我返回了 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 注入类型:
让我们复制 sqlmap 标识出的易受攻击的端点,因为我们将在整个写作过程中使用它:
让我们再次运行 sqlmap,但仅针对该特定端点,替换为 WAF 代理 URL k1t.uk,并添加 –random-agent 标志和 –technique=T,以尝试基于时间的攻击:
sqlmap
-u
'http://k1t.uk/listproducts.php?cat=1'
--random-agent --technique=T
我们可以看到,攻击也很成功 —— 基于时间的方法真的很好。–random-agent 标志模拟了 sqlmap 请求,使其看起来像是来自普通浏览器的请求。
简单WAF规则绕过
让我们想象一个场景:网络安全团队发现有来自 sqlmap 的请求,决定部署一个简单的 WAF 规则。有很多请求包含 "sleep" 这个词,于是有人尝试使用以下规则将其列入黑名单:
在这种情况下,它将仅检查 URL 查询中是否包含小写或大写的字符串 "sleep"。如果我们试图从攻击端再次运行此操作,我们会注意到,我们将被阻止:
当尝试绕过一些基本规则的 WAF 时,我建议使用以下命令列出 sqlmap 的篡改脚本:
sqlmap --
list
-tampers
正如我们所知,它只会过滤掉小写和大写的 "sleep" 字符串,因此使用 randomcase 篡改脚本可能会起作用。
sqlmap
-u
'http://k1t.uk/listproducts.php?cat=1'
--random-agent --technique=T --tamper=randomcase
我们可以看到,这种篡改对于相当基本的规则是有效的。
稍微高级的WAF规则绕过
通常会有更智能的规则,就像这里的这个一样:
它会将所有内容转换为小写,然后再与字符串进行比较。如果我们部署了这个规则,在大多数情况下之前的篡改脚本将不起作用,因此我们接下来应该尝试的针对 sleep 载荷的篡改脚本是 charencode:
sqlmap
-u
'http://k1t.uk/listproducts.php?cat=1'
--random-agent --technique=T --tamper=charencode
这次它成功了!
总结
我们目前学到的是,要检查可用的篡改脚本,并根据情况和工具输出选择相应的篡改脚本。这次我们探讨了哪些篡改技术可能对抗基于时间的SQL注入有效。我们看到 Ghauri 工具对于相当简单的WAF规则也有效。理想情况下,你可能希望同时使用 sqlmap 和 Ghauri。接下来,我们将探索其他SQL注入WAF绕过技术,包括错误、布尔和基于联合的攻击。
原文:
https://infosecwriteups.com/sqli-waf-bypass-techniques-part-1-time-based-attacks-7749689c72ed
由道一安全翻译
原文始发于微信公众号(道一安全):SQL注入waf绕过(1)-基于时间的注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论