我想用一个具体的例子来说明利用缓冲区溢出的威力有多大。
为了实现这个目标,我准备了这个简单的 C 程序,称为“bo”:
#include <stdio.h>
#include <string.h>
void function(char* input) {
char buffer[128];
strcpy(buffer, input);
printf("Your input is: %s\n", buffer);
}
void main(int argc, char **argv) {
function(argv[1]);
}
我用选项编译:-fno-stack-protector 和 execstack。
一切正常,我可以启动我的 shellcode 来打开一个新的 bash。
在我的系统(Ubuntu MATE 15.10 32bit)中,我有 2 个用户:“user”(组:用户)和“admin”(组:admin),都具有 sudo 权限。
我想要做的是使“用户”能够以“管理员”的权限执行“bo”,这样当发生缓冲区溢出并执行 shellcode 时,我有一个以“管理员”权限运行的 shell(并且从此shell,如果我运行命令“id”或“whoami”,我想表明现在我们是“admin”)。
我已经看到我需要将 SUID/SGID 权限更改为“bo”。我尝试了很多方法,但是当 shellcode 运行时,我总是有一个从“用户”启动的 shell。