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方式(\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为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 "\x20\xd3\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) | ./20145335hh1
时候两个shellcode输入错误,导致修改的是一段代码,注入又是另一段代码导致最后结果出现了问题,及时更正了过来完成了实验