system_execve函数
[TOC]
system函数
- system("$0") system(“sh”) system("/bin/sh") system("/bin//sh")都可以拿到shell
- cat *:是一个在命令行中使用的Unix/Linux命令。它的作用是将指定目录下所有文件的内容连接到标准输出(通常是显示在终端上)。这里的 * 通配符表示匹配所有文件。
- ; 是命令分隔符,它允许在一行中执行多个命令。不同指令之间要么用;隔断,要么要用\x00 如system(“sh;cat flag\x00”)
execve函数
execve是一个用于在Linux和Unix系统上执行新程序的系统调用。
- int execve(const char *filename, char *const argv[], char *const envp[]);
- filename: 这是一个指向要执行的可执行文件的路径的字符串。在调用execve时,系统会加载并执行指定路径的可执行文件。
- argv: 这是一个字符串数组,表示新程序的命令行参数。数组的第一个元素通常是可执行文件的名称,接下来是可选的命令行参数,最后以NULL结尾。即argv数组中的每个元素都是一个字符串指针,指向一个命令行参数。例如,{"/bin/ls", “-l”, NULL}表示执行/bin/ls -l命令。
- envp: 这是一个字符串数组,表示新程序的环境变量。数组的每个元素都是一个字符串指针,指向一个环境变量字符串,最后以NULL结尾。通常,我们可以将envp设置为NULL,以继承父进程的环境变量。
- 比如execve(“/bin/cat”,{“/bin/cat”,“/flag”,NULL},0) execve系统调用用于用一个新的程序替换当前进程的映像。在这个例子中,它会启动/bin/cat程序,并将/bin/cat程序替换为当前正在运行的程序。当/bin/cat运行时,它将尝试打开并显示/flag文件的内容。