网站首页 | 网页制作 | 网络编程 | 图形图象 | 冲浪宝典 | 操作系统 | 软件教学 | 网络安全 | 认证考试 | 下载中心 | 游戏下载
| 网络安全首页 | 安全在线 | 病毒防治 | 黑客攻防 | 漏洞研究 | 黑客编程 | 破解手记 |
您现在的位置: 超人气学院 >> 网络安全 >> 黑客编程 >> 文章正文 用户登录 新用户注册
溢出专题(二) widechar的字符串缓冲溢出攻击技术           
溢出专题(二) widechar的字符串缓冲溢出攻击技术
作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:21:53

WINDOWS内部基本上是使用的widechar的字符串格式,因为没有进行串长度检测或者错误的以multibyte长度检测等原因,往往会造成缓冲溢出。像eeye发现的.printer的溢出、.ida的溢出其实主要原因都是程序员错误对字符串以multibyte长度做检测,而buff用来处理widechar字符串造成。由于这种溢出的特殊性以及这样的溢出越来越多,所以我们需要讨论widechar形式的缓冲溢出攻击。其实之前遇到很多这种形式的缓冲溢出,对这样的溢出也有了一定的研究,所以基本上已经有了一些攻击方法,与大家一起交流。
   
   对于单字节语言,字符串转换成widechar格式后一般是“\xx\00\xx\00”的形式,所以覆盖后返回地址也将是“\00\xx\00\xx”这种形式,而WINDOWS下\00\xx\xx\xx的地址一般是栈区,很少有dll加载在这个地址范围,所以要在\00\xx\00\xx的地址寻找实现比较通用的跳转指令比较困难。当然如果本身有个可传递的shellcode处在这个区域,又能够直接定位,那就可以直接实现跳转。对于这种攻击,现在还没有稳定的通用的实现方法。不过对于iis,因为开始时请求的很多域放在0x00xxxxxx这个区域里面,所以有个试的方法,就是请求里面的很多域(像url、post域)都用大串空指令加shellcode构成,所幸的是iis默认下对于请求长度限制是0x20000 ,很大,好象还没有包含 post的数据,所以可以构造一个特殊请求,占用大量内存,再溢出串使用 \00\xx\00\xx覆盖,只要这个\00\xx\00\xx刚好是在请求的某个域的空指令代码区域里面,就能成功执行到shellcode。刚开始攻击时,因为有大量请求了,一般请求的各个域都超过\00xxxxxx的地址,所以一般会失败,但win2k下的iis5.0出错后会自动重启动,这时成功几率就比较大了。选取合适的\00\xx\00\xx覆盖返回地址,加上大量的空指令,能够达到50%左右的成功率。shellcode实现代码可以成功后自动在内存里面开个后门,那样没有重启动之前以后的攻击就是100%成功了。

  对于双字节语言,字符串转换成widechar格式后就不只是“\xx\00\xx\00”的形式了,基本上与常规的溢出没什么区别,只是要求溢出串要转换成widechar后是正常的溢出攻击串,这就要求先把溢出串作为WideChar的形式经过WideCharToMultiByte转换。但不是所有的串作为WideChar形式经过WideCharToMultiByte转换都合法,所以就先精心编写了一段合法的WideChar串对其它shellcode解码,这就是shellcodefnlock里面的代码,里面连绝对跳转jmp(\xeb不在合法的WideChar范围)指令,过程调用call(后面的数据会出现\00\00或者\ff\ff)都不能用,所以定位都是采用别的方法。因为下面示例代码是采用的异常结构,此时ebx指向shellcode附近,所以如果不是使用异常结构,将是esp指向shellcode附近,shellcodefnlock第一个push ebx指令应该换成push esp,其实也可以两种情况都用push esp。因为异常结构时esp会在ebx之前,但那段shellcode一样会定位到自身。这样对于这种溢出,中(大陆简体中文、台湾的繁体中文)、日、韩三种语言的测试代码都可以保证100%的成功。

  想到这个方法了后,主要难度是在编写shellcodefnlock代码上。这需要熟悉cpu指令码范围与WideChar范围,能够用哪些指令,参数范围等。这个代码调试的时候简直是累死了,想很多编码算法,每个算法有哪些实现方法,每个实现方法需要些什么运算,哪些指令,参数等,再一个个试能不能满足要求。不过调试通了就省心了,后来很多程序直接使用的时候就体会到了享受原来成果的乐趣。 

 
  下面就是实现代码:

char  eipexceptwin2000cn[]="\x73\x67\xfa\x7f";  
//  push ebx ; ret  address  适用于异常结构的跳转

#define  FNENDLONG   0x08
char *fnendstr="\x90\x90\x90\x90\x90\x90\x90\x90\x90";
unsigned  char temp;

[1] [2] [3] [4] 下一页

[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda    责任编辑:kinda 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
     Windows中巧用RUNDLL3[5355]
     黑客软件编写基础知识[827]
     Win32Asm快速教程[535]
    相 关 文 章
    专题研究课题
    RPC溢出漏洞(MS03-26)已
    Windows 2000缓冲区溢出
    window系统下的远程堆栈溢
    windows下强大功能的溢出程
    如何编写自己的缓冲区溢出
    MS04-011远程缓冲区溢出代
    IIS5_IDQ命令行溢出程序源
    Foxmail5远程缓冲区溢出漏
    自己写溢出的基础,溢出原
    溢出代码:Ethereal 0.10.0
    Imail iLDAP溢出分析
    system()在溢出中的利用
    IPSwitch IMail 8.13 删除
    SYMANTEC防火墙内核溢出利
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)