moectf2020 write up for rop2
前言
和上一道题其实是差不多的,但是想了半天才想明白是怎么一回事QAQ
0x00.安全检查
首先使用checksec
指令,发现其存在栈不可执行保护
0x01.逆向分析
拖进IDA,我们可以看到这一题和ROP1基本上没有太大的不同,都是直接存在gets函数的溢出漏洞
以及system
函数的gadget和pop rdi
的gadget
(plt表里也有system)
不同的是,这一次并没有给我们预留下可以利用的"/bin/sh"
字符串Or2
0x02.漏洞利用
那么我们是否可以手动读入/bin/sh
字符串呢?答案是肯定的
首先存在gets()
函数可以读入字符串
其次我们在IDA中按下CTRL + S
,可以看到存在一个可以供我们读写的.bss
段
那么我们只需要将/bin/sh
字符串读到这个段上,再将之作为system
函数的参数即可getshell
那么我们可以构造payload如下:
1 | from pwn import * |
连接服务器,发送我们的payload,即可getshell
得到flag:
1 | moectf{d44bc3cb-471b-4906-822b-ea5cb32c4acb} |
moectf2020 write up for rop2
http://meteorpursuer.github.io/2020/12/09/moectf2020 write up for rop2/