| system()在溢出中的利用 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:19:42
|
| 翻译整理自 《Advanced usage of system() function》, 原文下载 http://pi3.int.pl/papers/ret-en.txt,截取其中关键部分翻译整理,希望可以给喜欢研究溢出的朋 友提供—些帮助. 近几年来,计算机系统在增强安全性上有了很大的发展,一些增强型的内核补丁之类. 很好地防范了溢出的被利用,造成写exploit的难度大大增加了.Exploit的技术也相对不断 发展其中ret-into-libc技术可以很好地避开某些限制,又是写exploit的一条罗马大道. 对比—下槽统的溢出利用方式,expoit构建一个buf,覆盖了net地址然后跳转到有一大串 NOP的内存某处,由于NOP的妙处NOP后面的shellcode最终被运行了.在ret-into-libc 中,system()很好的再现了类似的溢出利用方式 system()的效果相当于运行一个shell命令(sh -c <command>),以下是system()在exploit 利用时可以构建buffer的样子: |NOPs(space,>)|command(eg.nc..)|system()addr|4bytes shits|NOP addr| 首先是ret,这里ret的地址是system()的地址,用它覆盖EIP,紧跟是4bytes的垃圾数 据,接下来就是要运行的命令所在的内存地址.为了增加成功率,跟传统溢出中构建buffer 一样.可以用—大堆的NOP来移动到目的地.这里可以用来作为NOP的字符有多个,包括 空格( ),分号(;),锯齿符(')和斜线(/) 对以上每个符号在shell里测试一番(省略,译者注) 以下用实例宋分析实际使用,Ftpdctl是—个ProFTPD的附加程序,其中ruln func函数有一个溢出,源代码下载_ftpdctl.c">http://pi3.int.pl/private/0day/p_ftpdctl.c 编译一下就运行: root@pi3:~#gcc server.c -o server root@pi3:~#./server 然后就可以测试了,针对vuln后面的参数: root@pi3:~#telnet localhost 666 ...... vuln AAA (溢出的地方) Vuln runing... Copying bytes... DONE Return to the main loop (因为数据长度载范围内,不会发生溢出) quit root@pi3:~#telnet localhost 666 ...... vuln AAA (A*129,输入多达129个A字符) child 1391 terminated (溢出发生了) Vuln runing... Copying bytes... DONE Return to the main loop Connection closed by foreign host. 当然,这里的129个"A"是通过不断尝试后定位出来的,调试工具用gdb,平台Redhat 9 (译者自己测试过程) [root@RH9 root]#telnet localhost 666 ...... vuln AAA(A*129, 输入多达129个A字符) 暂且不要按回车,再打开一个窗口,用于gdb调试: [root@RH9 root]#netstat -anp|grep server|grep ESTABLISHED (得到进程号) [root@RH9 root]#gdb server 1701 ...... 0xffffe002 in ??() (gdb)c Continuing. (这个时候回到第一个窗口按下回车) .....
[1] [2] [3] [4] 下一页
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 绕过xp sp2防火墙的代码 下一篇文章: 编程之道 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |