我试图利用缓冲区溢出漏洞。为此,我想将一个先前确定的地址(如\x00\x00\x41\xab\x00\xab
)传递给程序,以便将其作为字节写入内存,而不是输入字符串的字节表示形式。请考虑以下示例:
Address I want to write as hex string: \x00\x00\x41\xab\x00\xab
Memory before overflow: ab ab 00 00 aa 00 (these values could be arbitrary since its stack memory)
Memory after overflow : 00 00 41 ab 00 ab
我尝试写入的缓冲区是通过以下方式访问的:
void overflow(char input[], end){
for(int a = 0; a < end; ++a){
char buffer[32];
buffer[a] = input[a];
}
end
的值由input
的长度决定,溢出与我的问题无关,我的问题是:
如何将一个地址以任何形式(十六进制、字节串等)作为命令行参数传递给程序(通过argv[]
),以便如上所示将其写入内存?
特别是,如何处理\x00
字符?
我发现了this问题,不幸的是,它没有提供解决方案。注意,我并没有试图通过管道传输参数,因为程序不从标准输入中读取。
1条答案
按热度按时间bq9c1y661#
我将输入作为文本字符串,如"000041ab00ab",然后编写一些简单的代码来进行转换。
比如:
以
prog 000041ab00ab
的形式运行,得到以下输出: