2
0

【Hack The Box】Headless【WriteUp】

Last updated at Posted at 2024-07-20

初めに

本記事は Hack The Box(以下リンク参照) の「Headless」にチャレンジした際の WriteUp になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。

※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。

初期探索

ポートスキャン

┌──(root㉿kali)-[~/work]
└─# rustscan -a 10.10.11.8 --top --ulimit 5000
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy           :
: https://github.com/RustScan/RustScan :
 --------------------------------------
Real hackers hack time ⌛

[~] The config file is expected to be at "/root/.rustscan.toml"
[~] Automatically increasing ulimit value to 5000.
Open 10.10.11.8:22
Open 10.10.11.8:5000
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")

[~] Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 09:14 EDT
Initiating Ping Scan at 09:14
Scanning 10.10.11.8 [4 ports]
Completed Ping Scan at 09:14, 0.24s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 09:14
Completed Parallel DNS resolution of 1 host. at 09:14, 0.01s elapsed
DNS resolution of 1 IPs took 0.01s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 09:14
Scanning 10.10.11.8 [2 ports]
Discovered open port 22/tcp on 10.10.11.8
Discovered open port 5000/tcp on 10.10.11.8
Completed SYN Stealth Scan at 09:14, 0.22s elapsed (2 total ports)
Nmap scan report for 10.10.11.8
Host is up, received reset ttl 63 (0.19s latency).
Scanned at 2024-04-01 09:14:15 EDT for 0s

PORT     STATE SERVICE REASON
22/tcp   open  ssh     syn-ack ttl 63
5000/tcp open  upnp    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
           Raw packets sent: 6 (240B) | Rcvd: 3 (128B)

22と5000番Portが公開されている。
一旦ブラウザで5000にアクセスしてみると以下のサイトが見える。
1.png
Pythonで作られてる。

サイト探索

ディレクトリ探索

┌──(root㉿kali)-[~/work]
└─# dirsearch -u http://10.10.11.8:5000/
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /root/work/reports/http_10.10.11.8_5000/__24-04-01_09-14-38.txt

Target: http://10.10.11.8:5000/

[09:14:38] Starting: 
[09:16:16] 401 -  317B  - /dashboard
[09:17:32] 200 -    2KB - /support

Task Completed

ブラウジング

/supportは何やらコンタクトフォームっぽい。
/dashboardは以下のようにアクセス出来なかった。
2.png
Burpで確認するとCookieのis_adminで判断してるのかな?
3.png
そうっぽい
4.png
"admin"のBase64で飛ばしても500 Errorが帰ってくる。
認証系のエラーじゃなくて500番台なので何かデコードエラーになってそう。
一旦置いておいて別の/supportページを探ります。

色々Payloadを送っていると以下のページに飛ばされる。
5.png
お、Header表示される!ならデータやクエリじゃなくてHeaderにPayloadを差し込み方針で!

イニシャルアクセス

SSTI

とりあえず王道のSSTIで
6.png
User-Agentに叩き込んでもダメだった。

XSS

Hacking Attempt Detectedadministratorに送って調査しますとか言ってるので、もしかしたらクライアント側への攻撃刺さるのかな?とエスパーします。
ならXSS...ほぼHTBで見かけたことなかったこの脆弱性を使う。HTBよりリアルワールドでみる脆弱性です。
ブラウザで発火するか見たいのでBurpのインターセプト機能を使ってUser-Agentを改ざんする。
7.png
書き換えたらForwardします。
8.png
入った!
後はPayloadを送信しまくります。
9.png
とか
10.png
とか。受け側は以下で用意しておきます。

┌──(root㉿kali)-[~/work]
└─# python3 -m http.server 80

11.png
何回か試していたらきました!これでadminとして色々できそう。
とりあえず401だった階層にいってみます。
Cookie-Editorで簡易に設定して...
12.png
13.png
入ることができました!

Foothold

RCE

Generate Reportのリクエストをインターセプトからキャッチします。
その後飛ばしてみます。
14.png
右下見ると大体0.2秒くらいですね。
とりあえず;入れてsleep 5挟みます。
15.png
5.2秒くらいで帰ってきてるのでRCEが刺さりそうですね。
pingも刺してみます。
以下で受け側を用意しておきます。

┌──(root㉿kali)-[~/work]
└─# tcpdump -i tun0 icmp

16.png
通りました!

Revshell

以下の御用達のサイトでPayloadを作成します。

17.png
そのままこれを叩き込みます。
18.png
来ました!!!
これでUserフラグゲットです!!!

interactive shell

一応Shellを安定させます。

dvir@headless:~/app$
zsh: suspended  nc -lnvp 4444
                                                                                                                            
┌──(root💀kali)-[~]
└─# stty raw -echo; fg   
[1]  + continued  nc -lnvp 4444
                               export TERM=xterm
dvir@headless:~/app$ export SHELL=bash
dvir@headless:~/app$ reset

これで矢印キーやTab補完が効きます。

権限昇格

sudo -l

初手と言えばこれでしょう!

dvir@headless:~/app$ sudo -l
Matching Defaults entries for dvir on headless:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User dvir may run the following commands on headless:
    (ALL) NOPASSWD: /usr/bin/syscheck
dvir@headless:~/app$ 

ほう?何やらshellぽいので中身を確認します。

dvir@headless:~$ cat /usr/bin/syscheck
#!/bin/bash

if [ "$EUID" -ne 0 ]; then
  exit 1
fi

last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
/usr/bin/echo "Last Kernel Modification Time: $formatted_time"

disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
/usr/bin/echo "Available disk space: $disk_space"

load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
/usr/bin/echo "System load average: $load_average"

if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  /usr/bin/echo "Database service is not running. Starting it..."
  ./initdb.sh 2>/dev/null
else
  /usr/bin/echo "Database service is running."
fi

exit 0
dvir@headless:~$ 

./initdb.shに悪性コードを叩き込めそうですね。

malicious shell

悪性Shellを用意します。先ほどのサイトで作成できます。
19.png
以下HTTPサーバを用意してwgetして転送をします。

┌──(root㉿kali)-[~/work]
└─# python3 -m http.server 80

あとは実行権限を付けた後に回すだけ。
20.png
21.png
Rootきました!勝った!!!

まとめ

22.png
これで特権昇格に成功し、Root権限奪取に成功しました。
今回のBoxは初手さえクリアすれば後はスラスラ解けると思います。
XSS全然触ってなかったのでPayloadチラ見したです。

今回もセキュリティエンジニアの皆さんの助けになればなと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0