SAM、SYSTEM、SECURITY ファイルからパスワードを解析する
setodanoteCTF の問題、レジストリハイブファイルから NTLM ハッシュを取得しパスワードを解析する方法についてメモします。
1.NTLM ハッシュを取得する
NTLM ハッシュを取得する方法をいくつか説明します。
レジストリハイブの SAM、SYSTEM ファイルから Mimikatz を使用して取得する
- コマンドプロンプトを管理者権限で起動します。
- Mimikatz.exe を実行します。
c:\Users\User\Desktop\a\mimikatz_trunk\x64>mimikatz.exe .#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53 .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ## \ / ## > https://blog.gentilkiwi.com/mimikatz '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) '#####' > https://pingcastle.com / https://mysmartlogon.com ***/ mimikatz #
- デバッガーモードに切り替えて、より多くの特権と高いアクセス レベルを取得します。
mimikatz # privilege::debug Privilege '20' OK mimikatz #
- ハイブファイルから NTLM ハッシュを取得します。
SystemBkup.hiv と SamBkup.hiv の部分は任意のファイルパスを指定します。
例では Gentil Kiwi ユーザの NTLM ハッシュが cc36cf7a8514893efccd332446158b1a という事が分かります。
mimikatz # lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv Domain : VM-W7-ULT-X SysKey : 74c159e4408119a0ba39a7872e9d9a56 SAMKey : e44dd440fd77ebfe800edf60c11d4abd RID : 000001f4 (500) User : Administrateur LM : NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0 RID : 000001f5 (501) User : Invité LM : NTLM : RID : 000003e8 (1000) User : Gentil Kiwi LM : NTLM : cc36cf7a8514893efccd332446158b1a mimikatz #
レジストリハイブの SAM、SYSTEM、SECURITY ファイルから PwDump を使用して取得する
c:\Users\User\Desktop>pwdump8.exe -f c:\Users\User\Desktop\SYSTEM c:\Users\User\Desktop\SAM c:\Users\User\Desktop\SECURITY PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 Guest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 DefaultAccount:503:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 WDAGUtilityAccount:504:AAD3B435B51404EEAAD3B435B51404EE:27C3A146AA209B2120F7ECC9DB065540 test:1002:AAD3B435B51404EEAAD3B435B51404EE:3C99B8901B00758369F18B9DF72012C8 c:\Users\User\Desktop\a\pwdump8-8.2\pwdump8>
(おまけ)OS内に保存された認証情報を Mimikatz を使用して搾取する
- コマンドプロンプトを管理者権限で起動します。
- Mimikatz.exe を実行します。
c:\Users\User\Desktop\a\mimikatz_trunk\x64>mimikatz.exe
- デバッガーモードに切り替えて、より多くの特権と高いアクセス レベルを取得します。
mimikatz # privilege::debug
- OS から NTLM ハッシュを取得します。
mimikatz # sekurlsa::logonpasswords Authentication Id : 0 ; 88038 (00000000:000157e6) Session : Interactive from 1 User Name : Gentil Kiwi Domain : vm-w7-ult SID : S-1-5-21-2044528444-627255920-3055224092-1000 msv : [00000003] Primary * Username : Gentil Kiwi * Domain : vm-w7-ult * LM : d0e9aee149655a6075e4540af1f22d3b * NTLM : cc36cf7a8514893efccd332446158b1a * SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30 tspkg : * Username : Gentil Kiwi * Domain : vm-w7-ult * Password : waza1234/ wdigest : * Username : Gentil Kiwi * Domain : vm-w7-ult * Password : waza1234/ kerberos : * Username : Gentil Kiwi * Domain : vm-w7-ult * Password : waza1234/ ssp : [00000000] * Username : admin * Domain : nas * Password : anotherpassword credman : [00000000] * Username : nas\admin * Domain : nas.chocolate.local * Password : anotherpassword
2.NTLM ハッシュからパスワードをクラックする
パスワードハッシュを取得する方法をいくつか説明します。
ophcrack を使用してクラックする
- ophcrack を起動します。
※イメージはクラック済みです。 - メニュー [Load] - [Single hash] を選択し、NTLM ハッシュをセットします。
- メニュー [tables] を選択し、レインボーテーブルをインストールします。
- メニュー [crack] を選択してクラックします。
hashcat を使用してクラックする
- NTLM ハッシュをテキストに保存します。
- インターネットからパスワードリストを探します。
パスワードリストとはパスワードを羅列したテキストファイルです。 - パスワードリストを使用してクラックします。
※ハードウェアの条件が合わず実行でなかったので結果は未確認です。
C:\Users\User\Desktop>hashcat.exe -m 1000 -a 0 c:\Users\User\Desktop\hash.txt c:\Users\User\Desktop\realhuman_phill.txt
パスワードクラックサイトで検索する
- crackstation で NTLM ハッシュを検索します。
感謝
setodaNote CTF Writeup (Forensics) - Tahoo!!
setodaNote CTF Writeup - fatsheep's memo.txt
setodaNote CTF Writeup - よもぎのメモ帳
setodaNote CTF
Ophcrack
event log
event logのメモ
イベントID 4624 の見方。4625 も同じと思われる。
・ログオンタイプ
2:対話型
3:ネットワーク
4:バッチ
5:サービス
7:ロック解除
10:リモートデスクトップ
11:キャッシュでログオン(ドメイン認証していない)
・新しいログオン
ログオンしたアカウントの情報
・ネットワーク情報
ログオン元のホスト情報
・ソースネットワークアドレス
ログオン元のIPアドレス
アカウントが正常にログオンしました。
サブジェクト:
セキュリティ ID: NULL SID
アカウント名: -
アカウント ドメイン: -
ログオン ID: 0x0ログオン情報:
ログオン タイプ: 3
制限付き管理モード: -
仮想アカウント: いいえ
昇格されたトークン: いいえ偽装レベル: 偽装
新しいログオン:
セキュリティ ID: S-1-5-21-3590118637-3649102893-3870174881-1002
アカウント名: test
アカウント ドメイン: STELLA-PC
ログオン ID: 0x1D496F
リンクされたログオン ID: 0x0
ネットワーク アカウント名: -
ネットワーク アカウント ドメイン: -
ログオン GUID: {00000000-0000-0000-0000-000000000000}プロセス情報:
プロセス ID: 0x0
プロセス名: -ネットワーク情報:
ワークステーション名: DESKTOP-05C7F53
ソース ネットワーク アドレス: 10.1.2.105
ソース ポート: 0詳細な認証情報:
ログオン プロセス: NtLmSsp
認証パッケージ: NTLM
移行されたサービス: -
パッケージ名 (NTLM のみ): NTLM V2
キーの長さ: 128
後で読む予定のセキュリティの勉強記事
セキュリティ初心者の自分が後で読もうかなと思っているページのリンクの備忘録だが初心者向けではないページも含まれているような気がする。さらに勉強記事でないものが含まれている気がする。
- マルウェア解析
- GitHub - hasherezade/malware_training_vol1: Materials for Windows Malware Analysis training (volume 1)
- マルウェア解析チュートリアル<マルウェア解析のはじめかた編> | 調査研究/ブログ | 三井物産セキュアディレクション株式会社
- GitHub - mytechnotalent/Reverse-Engineering: A FREE comprehensive reverse engineering course covering x86, x64, 32-bit ARM & 64-bit ARM architectures.
- GoggleHeadedHacker
-
Free and Affordable Malware Analysis & Reverse Engineering Training
-
- 色々
- 新人ITインフラエンジニアに役立つ学習リソース まとめ | Lab8010
- 「DetectionLab」で手軽にWindowsラボ環境を構築: NECセキュリティブログ | NEC
- UserAgentからOS/ブラウザなどの調べかたのまとめ - Qiita
- Webカメラやマイクへのアクセス日時が記録されるレジストリ - setodaNote
- このブログについて - setodaNote
- 記事一覧 - 午前7時のしなもんぶろぐ
- ずっと無料で使えるクラウドの「Free Tier」主要サービスまとめ。2021年版 - Publickey
- Online Compiler and IDE >> C/C++, Java, PHP, Python, Perl and 70+ other compilers and interpreters - Ideone.com
- 暗号?
- GitHub - mattnotmax/cyberchef-recipes: A list of cyber-chef recipes and curated links
- CyberChef のオペレーションめも - setodaNote
- 中国剰余定理 (CRT) の解説と、それを用いる問題のまとめ - Qiita
- プログラム
- https://web.wakayama-u.ac.jp/~tokoi/mpe2020.pdf
- openFrameworks
- CS50 for Japanese: コンピュータサイエンスの入門 – 当ウェブサイトは、Creative Commons ライセンスに基づいて管理されています。
- Kyoto University Research Information Repository: プログラミング演習 Python 2021
- exploit.courses
- Volatility 3 CheatSheet - onfvpBlog [Ashley Pearson]
- Introducing APT-Hunter : Threat Hunting Tool via Windows Event Log - Shells.Systems
- 学習向けのフォレンジックデータ / Where can I get the images to learn DFIR - Speaker Deck
- USB storage forensics in Win10 #1 - Events
- Case 001 Super Timeline Analysis - DFIR Madness
- DFIR Cheat Sheet | collection of tools, tips, and resources
- GitHub - JPCERTCC/log-analysis-training: ログ分析トレーニング用コンテンツ
- 小規模CSIRT向けWindowsイベントログで押さえておくこと|セキュリティブログ
- GitHub - zodiacon/RegExp: Registry Explorer - enhanced Registry editor/viewer
- binary foray: Registry Explorer screenshots
- Eric Zimmerman's tools
Auto Hotkey
Auto Hotkey とは 常駐化することでホットキー割り当てなどが行える windows 用のフリーソフト。
wiki に詳しい説明があるが WaniCTF'21 で取り上げられたテキスト(スクリプト?)の読み方をメモしておく。
::the::
Send, +wani
return::password::
Send, +c+t+f
return::for::
Send, {home}{right 3}{del}1{end}{left 2}{del}7
return::today::
FormatTime , x,, yyyyMMdd
SendInput, {home}{right 4}_%x%
return::is::
Send, _{end}{!}{!}{left}
return:*?:ni::
Send, ^a^c{Esc}{home}password{:} {end}
return
上記が問題で使用されたテキスト。「the password for today is nani」と入力すると zip のパスワードになるらしい。
::the::
Send, +wani
return
”the”+「SPACE」と入力すると ”the”+「SPACE」が削除されて代わりに ”Wani” と入力される。
『::the::』は "the" に続いて終了を意味する文字(ここでは SPACE )を入力すると処理が実行されるという意味。
『Send,』に続く文字が入力されて『return』で処理が終了する。
『+』は「SHIFT」を意味する。
::password::
Send, +c+t+f
return
これも同様に ”passowrd”+「SPACE」と入力すると ”CTF” に置き換わる。
::for::
Send, {home}{right 3}{del}1{end}{left 2}{del}7
return
”for”+「SPACE」と入力すると「HOME」キー、「右」キーを3回、「DEL」キー、”1”、「END」キー、「左」キーを2回、「DEL」キー、”7” の順番に入力される。
今入力した文字だけでなく、既に入力された文字に対しても編集をかけられるのが面白い。
::today::
FormatTime , x,, yyyyMMdd
SendInput, {home}{right 4}_%x%
return
”today”+「SPACE」と入力するとシステム日付が変数 x に格納され、「HOME」キー、「右」キー4回、”_” 、変数 x の値の順番で入力される。
『Send』と『SendInput』は同じ意味らしい。
::is::
Send, _{end}{!}{!}{left}
return
" is"+「SPACE」と入力すると ”_ ”、「END」キー、”!” 、”!” 、「左」キーの順番で入力される。『{!}』 は『+1』でも代替えできるのでは?と思ったけど、外国語キーボードなど配列の違いがあるので CTF で『+1』は使えないのか。
:*?:ni::
Send, ^a^c{Esc}{home}password{:} {end}
return
”ni” と入力すると「CTRL」+「a」(全選択)、「CTRL」+「c」(コピー)、「ESC」キー、「HOME」キー、”password” 、”:” 、「END」キーの順番で入力される。
『:*?:』は「SPACE」などの終了文字を入力しなくても処理を実行するという意味。
便利そうだが意図しないところで変換が行われる危険もありそう。
プログラミングする際など色々使い道はありそうなツールだと思った。
アセンブラフラグレジスタメモ
フラグレジスタは16ビットの一つのレジスタで構成されそれぞれ1ビットずつに意味のあるフラグが存在しています
全てのフラグは1ビットで表現され、0か1かでその状態を表します
OF オーバーフロー 符号付演算で桁あふれが発生 OV(1) NV(0)
DF ディレクション ストリング操作命令で使用 DN(1) UP(0)
IF インタラプト・イネーブル 外部割込みの許可 EI(1) DI(0)
TF トラップ トレースで実行するときのフラグ
SF サイン 演算結果の符号が負数 NG(1) PL(0)
ZF ゼロ 演算結果がゼロ ZR(1) NZ(0)
AF 補助キャリー BCD演算で使用されるキャリー AC(1) NA(0)
PF パリティ 演算結果で各ビットで1となるビットの合計が偶数 PE(1) PO(0)
CF キャリー 通常の演算結果で桁あふれが発生 CY(1) NC(0)