繁体   English   中英

我应该如何在有效输入和缓冲区溢出的shellcode之间划定界限?

[英]How should I delimit between the valid input and the shellcode for my buffer overflow?

给我一个分配任务的程序,并告诉我对其进行缓冲区溢出。 我的教授已经配置了我们正在研究的VM,以便在堆栈上执行shellcode,因此我只需要将shellcode的开头放入返回地址中即可。 我试图溢出的缓冲区是s1[64] s1应该是一个有效的文件名,因为它将在程序中稍后使用,如果无效,它将导致程序exit(1) 我假设我应该用以下格式的输入填充s1validFileName+fileNameTerminator+Filler+Shellcode

S1是从命令行上使用读取scanf(%s,s1) 我遇到的问题是,无论我选择在有效文件名与填充符和shellcode的开头之间放置什么内容,程序都认为整个输入都是文件名,无法打开它。 我尝试使用短文件名以及63和64长度的文件名,所有文件都给出相同的结果。 例如:如果我给s1输入为/./././././././././././././././././././././././testFile1GCL.txt\\0AAAAAAAA\\xeb\\x18\\x5e\\x31\\xc0\\x88\\x46\\x07\\x89\\x76\\x08\\x89\\x46\\x0c\\xb0\\x0b\\x8d\\x1e\\x8d\\x4e\\x08\\x8d\\x56\\x0c\\xcd\\x80\\xe8\\xe3\\xff\\xff\\xff\\x2f\\x62\\x69\\x6e\\x2f\\x73\\x68我期望s1的值为/./././././././././././././././././././././././testFile1GCL.txt足够长以填满整个缓冲区,后跟空终止符。 问题是,当我打印出s1时,它会打印整个输入,就好像没有看到空终止符并且显然是在给定范围之外。 然后,这将导致程序出错,因为该大问题显然不是有效的文件名。

我已经尝试了几乎可以想到的所有东西,可以放在文件名和其余有效内容之间,包括\\\\0 \\0 0x0 0x90 无论如何,程序始终认为s1是整个长输入,并且失败。 即使不能识别终止符,为什么还要在分配给s1的64个字符之外查找呢?

编辑:我现在尝试在文件名和有效负载的其余部分之间放置一个空格,以防止文件退出,但这仅是因为scanf停在了该空间,并且在其余有效负载中没有读取

尝试创建/tmp/{shellcode here}类的文件。 即使您的FS不支持名称中包含来自所选shellcode的某些字节的文件,也可以尝试许多方法。

您也可以尝试将shellcode放在环境变量中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM