一、实验内容
1.手工修改可执行文件,改变程序执行流程。
2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址。
3.注入一个自己制作的shellcode并运行这段shellcode。
二、实验过程
1.
反汇编看看代码
这个函数看着是开辟一个24字节的内存,然后把一个数据存到开辟的内存里,然后调用另一个函数。ebp一般用来存函数起始地址,运行函数前先把地址存上,运行完之后再把这个地址给esp栈指针接着运行别的函数。
main函数开局就掉到foo函数了,只需要把这里改成目标函数,让他call 0804847d
对应十六进制数只需要做个加减
修改后运行
ok了
2.
这里是把输入的东西输出出去,输入的内容放到了内存里,又可以操作了
字符串超过28字节就已经覆盖进入这个函数前的栈地址了,到这里就可以攻击
超过ebp的部分就是eip寄存器,直接攻击这里就可以转到相应函数了。
输入一长串,把后面的字节改为目标函数地址,要注意大小端和字节的顺序。
成功。
3.
shellcode直接上网找一个或者生成一个,有现成的生成代码
关闭地址随机化,开始找pwn11中ret的代码位置
gdb调试,找foo函数,再设置断点找到ret地址
然后试了两个shellcode代码都错误。
再试一次
0xffffd65c 加上4再小端法就是60d6ffff
成功了