BUUCTF之“ciscn_2019_sw_1”

本文探讨了一次实战中如何通过巧妙利用格式化字符串漏洞,结合程序执行流程,将printf函数地址改写为system,从而绕过保护机制获取shell。作者分享了payload构造细节和理解过程,包括对fini_array和printf_got地址的精确调整,以及对'-'操作符在地址计算中的应用。

格式化字符串结合程序执行,更深入理解的一次实践.

本题只有一次格式华字符串漏洞利用机会且写入字节有限,题目保护:在这里插入图片描述
只开了NX,我们考虑利用任意写将printf函数地址改为system,但是少了一个“/bin/sh\x00”
根据函数正常的执行流,函数执行前会调用init类初始化函数,执行后会调用fini.array[]数组里地址对应函数。所以如果我们将其改为main函数,那么可以再次输入参数“/bin/sh\x00”拿到shell,在这里插入图片描述
现在问题是怎么改:
我发现一种好理解的方式
我们先看wp1:

from pwn import *

sh = remote('node4.buuoj.cn',27731)

payload = b"%2052c%13$hn%31692c%14$hn%356c%15$hn" + p32(0x804989c + 2) + p32
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值