2015531 网络攻防 Exp1 PC平台逆向破解(5)M

2015531 网络攻防 Exp1 PC平台逆向破解(5)M

实践目标

本次实践的对象是linux的可执行文件

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode

实践一

首先,通过命令objdump -d pwn1对文件进行反汇编

然后通过命令vi pwn1编辑文件

通过命令:%! xxd把文件转为十六进制编辑模式

通过命令/d7ff找到需要修改的地方,最后输入i进入编辑模式,即把d7为c3

改完后输入命令:%! xxd -r将文件转回至二进制形式,再输入:wq保存并退出

此时我们可以看到程序已从原来跳转至foo函数变为跳转至getshell函数

实践二

通过命令gdb pwn2进行调试,通过命令r进行运行,通过命令info r可查看各寄存器的值,其中主要关注EIP寄存器的值

由可知此1234这四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。因此只要把这四个字符替换为getShell的内存地址,输给pwn1,pwn1就会运行getShell

确认用什么值来覆盖返回地址

getShell的内存地址,通过反汇编时可以看到,即0804847d。

对比之前EIP寄存器显示的值0x34333231,此处应输入11111111222222223333333344444444\x7d\x84\x04\x08

实践三

输入命令execstack -s pwn1设置堆栈可执行

输入攻击命令(cat input_shellcode;cat) | ./pwn3

找到进程号:4703

输入gdb进行调试

posted @ 2018-03-18 21:12  20155331  阅读(185)  评论(0编辑  收藏  举报