PWN格式化字符串2——例子

PWN格式化字符串2——例子,第1张

这一部分主要写三道PWN题,都还算是比较简单的,同样参考CTF-wiki里的writeup

这道题是64位的格式化字符串漏洞,主要利用格式化字符串漏洞泄露内存中的数据就足够了。

64位的偏移计算和32位类似,都是算对应的参数。只不过64位函数的前6个参数是存储在相应的寄存器中的。那么在格式化字符串漏洞中呢?虽然我们并没有向相应寄存器中放入数据,但是程序依旧会按照格式化字符串的相应格式对其进行解析。

以UIUCTF中 pwn200 GoodLuck为例进行介绍。需要在本地设置一个flag.txt文件

IDA看一下程序,发现错误出在 printf(format) 这里

里边的format字符串是接收用户的输入,这样就提供了触发该漏洞的机会。

在printf处下断点,放开运行

(1)可见flag对应的栈上的偏移为5,除去对应的第一行为返回地址外,其偏移为4。

(2)此外,由于这是一个64程序,所以前6个参数存放在对应的寄存器中,fmt字符串存储在RDI寄存器中,所以fmt字符串对应的地址的偏移为10。

(3)而fmt字符串中 %order$s 对应的order为fmt字符串后面的参数的顺序,所以我们只需要值入 %9$s 即可得到flag的内容

在目前的C程序中,libc中的函数都是通过GOT表来跳转的。此外,在没有开启RELRO保护的前提下。每个libc的函数对应的GOT表项是可以被修改的。

因此,我们可以修改某个libc函数的GOT表内容为另一个libc函数的地址来实现对程序的控制。

比如说我们可以修改printf的got表项内容为system函数的地址。从而,程序在执行printf的时候实际执行的是system函数。

假设我们将函数A的地址覆盖为函数B的地址,那么这一攻击技巧可以分为以下步骤

(1)确定函数A的GOT表项

这一步我们利用的函数A一般在程序中已有

(2)确定函数B的内存地址

这一步通常来说,需要我们子集想办法来泄露对应函数B的地址。

(3)将函数B的内存地址写入到函数A的GOT表地址处。

这一步一般来说需要我们利用函数的漏洞来进行触发,一般利用方法有如下两种

·写入函数:write函数

·ROP

开启了NX保护,即数据不可执行

main函数

简单运行一下pwn3,再看主函数,需要简单进行一下reverse

ask_username()函数接收第一次的输入,ask_password对输入进行验证,和"sysbdmin"进行比较

ask_username()中对输入字符串进行了简单的变化,先计算一下需要输入的字符串

计算出输入值为 'rxraclhm'

在主循环中有put_file(),show_dir(),get_file()三个函数

put_file()

看看put_file函数中,接收我们输入file的名字以及内容。

使用malloc分配244个字节,建立如下数据结构,多次的put将形成一条链表。

get_file()

get_file()函数中存在格式化字符串函数。

要求先输入filename,然后遍历链表,匹配filename,找到则输出内容。找不到的话,是输出当前栈里的内容。

show_dir()

遍历链表,将所有的filename串起来输出。

并且里边调用了puts()函数,因此可以修改puts@got表

利用之前的知识来计算偏移量,输入 aaaa.bbbb.cccc.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p

,则

有两种判断偏移的办法

(1)看%p输出的结果里,偏移为7

(2)从栈中看0xffffced4到0xffffceec的偏移为7

(1)首先读取puts@got的内容,得到puts函数的地址,然后通过libc中偏移量固定的方式计算出system的地址。

(2)将system地址写到puts@got里,替换puts函数

(3)让程序执行pus('/bin/sh'),那么实际执行的是system('/bin/sh')

再说两句

这道题踩了几个坑,首先是用题目自带的libc,怎么做也做不出来。后来用LibcSearcher,也匹配不到,到后来还是去libc database search搜索到的对应libc版本。

嗯,得到了puts的地址之后,慢慢做,会出来的。

fmtstr_payload()

fmtstr_payload()是pwntools里面的一个工具,用来简化对格式化字符串漏洞的构造工作。

可以实现修改任意内存

fmtstr_payload(offset,{printf_got:system_addr}) (偏移,{源地址:目的地址})

mtstr_payload(offset, writes, numbwritten=0, write_size=‘byte’)

第一个参数表示格式化字符串的偏移;

第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将printf的GOT数据改为system函数地址,就写成{printfGOT:

systemAddress};本题是将0804a048处改为0x2223322

第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;

第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。

fmtstr_payload函数返回的就是payload

hijack retaddr

利用格式化字符串漏洞来劫持程序的返回地址到我们想要执行的地址。

开启了数据不可执行(NX),并且有RELRO,所有不能修改GOT表

首先是一个让我们输入username和 password的函数

需要注意的是里边读取密码的部分,

read(0,(char *)&a9+4,0x14uLL)

漏洞出现在下边的函数中,其输出内容为&a4+4。

