云计算百科
云计算领域专业知识百科平台

buuctf-pwn inndy_rop题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

此处我将文件命名为inndy_rop

file inndy_rop

可以看到这是一个32-bit的文件,并且是statically linked

checksec inndy_rop查看一下保护机制

可以看到只有NX保护开启了

将文件拖入ida,按F5,将汇编代码转换成c语言代码,得到

可以看到明显的gets栈溢出,需要输入0xc+4的垃圾数据直到return address

按shift+F12,再按ctrl+F,搜索/bin/sh发现没有,而且这是一个静态链接,没有system函数,所以这个题需要我们自己手动输入/bin/sh,并拼接execve("/bin/sh")

我们需要找一块空闲的bss缓冲区,用来填写我们的/bin/sh

按shift+F7,双击.bss那一行,得到

我们往下滑,找一段空闲区域,比如我接下来要用到的bss_addr = 0x80eafd0

回到虚拟机

ROPgadget –binary inndy_rop –only "pop|ret" | grep eax

得到pop_eax_ret = 0x80b8016

ROPgadget –binary inndy_rop –only "pop|ret" | grep ebx

得到pop_edx_ecx_ebx_ret = 0x806ed00

ropper –file inndy_rop –search "int 0x80"(在这里用ROPgadget,找不到int 0x80;ret)

得到int_80_ret = 0x806f430

nano exp.py 开始写攻击脚本

其中,第一行payload用于调用read函数,写入/bin/sh,第二行的payload用于调用execve,拼接execve("/bin/sh")

补充:

保存退出

python3 exp.py

cat flag

得到flag

CTF2{4f3bc1f1-25ea-4c18-ae8c-d50dbe6a295a}

此题完

赞(0)
未经允许不得转载:网硕互联帮助中心 » buuctf-pwn inndy_rop题解(学习过程持续更新)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!