freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

从PNG tEXt到存储型XSS
2018-04-17 15:00:57

PNG-XSS2.png

最近在对某客户的站点做测试时我遇到了一些麻烦。在对许多上传点测试后我发现这些上传点都有着非常严格的文件过滤机制只接受扩展名为.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的末尾加上 “/><script>alert(“xss”);</script>”代码是否会被执行呢可惜的是经过我的测试JS代码并未被执行。

堆栈溢出建议对魔术字节头进行检查以确保PDF的有效性即检查前几个字节是否为“0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A”。

所以我用魔术字节构造了一个“假”的PNG然后将“/><script>alert(“XSS”);</script>”作为一个字节数组并对其进行了编码。同样验证失败但这是一件好事只检查了魔术字节。当前他们使用的是.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。

PNGXXS-1.png

验证通过使用html端点上传结果如下:

{"Name":"image.png.html","Data":"data:image/png;base64,<base64 string>}

以及响应:

{"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"}

最后我们在https://████████████.blob.core.windows.net/images/fjgsc452kgebjli2/image.png.html成功执行了XSS。

PNGXXSpop.png

有许多图像文件类型的文本块,如jpeg和gif以及大量的非图像文件类型,因此请确保你的输入过滤正确验证附加或嵌入的内容。

*参考来源:pentestpartners,FB小编 secist ,编译转载请注明来自FreeBuf.COM

# 存储型 XSS # PNG tEXt
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者