文/superhei(知道创宇404安全实验室) 2016.4.11
注:文章里“0day”在报告给官方后分配漏洞编号:cve-2016-1843
一、背景
在前几天老外发布了一个在3月更新里修复的imessage xss漏洞(cve-2016-1764)细节 :
https://www.bishopfox.com/blog/2016/04/if-you-cant-break-crypto-break-the-client-recovery-of-plaintext-imessage-data/
https://github.com/bishopfox/cve-2016-1764
他们公布这些细节里其实没有给出详细触发点的分析,我分析后也就是根据这些信息发现了一个新的0day。
二、cve-2016-1764 漏洞分析
cve-2016-1764 里的最简单的触发payload: javascript://a/research? prompt(1) 可以看出这个是很明显javascript协议里的一个小技巧 %0 没处理后导致的 xss ,这个tips在找xss漏洞里是比较常见的。
这个值得提一下的是 为啥要用prompt(1) 而我们常用的是alert(1) ,我实际测试了下发现alert确实没办法弹出来,另外在很多的网站其实把alert直接和谐过滤了,所以这里给提醒大家的是在测试xss的时候,把 prompt 替换 alert 是有必要的~
遇到这样的客户端的xss如果要分析,第一步应该看看location.href的信息。这个主要是看是哪个域下,这个漏洞是在applewebdata://协议下,这个原漏洞分析里有给出。然后要看具体的触发点,一般在浏览器下我们可以通过看html源代码来分析,但是在客户端下一般看不到,所以这里用到一个小技巧:
javascript://a/research?
prompt(1,document.head.innerhtml)
这里是看html里的head代码
继续看下body的代码:
javascript://a/research?
prompt(1,document.body.innerhtml)
三、从老漏洞(cve-2016-1764)到0day
xss的漏洞本质是你注入的代码最终被解析执行了,既然我们看到了document.head.innerhtml的情况,那么有没有其他注入代码的机会呢?首先我测试的肯定是还是那个点,尝试用"及<>去闭合,可惜都被过滤了,这个点不行我们可以看看其他存在输入的点,于是我尝试发个附件看看解析情况,部分代码如下:
四、后记
当然这里还有很多地方可以测试,也有一些思路也可以去测试下,比如那个名字那里这个应该是可控制的,比如附件是保存在本地的有没有可能存在目录专挑导致写到任意目录的地方。有需求的可以继续测试下,说不定下个0day就是你的 :)
最后我想说的是在分析别人发现的漏洞的时候一定要找到漏洞的关键,然后总结提炼出“模型”,然后去尝试新的攻击思路或者界面!
参考链接
https://www.seebug.org/vuldb/ssvid-92471
试用申请