PHP shell 在 PNG 的 IDAT 块上
PHP shell on PNG's IDAT Chunk
我正在研究关于文件上传高漏洞的DVWA。我想绕过过滤器,它只允许上传 jpg 或 png 等图像。所以我打算将 payload <?=phpinfo();
嵌入到图像文件中。经过搜索,我发现了这些很棒的博客:
- An XSS on Facebook via PNGs & Wonky Content Types
- Encoding Web Shells in PNG IDAT chunks
- Revisiting XSS payloads in PNG IDAT chunks
我懒得研究 Deflate 算法和搜索 png shell 生成器并找到了这个很棒的存储库:
克隆和 运行 之后,效果很好。但有效载荷是针对 XSS Vuln output here:
<SCRIPT SRC=//ABC.DE></SCRIPT>
我想完成 DVWA 的 objective。它说
Execute any PHP function of your choosing on the target system (such as phpinfo() or system()) thanks to this file upload vulnerability.
所以,我想要的有效负载是:<?=phpinfo();?>
嵌入到 PNG 的 IDAT 块中,此有效负载从 IDAT 上的过滤器和压缩中幸存下来。从存储库中,我找到了 f1n1te / idontplaydarts 博客之前描述的 bruteforce() 逻辑。我复制了源代码并尝试使用我的有效负载 here 来暴力破解压缩,但在符号字符上失败了。基于 source/generator,我有 2 个问题:
- 为什么在 the source 上,暴力破解符号“<”和“?”以及另一个 ascii 符号都失败了?但它适用于 ascii "a-z" & "A-Z".
在我发现的 3 个博客和 1 个存储库中,它们使用此有效载荷来暴力破解 Deflate:
7ff399281922111510691928276e6e5c1e151e51241f576e69b16375535b6f
- f1n1te
f399281922111510691928276e6e562e2c1e581b1f576e69b16375535b6f0e7f
- 亚当
03a39f67546f2c24152b116712546f112e29152b2167226b6f5f5310
- idontplaydarts
0000f399281922111510691928276e6e5313241e1f576e69b16375535b6f0000
- 存储库
那些家伙如何获得所有这些有效载荷以暴力破解 Deflate Compression?
暴力破解失败,因为它太短了。您需要 5 个半字节,而不仅仅是 4 个。我用箭头标记了额外的数字。
0000f399281922111510691928276e6e....1f576e69b16375535b6f0000 your template
0000f399281922111510691928276e6e51121f576e69b16375535b6f0000 "x4c`0<SCRIPT SRC=//PH></script>[=10=]w4)"
0000f399281922111510691928276e6e576f5f576e69b16375535b6f0000 "x4c`0<SCRIPT SRC=//<?></script>[=10=]w4)"
↑
该程序还包含一个错误,导致它无法完全用尽搜索 space。 sprintf 的格式说明符必须是zero-padded,否则十六进制数字串太短;换句话说在原始程序中它必须是 %04x
,而不是 %x
.
我正在研究关于文件上传高漏洞的DVWA。我想绕过过滤器,它只允许上传 jpg 或 png 等图像。所以我打算将 payload <?=phpinfo();
嵌入到图像文件中。经过搜索,我发现了这些很棒的博客:
- An XSS on Facebook via PNGs & Wonky Content Types
- Encoding Web Shells in PNG IDAT chunks
- Revisiting XSS payloads in PNG IDAT chunks
我懒得研究 Deflate 算法和搜索 png shell 生成器并找到了这个很棒的存储库:
克隆和 运行 之后,效果很好。但有效载荷是针对 XSS Vuln output here:
<SCRIPT SRC=//ABC.DE></SCRIPT>
我想完成 DVWA 的 objective。它说
Execute any PHP function of your choosing on the target system (such as phpinfo() or system()) thanks to this file upload vulnerability.
所以,我想要的有效负载是:<?=phpinfo();?>
嵌入到 PNG 的 IDAT 块中,此有效负载从 IDAT 上的过滤器和压缩中幸存下来。从存储库中,我找到了 f1n1te / idontplaydarts 博客之前描述的 bruteforce() 逻辑。我复制了源代码并尝试使用我的有效负载 here 来暴力破解压缩,但在符号字符上失败了。基于 source/generator,我有 2 个问题:
- 为什么在 the source 上,暴力破解符号“<”和“?”以及另一个 ascii 符号都失败了?但它适用于 ascii "a-z" & "A-Z".
在我发现的 3 个博客和 1 个存储库中,它们使用此有效载荷来暴力破解 Deflate:
7ff399281922111510691928276e6e5c1e151e51241f576e69b16375535b6f
- f1n1tef399281922111510691928276e6e562e2c1e581b1f576e69b16375535b6f0e7f
- 亚当03a39f67546f2c24152b116712546f112e29152b2167226b6f5f5310
- idontplaydarts0000f399281922111510691928276e6e5313241e1f576e69b16375535b6f0000
- 存储库
那些家伙如何获得所有这些有效载荷以暴力破解 Deflate Compression?
暴力破解失败,因为它太短了。您需要 5 个半字节,而不仅仅是 4 个。我用箭头标记了额外的数字。
0000f399281922111510691928276e6e....1f576e69b16375535b6f0000 your template
0000f399281922111510691928276e6e51121f576e69b16375535b6f0000 "x4c`0<SCRIPT SRC=//PH></script>[=10=]w4)"
0000f399281922111510691928276e6e576f5f576e69b16375535b6f0000 "x4c`0<SCRIPT SRC=//<?></script>[=10=]w4)"
↑
该程序还包含一个错误,导致它无法完全用尽搜索 space。 sprintf 的格式说明符必须是zero-padded,否则十六进制数字串太短;换句话说在原始程序中它必须是 %04x
,而不是 %x
.