egg hunter深入研究与总结

      原来一直对egg hunter有所了解,但是基本上都是表面上的,感觉看懂了,实际上还是不懂原理的,最近抽了点时间仔细研究了下这个技术。nologin的经典的egghunt-shellcode.pdf的教程,感觉nologin出品的很多专题都讲的很好,在此推荐下。本文是自己总结的一点,可能存在很多错误的地方,望指教。
原理:
       egg hunter实际上就是在缓冲区溢出中有时候我们可以利用字节数被限制了,不能达到我们想要的目的,但是可以把shellcode放到其它的地方,于是就需要在这小的字节中布置我们的代码来查找存在其它地方可以执行的shellcode。
分类:
      根据使用不同的原理可以分为以下几种方式:
1、SHE
     通过安装一个自定义的异常处理程序,一个egg hunter可以捕获并忽略访问异常,当他们在搜寻内存区域的期间。
     优点:通用性比较好
     缺点:safe seh的限制、在搜索期间发生其它的异常就无法处理了。
2、IsBadReadPtr
     IsBadReadPtr自己会安装异常处理结构体,同时判断指向的字节是否可以被读取,如果指向的内存不能被读取,就会返回成功,否则返回失败,并且指针被假设是合法的,指向的地址可以执行。
     优点:它的使用一个简单的API函数来判断地址是否可以访问,
     缺点:需要IsBadReadPtr函数的确切地址,即通用性不是很好。
3、NtDisplayString
    我们之所以能使用该函数用于执行安全内存空间搜索的主要原因是:该函数从唯一的一个参数中读取数据并且没有写操作。如果函数参数指向的地址不可读,那么函数将返回内存访问异常(0xc000000005)的错误代码。
     优点:速度最快,占用字节数最少,鲁棒性最好的方法
     缺点:0x43一直没有改变,支持所有系统除了window9x。
4、NtAddAtom
     Dave/Alex在邮件列表和Twitter上分别谈到了用NtAddAtom来实现搜索shellcode的方法,而且该系统调用在NT以上的系统的调用号都是一致的(0x08)。
     对这个返回地址的0xc0000033还真不能确定。
总结:相对而言,最后一种方法是最好的~
ps:编程能力很挫,有些东西搞不定
参考文献:
http://hi.baidu.com/int3/blog/item/32fe34af160c60f0faed506f.html
http://hi.baidu.com/lisl03/blog/item/860b1782900f7db96d811957.html
http://www.nologin.org/



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: egghunter漏洞
相关日志:
评论: 0 | 引用: 0 | 查看次数: 175
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 100 字 | UBB代码 开启 | [img]标签 关闭