我有一个看起来像这样的程序:
/* buf_overflow.c */
#include <stdio.h>
int main(){
char buf[4];
char exploit_buf[4];
fgets(buf, 4, stdin);
gets(exploit_buf);
printf("exploit_buf: %s\n", exploit_buf);
return 0;
}我将使用"gets“函数的漏洞来缓冲溢出其他一些变量。我想写入" exploit_buf“的值是”aaaaaaaax01\x00\x00\x00“,但是我不知道如何向exploit_buf发送ASCII码"01”和"00“。
我知道使用这个命令"printf“Aaaaaaaax01\x00\x00\x00”“可以输入我想要的字符,但是我不知道如何将它们发送到exploit_buf中。我还知道Alt+(键盘右侧的数字键)可以从我输入的ASCII码生成字符,但这在我的程序中也不起作用。
主要的问题是“如何跳过第一个函数"fgets()”并在“gets()”中输入任意的ASCII代码。
有人知道如何在linux的命令行中输入任意的ASCII代码吗?
发布于 2013-03-09 15:07:16
您可以使用echo -e
$ echo -ne 'AAAAAAAA\x01\x00\x00\x00' | python -c 'import sys; print repr(sys.stdin.read())'
'AAAAAAAA\x01\x00\x00\x00'-e允许echo解释转义代码,而-n禁止尾随换行符。
请注意,Python程序打印出它接收到的字符串表示,这正是我们使用echo发送的内容。
对于更复杂的利用漏洞字符串,简单地使用Perl或Python直接构建利用漏洞字符串并不少见:
$ perl -e 'print "A" x 1024 . "\0\0\0\1"' | ./buf_overflow发布于 2013-03-09 15:15:23
在终端中键入以下命令。
echo $'\000\001' > file1这会将ASCII字符1和ASCII字符2的值保存到名为file1的文件中。现在你可以把它读入你的buffer exploit_buf。
发布于 2013-03-09 15:11:46
来自nneonneo的很好的例子。
但是,如果您希望在没有脚本帮助的情况下直接键入它们,您可以更改键盘配置以使用“美国国际(AltGr死键)”模式(在System ->偏好设置->键盘-> Layout下),然后您可以通过使用右侧的alt按钮轻松使用特殊符号。示例-é是rAlt+e。°是rAlt-shift-0-0 (在按住其他按钮的同时按两次0)。
https://stackoverflow.com/questions/15308226
复制相似问题