格式化字符串-retaddr

本文介绍了如何利用格式化字符串漏洞在Linux环境下劫持程序的返回地址,以达到执行任意代码的目的。通过分析程序,发现存在格式化串漏洞,可以修改栈上的返回地址。在面对Full RELRO保护时,通过计算相对偏移,找到并修改返回地址,使其指向system('/bin/sh')的地址,从而获取shell。文中提供了利用思路和具体操作步骤,并针对不同系统可能遇到的问题给出了解决方案。
摘要由CSDN通过智能技术生成

hijack retaddr(劫持返回地址)

原理

很容易理解,我们要利用格式化字符串漏洞来劫持程序的返回地址到我们想要执行的地址。
这里以三个白帽pwnme_k0为例:
在这里插入图片描述
这里有NX和Full RELRO,先介绍一下RELRO:
Partial RELRO: gcc -Wl, -z, relro:

ELF节重排
.got, .dtors,etc. precede the .data and .bss
GOT表仍然可写

Full RELRO: gcc -Wl, -z, relro, -z, now

支持Partial RELRO的所有功能
GOT表只读

那么这里我们就无法修改got表了。

分析程序

简单分析得知,程序实现了一个类似注册之类的功能,能够查看和修改,我们在查看功能发现了格式化串漏洞,即输出时:
在这里插入图片描述我们看到,printf(&v9+4),这里回溯一下,发现我们输入的password也是&v9+4:
在这里插入图片描述
我们还发现我们输入的username在距离password的20字节处:
在这里插入图片描述

利用思路

我们的最终目的就是为了获得系统的shell,我们发现在0x4008A6地址处有直接调用system(’/bin/sh’)的函数,那如果我们修改某个函数的返回地址为这个地址,那就相当于获得了shell:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值