第二个printf输出的内容正&a9+4好是之前read写入password的内容。

并且在IDA中分析可以得知&a9+4-&bufa=14h=20

system('/bin/sh')

发现strings里面有/bin/sh,在0x4008A6地址处有一个直接调用system('/bin/sh')的函数。

如果修改某个函数的返回地址为0x4008A6,那就相当于获得了shell。

虽然存储返回地址的内存本身是动态变化的,但是其相对于rbp的地址并不会改变,所以我们可以使用相对地址来计算。利用思路如下:

(1)确定偏移

(2)获取函数的RBP与返回地址

(3)根据相对偏移获取存储返回地址的地址

(4)将执行system函数调用的地址写入到存储返回地址的地址。

在printf处下断点,输入aaaaaaaa为用户名,

密码输入为 %p%p%p%p%p%p%p%p%p%p

可以看到用户名在栈上第三个位置,除去本身格式化字符串的位置,其偏移为5+3=8。

并且栈上第二个位置存储的就是该函数的返回地址(其实也就是调用show account函数时执行push rip所存储的值),在格式化字符串中的偏移为7。

与此同时栈上,第一个元素存储的也就是上一个函数的rbp。所以我们可以得到偏移0x7fffffffdde0- 0x7fffffffdda8=0x38。继而如果我们知道了rbp的数值,就知道了函数返回地址的地址。

0x400d74与0x4008A6只有低2字节不同,所以我们可以只修改0x7fffffffdda8开始的2个字节,因此可以利用$hn只对后三位修改即可,0x8A6对应的10进制数字为2214,但是这里需要修改为2214+4=2218

#ios越狱#

8月20日消息!据外媒报道!iOS 14.6 / 14.5.1 / 14.5 #JAILBREAK (A12+) 新闻:PwnMy / Manticore 更新 + 加入了团队!以下是你需要了解的有关 PwnMy / Manticore、我加入团队和计划的所有信息。

现为了等待iOS 14.5 到 iOS 14.6越狱的用户们带来了一些好消息,尤其是在 A12+ 设备上。我将加入 Manticore 越狱团队,即 Manticore 越狱和 Pwn-My Jailbreak 的开发者,以帮助更快地开发这些越狱。

Manticore 团队使用 Saar Amar 的新 LPE 漏洞和一些 WebKit 漏洞开发了 PwnMy,这是一种基于 Safari 的越狱软件。

其中Manticore Jailbreak和PwnMy Jailbreak 是同时开发的两个不同的实用程序。

Manticore 团队发文表示:将解决社区提出的一些问题,即 Unc0ver Jailbreak 和 Taurine Jailbreak 是否可以从 Saar Amar 最近发布的 LPE 漏洞中受益,或者它是否只能用于 PwnMy (Safari越狱)。

我们还将讨论 A12+ 设备上的 iOS 14.7、iOS 14.6、iOS 14.5 和 iOS 14.4 最有可能首先越狱。

PwnMy Jailbreak 和 Unc0ver Jailbreak 是两个非常不同的软件。一个是基于 safari 的越狱,您可以使用它在浏览器中直接从设备本身越狱您的设备。

而另一个是 IPA 独立 iOS 应用程序,需要签名和所有爵士乐才能使用它,但达到了相同的目标。它们以不同的方式工作,因此需要不同的漏洞。

另一个骗局 还要求捐款 关于 15 次越狱 / 15 次越狱骗局的完整详细信息,Mientecore 将在应用商店中以 20 美元的荒谬价格提供。『注:请小心。』

接下来是,官方 Mientecore 在 iOS 15 beta 6 上运行越狱工具。新的 Sileo 2.2 测试版可用于所有越狱。

消息来源,CoolStar团队今天针对Taurine 越狱工具进行更新发布1.0.7 正式版。

最新版本主要有以下两点说明:

①修复用户空间重启文件损坏,导致引导循环的问题

②恢复菜单可以通过添加手动激活/.libhooker_recovery,然后通过用户空间重启启动

简单说,就是提供恢复菜单和启动进行修复!

此外!如果你使用的是该款Taurine 工具越狱的,建议你更新到 1.0.7 版本,则该版本支持 iOS 14.0 至 14.3 系统版本。

可在WX『有趣工具箱』小程序里获取新地址进行安装。这里需注意的是!目前 Taurine 1.0.7 是可安装,但不确定什么时候掉签,一旦掉签就不能正常安装了。所以,需要越狱的伙伴们得赶紧了。

另外!除了上述的Taurine越狱工具发布了1.0.7版本之外!同时还推出了sileo 2.2 正式版,之前是公测,现在是正式版了。

该工具方面与此前Sileo 2.2 公测版本一样,据官方描述得知,该版本较为稳定,可建议玩机的伙伴们更新,如果你之前有安装过公测版的,可直接卸载,然后再更新Sileo 2.2正式版即可!

再次感谢大家的支持!更多数码 科技 产品每日资讯看点,敬请关注!

『S数码 科技 资讯看点K』!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8073216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存