当用户发送此类格式“网址”的时候:
www.baidu.com..\..\..\..\..\..\..\Windows\System32\cmd.exe
对方接收之后,点击鼠标左键打开该网址的时候,会被当成路径打开,从而可以恶意执行一些程序、系统命令,造成严重安全隐患。
漏洞原理很简单,不解释了……
条件如下:
1、不能 url 编码,只能明文,囧rz……
2、不能使用中、英文空格,路径会被“打断”。(可以试试自定义发包构造一下,或者尝试一下 Web 端发送。)
3、不能存在 % 号等特殊字符,原因和第一条一样。
4、不能跨分区,例如:..\..\c:\..\Windows\System32\cmd.exe,如果对方QQ没有安装在系统盘,那么效果会大大折扣。
5、网址必须是可信网址,才可以直接点开。
6、字符串长度有限制,大概255字节左右。
空格是个蛋疼问题,不能带参数执行程序了,也许可以试试特殊字符。
可以试试跟踪一下函数调用过程,也许可以直接写入 ShellCode。
严格的来讲,这个不是腾讯自身的问题,是腾讯调用的api的问题,没有明确指定是文件还是网址,Windows 则会优先调用文件,你可以试试用CMD执行:
dir
www.baidu.com..\..\..\..\..\..\..\Windows\System32\cmd.exe
start
www.baidu.com..\..\..\..\..\..\..\Windows\System32\cmd.exe
就明白了。
字符串:
www.baidu.com,被系统当成了一个文件或者目录。
我猜是腾讯调用的API:ShellExecute。
ShellExecute 的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。
ShellExecute,可以打开文件、路径,或者调用与之关联的程序打开,例如:图片、音乐、网址等,问题出在这……
在没有明确指定是文件还是网址的情况下,Windows 会优先调用文件……
回顾历史,腾讯在处理网址中特殊字符的时候一直存在各种各样的问题,历史上也有过此类“远程命令执行”漏洞,甚至还有爆内存的,例如:腾讯 QQ、TM 远程读取内存数据漏洞、可导致远程溢出、拒绝服务攻击