20145335郝昊《网络攻防》Bof逆向基础——ShellCode注入与执行
实验原理
-
关于ShellCode:ShellCode是一段代码,作为数据发送给受攻击服务器,是溢出程序和蠕虫病毒的核心,一般可以获取权限。我们将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出漏洞,覆盖成为指向ShellCode的地址。
-
Linux中两种基本构造攻击buf:
retaddr+nop+shellcode
,nop+shellcode+retaddr
,缓冲区小就把shellcode放后面,若缓冲区较大把缓冲区放置前边。
实验目的与要求
-
本次实践对象是一个名为pwn1的可执行文件。
-
对可执行文件pwn1进行操作,注入并运行任意代码。
实验过程及结果
- 写一段shellcode代码(本次实验采用老师的代码)
- 设置环境,手动安装execstack
- 拷贝并运行pwn1文件确保可以使用
- 设置堆栈可执行
- 关闭地址随机化,more/proc/sys/kernel/randomizevaspace用来查询地址随机化是否开启或者关闭的状态,2表示开启,0表示关闭。
- 构造payload,采用nop+shellcode+retaddr方式(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
- 打开一个新的terminal,注入攻击注入攻击buf(注意回车要在设置断点后进行,否则无法确认进程号,并且要在gdb执行c前回车)
-用GDB调试20145335hh1进程,找到进程3400,用attach追踪
-
启动gdb调试进程,设置断点,查看注入 buf的内存地址
-
此时发现0x080484ae ret 就跳到我们覆盖的retaddr那个地方了
-
设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd31c,shellcode就紧挨着这个地址,加四字节为0xffffd320
-
退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode如下打印字母'H',完成实验。
心得体会
本次实验老师在课堂上也有讲到过,但是在自己实验过程中还是遇到问题,比如在最后一步输入命令的时候遇到了问题,在命令perl -e 'print "H" x 32;print "x20xd3xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00xd3xffxffx00"' > input_shellcode
和命令(cat input_shellcode;cat) | ./20145335hh1
时候两个shellcode输入错误,导致修改的是一段代码,注入又是另一段代码导致最后结果出现了问题,及时更正了过来完成了实验