CTFshow pwn2

学了这么久的汇编,第一次做出pwn的题,签到题不算

题目

在这里插入图片描述
这里根据题目信息我们先nc一下

在这里插入图片描述
注意到题目所带的stack文件,我们可以用

在这里插入图片描述工具去查壳
在这里插入图片描述
观察上面的信息,就是说这个文件是Ubuntu下的32位文件
我们也可以用Linux的checksec工具检查
在这里插入图片描述Rech
判断是32还是64位

RELRO
Partial (部分)RELRO容易受到攻击
查阅一下:
RELRO(ReLocation Read-Only)机制的提出就是为了解决延迟绑定的安全问题,它最初于2004年由Redhat的工程师Jakub Jelínek实现,它将符号重定向表设置为只读,或者在程序启动时就解析并绑定所有动态符号,从而避免GOT上的地址被篡改

Stack
No canary found没有防溢出(没有栈堆保护)

NX
NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,如此一来,当攻击者在堆栈上部署自己的shellcode并触发时,这会直接造成程序的崩溃,但是可以利用rop这种方法绕过

PIE
Linux 平台下还有地址空间分布随机化(ASLR)的机制。简单来说即使可执行文件开启了 PIE 保护,还需要系统开启 ASLR 才会真正打乱基址,否则程序运行时依旧会在加载一个固定的基址上(不过和 No PIE 时基址不同)。
而这里是No PIE,没有这个保护

我们将这个运行文件拖入IDA,因为IDA分为32和64位
32位的就对应32位的IDA

在这里插入图片描述这就是我们nc所运行的文件
这里我已经用F5进行了反汇编,转换成C语言
首先我们先阅读主函数
C语言从主函数进入
setvbuf()函数相当于对文件流的规定,对文件进行操作,需要将磁盘中的文件写入内存中,相应的会在内存区建立一个缓存区用于与磁盘交换数据。这里我们先不必理会
看到左侧
pwnme这个函数其实已经是个提示了
我们看看
在这里插入图片描述这里有个fgets函数,我们看看
在这里插入图片描述这个函数啥意思:
fgets()相当于对数组s,从stdin文件中输入50个字节
但在pwnne函数中char s的定义是9个字节
也就是溢出了
所以这道题,就是栈的溢出问题
利用栈溢出,覆盖地址,去我们想要执行函数的地址,从而绕过一些操作
利用方式:覆盖程序的返回地址为攻击者所控制的地址,比如该地址为执行shellcode的地址shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,可以让攻击者获得shell,利用pwntools可自动生成
点击char s[9]
我们看到
在这里插入图片描述

在这里插入图片描述
这部分是s[9]的地址
如果看不懂,建议学习汇编语言后再来看
注意在+0000004处,就是s下面有一个r,这个r就是ret(Push, Pop, call, leave 和 Ret 指令图解)我们可以通过输入9字节占满s的大小,然后+4覆盖ret,让其返回到我们想要到的地方(轻则破坏程序,重则得到shell)
这里就是用了栈的溢出
所以我们要利用这个返回值,去执行我们想要执行的函数
观察
从StringWindows我们看到了/bin/sh

在这里插入图片描述在这里插入图片描述

我们点击这里就会查看到

在这里插入图片描述
/bin/sh这里涉及到Linux的命令
由地址我们可以看到
在这里插入图片描述
system函数在之前的复现的题目中有,这里不做解释

查阅一下:
/bin/sh 只是为了符合 POSIX 订定的接口
POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )
也是就执行了这个命令,对于上述stack这个文件,我们就可以执行Linux系统的一些命令,从而得到我们想要的信息,也就是拿到控制权
注意到stack的执行的地址0804850F
在这里插入图片描述
然后我们写脚本
进行编写exp(exploit漏洞利用)
这里我是在Windos中VC写好py
再把py放到kali中用py运行
这里学习的别人写的脚本

在这里插入图片描述
然后我们运行这个文件

在这里插入图片描述
然后用ls就可以看到此运行程序下的文件
其中有个flag
我们用cat命令打开
在这里插入图片描述成功拿到了flag

从这道中,初步理解了,栈的溢出是怎么回事,以及pwn又到底是怎么做题的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Back~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值