20145231熊梓宏 《网络对抗》 Bof逆向基础.shellcode注入
20145231网络对抗《逆向及Bof基础》shellcode注入
实验目的与要求
1.本次实践的对象是一个名为pwn1的linux可执行文件。
2.若该程序正常执行,则main函数会调用foo函数,foo函数会简单回显任何用户输入的字符串。
●该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
3.本次实践主要是学习两种方法:
●利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
●攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
以及注入运行任意代码。
实验内容
1.写一段shellcode代码(此次实验中用的是老师的代码)
2.设置环境
●Bof攻击防御技术
●需要手动设置环境使注入的shellcode到堆栈上可执行。
安装execstack
●设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行
●关闭地址随机化,more /proc/sys/kernel/randomizevaspace用来查询地址随机化是开启状态还是关闭状态,2表示开启,0表示关闭。
●构造payload,采用nop+shellcode+retaddr方式(\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
●新打开一个terminal,注入攻击buf(注意回车要在设置断点后进行,否则无法确认进程号,并且要在gdb执行c前回车)
●再打开一个terminal,用GDB调试5231pwn1sc进程,
●找到进程3483
●用attach追踪
●启动gdb调试进程,设置断点,查看注入buf的内存地址
●此时发现0x080484ae ret 就跳到我们覆盖的retaddr那个地方了
●设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd31c,shellcode就紧挨着这个地址,加四字节为0xffffd320
●退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode如下,完成实验。
相关知识总结
●shellcode概念
●Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起
●构造buf的方法
●Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode
,nop+shellcode+retaddr
,缓冲区小就就把shellcode
放后边,不然就放前边。
心得体会
虽然本次实验完成的是最简单的一部分,直接注入shellcode,课堂上老师也已经分析实践过,但真正自己做还是遇到了很多小问题,如:一开始安装 execstack出错。原因是虚拟机没有联网,更改了网络配置(将网桥改为NAT选项即可),解决了这个问题;还有:注入buf时,因为回车顺序的问题,导致gdb调试一直出错,参考了其他同学的博客之后得到了解决,也思考了原因;总之,要注意细节,多思考,才能提高。