内網情報収集の概要#
ネットワーク環境の判断
私は誰か?—— 現在のマシンの役割の判断。
ここはどこか?—— 現在のマシンが存在するネットワーク環境のトポロジーの分析と判断。
私はどこにいるか?—— 現在のマシンが存在する地域の判断。
本機情報の収集#
手動収集#
(1)ネットワーク設定の確認#
ipconfig /all
(2)オペレーティングシステムおよびソフトウェアの情報の確認#
オペレーティングシステムとバージョン情報を表示
英語版
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
日本語版
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
システムアーキテクチャの確認
echo %PROCESSOR_ARCHITECTURE%
インストールされているソフトウェアおよびバージョン、パスなどの確認
wmic product get name,version
Powershell バージョン:
powershell.exe "Get-WmiObject -class Win32_Product | Select-Object -Property name,Version"
(3)本機サービス情報の確認#
wmic service list brief
(4)プロセスリストの確認#
tasklist
// または
wmic process list brief
一般的なウイルス対策ソフトのプロセスは以下の通り
360sd.exe
360tray.exe
ZhuDongFangYu.exe
KSafeTray.exe
SafeDogUpdateCenter.exe
McAfee McShield.exe
egui.exe //NOD32
AVP.EXE // カスペルスキー
avguard.exe // 小紅傘
bdagent.exe //BitDefender
(5)スタートアッププログラム情報の確認#
wmic startup get command,caption
(6)スケジュールされたタスクの確認#
schtasks /query /fo LIST /v
(7)ホストの起動時間の確認#
net statistics workstation
(8)ユーザーリストの確認#
net user
// ローカル管理者グループのメンバーを取得:
net localgroup administrators
// 現在のオンラインユーザーの確認(不可)
query user || qwinsta
(9)ローカルコンピュータと接続されているクライアント間のセッションをリストまたは切断#
管理者権限が必要
net session
(10)ポートリストの確認#
netstat -ano
(11)パッチリストの確認#
systeminfo
システムにインストールされているパッチを wmic コマンドで確認:
wmic qfe get Caption,Description,HotFixID,InstalledOn
(12)本機共有リストの確認#
net share
//wmic:
wmic share get name,path,status
(13)ルーティングテーブルおよびすべての利用可能なインターフェースの ARP キャッシュテーブルの確認#
route print
arp -a
(14)ファイアウォール関連設定の確認#
ファイアウォールを無効にする
//Windows Server 2003以前
netsh firewall set opmode disable
//Windows Server 2003以降
netsh advfirewall set allprofile state off
ファイアウォール設定の確認
netsh firewall show config
ファイアウォール設定の変更
Windows Server 2003 以前は指定プログラムのすべての接続を許可
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
Windows Server 2003 以降のバージョン
//指定プログラムの受信を許可
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="c:\nc.exe"
//指定プログラムの送信を許可
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C:\nc.exe"
//3389ポートを開放
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
ファイアウォールログの保存場所をカスタマイズ
netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
(15)プロキシ設定の確認#
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
(16)リモート接続サービスの確認と有効化#
リモート接続ポートの確認
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
Windows Server 2003 で 3389 を有効にする
wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
Windows Server 2008 および 2012 で
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
// レジストリを変更する方法
reg query "HKLM\System\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
自動収集#
WMIC(Windows Management Instrumentation Command-Line、Windows 管理ツールコマンドライン)は最も便利な Windows コマンドラインツールです。
Windows XP の低権限ユーザーは WMIC にアクセスできません
Windows 7 以降のバージョンの低権限ユーザーは WMIC にアクセスし、関連するクエリ操作を実行できます
ローカルコンピュータを管理するだけでなく、同じドメイン内のすべてのコンピュータを管理することもできます(一定の権限が必要)が、管理されるコンピュータに事前に WMIC をインストールする必要はありません。
書籍には WMIC を使用するスクリプトが提供されており、前のセクションのすべてのコマンドを実行し、結果を HTML ファイルに書き込みます:
wmic_info.bat
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html
3、Empire 下のホスト情報収集#
Empire はホスト情報を収集するためのモジュールを提供しています。
本機のユーザー、ドメイングループメンバー、パスワード設定時間、クリップボードの内容、システム基本情報、ネットワークアダプタ情報、共有情報などを確認:
usemodule situational_awareness/host/winenum
execute
管理者権限がある場合、ターゲットホストのイベントログ、アプリケーション制御ポリシーログ、RDP ログイン情報、PowerShell スクリプトの実行と保存された情報などを確認:
usemodule situational_awareness/host/computerdetails
現在の権限の確認#
1、現在の権限の確認
whoami
三つの状況があります:ローカル一般ユーザー
、ローカル管理者ユーザー
、ドメイン内ユーザー
現在の内網にドメインが存在する場合、ローカル一般ユーザーは本機関連情報のみをクエリでき、ドメイン内情報をクエリできません;一方、ローカル管理者ユーザーとドメイン内ユーザーはドメイン内情報をクエリできます。
ドメイン内のすべてのクエリはドメインコントローラーを介して実行されます(LDAP プロトコルに基づく)、このクエリは権限認証を経る必要があるため、ドメインユーザーのみがこの権限を持っています;** ドメインユーザーがクエリコマンドを実行する際、**Kerberos プロトコルを使用して自動的に認証され、追加のアカウントやパスワードの入力は不要です。
ローカル管理者 Administrator 権限は直接 System 権限に昇格できます(PsExec などを使用)、したがって、ドメイン内では、一般ユーザーを除くすべてのマシンにマシンユーザーが存在します(ユーザー名はマシン名に $ を加えたもの)。本質的に、マシンの system ユーザーはドメイン内のマシンユーザーに対応しています。したがって、System 権限を使用してもドメイン内のクエリコマンドを実行できます。
2、ドメイン SID の取得
whoami /all
3、指定ユーザーの詳細情報の確認
net user xxx /domain
管理者権限がない場合
--- ドメインが存在するかの判断 ---#
DNS サーバーの確認#
ドメインコントローラー
とDNSサーバー
は同じサーバー上にありますか?(nslookup による逆引き)
ipconfig /all
// 確認した DNS サーバーを nslookup で解決
nslookup burnchi.cc
システム詳細情報の確認#
systeminfo のドメインはドメイン名、ログインサーバーはドメインコントローラーを指します。
systeminfo | findstr /B/C:"ログインサーバー" // 結果が **"WORKGROUP"** でない場合、ホストはドメインホスト
です。
現在のログインドメインおよびログインユーザー情報の確認#
DC のみが実行できます
net group workstation
主ドメインの判断#
net time /domain
// コマンドはドメイン内の時間を確認するために使用され、ドメインコントローラーも確認できます。
実行結果には三つの状況があります:
- システムエラー 5 が発生:ドメインが存在するが、現在のユーザーはドメインユーザーでない -
- 時間情報が表示される:ドメインが存在し、現在のユーザーはドメインユーザーである -
- ドメインコントローラーが見つからない:ドメインが存在しない
ドメイン内の生存ホストの探査#
NetBIOS による迅速な探査#
前提
ターゲットホストで使用する必要があります。
NetBIOS は LAN プログラムが使用する API で、プログラムに低レベルサービスを要求するための統一されたコマンドセットを提供します。NetBIOS はコンピュータの識別名でもあり、主に LAN 内のコンピュータの相互訪問に使用されます。
nbtscan を使用(http://www.unixwiz.net/tools/nbtscan.html)
nbt.exe 192.168.1.0/20
fscan 探査(推奨)#
fscan64.exe -h 10.0.0.0/24
管理者権限を使用すると速度が向上します
ICMP 探査の使用#
各 IP に ping を実行(速度が非常に遅い)
for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.0.0.%I | findstr "TTL="
ARP スキャン#
ARPscan ツールを使用して内網をスキャンします
arp.exe -t 192.168.1.0/20
Empire の ARPscan モジュール#
usemode situational_awareness/network/arpscan
execute
Nishang の Invoke-ARPScan.ps1#
powershell.exe -exec bypass -Command "& (Import-module c:\windows\temp\Invoke-ARPscan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20)" >> c:\windows\temp\log.txt
type c:\windows\temp\log.txt
一般的な TCP/UDP ポートスキャンを通じて内網を探査#
ScanLine をアップロードしてスキャン#
scanline -h -t 22,80-90,110,445 -u 53,161 -O c:\windows\temp\log.txt -p 192.168.1.1-254 /b
fscan#
fscan64.exe -h 10.0.0.0/24
ドメイン内ポートのスキャン#
注意すべき点:
- ポートのバナー情報 -
- ポート上で実行されているサービス -
- 一般的なアプリケーションのデフォルトポート
Telnet(機能を追加する必要があります)#
telnet DC 22
fscan#
fscan64.exe -p 1-60000 -h 10.0.0.107
-p string
スキャンするポートを設定: 22 | 1-65535 | 22,80,3306 (デフォルトは"21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
Metasploit ポートスキャン#
Metasploit は言うまでもありません
use auxiliary/scanner/portscan/tcp
set ports 1-1000
set RHOST 192.168.1.1
set THREADS 10
run
その他#
PowerSploit や NiShang の Invoke-portscan スクリプト、nmap なども使用できます。
また、いくつかの脆弱性情報は以下を参考にできます。
http://www.securityfocus.com/bid
https://www.exploit-db.com/
ドメイン内情報の収集#
このセクションのドメイン内クエリコマンドは本質的に LDAP プロトコルを介してドメインコントローラーにクエリを実行するため、ドメインユーザーの権限が必要であり、ローカルユーザーは実行できません(System ユーザーを除く)。
デフォルトでは、Domain Admins と Enterprise Admins はドメイン内のすべてのドメインコントローラーに完全な制御権を持っています。
コマンドは以下の通り:
ドメインの確認#
net view /domain
ドメイン内のすべてのコンピュータの確認#
net view /domain:HACKE
ドメイン内のすべてのユーザーグループリストの確認#
net group /domain
すべてのドメインメンバーコンピュータリストの確認#
net group "domain computers" /domain
ドメイン内のパスワード情報の取得#
net accounts /domain
ドメイン内の信頼情報#
nltest /domain_trusts
ドメインコントローラーの検索#
コマンドは以下の通り:
ドメインコントローラーのマシン名の確認#
nltest /DCLIST:hacke
現在の時間の確認#
net time /domain
ドメインコントローラーのホスト名の確認#
nslookup -type=SRV _ldap._tcp
ドメインコントローラーグループの確認#
net group "Domain Controllers" /domain
主コントローラーの確認#
ドメインコントローラーでのみ実行可能?
netdom query pdc
ドメイン内ユーザーおよび管理者情報の取得#
すべてのドメインユーザーリストの確認#
net user /domain
ドメイン内ユーザーの詳細情報の取得#
wmic useraccount get /all
// 存在するユーザーを確認しますが、これはドメインコントローラー
または対応するサービスがインストールされたホスト
でのみ使用でき、そうでない場合はコマンドが存在しないというメッセージが表示されます。
dsquery user
DC で実行
ディレクトリ内のコンピュータの検索#
dsquery computer
DC で実行
dsquery コマンド#
ローカル管理者グループユーザーの確認#
ドメイン内の Domain Admins グループのユーザーはデフォルトでドメイン内のマシンのローカル管理者ユーザーです。
net localgroup administrators
ドメイン管理者ユーザーグループの確認#
// ドメイン管理者ユーザーグループの確認
net group "domain admins" /domain
// 管理者ユーザーグループの確認
net group "Enterprise Admins" /domain
ドメイン管理者の特定#
内網では、通常、多くのネットワークセキュリティシステムやデバイスが展開されます。たとえば、IDS、IPS、ログ監査、安全ゲートウェイ、ウイルス対策ソフトウェアなどです。
ドメイン内では、コンピュータがドメインに参加すると、デフォルトでドメイン管理者グループにローカルシステム管理者権限が付与されます。つまり、コンピュータがドメインに追加され、ドメインのメンバーコンピュータになると、システムは自動的にドメイン管理者グループをローカルシステム管理者グループに追加します。したがって、ドメイン管理者グループのメンバーはすべてローカルコンピュータにアクセスでき、完全な制御権を持っています。
**Windows ドメイン内の一般権限を取得した後、横方向の浸透を行う際には、** ドメイン内ユーザーのログイン位置、** 任意のシステム / ホストのローカル管理者であるかどうか、** および所属グループなどの情報を知る必要があります。使用できるツールには、psloggedon.exe、PVEFindADUser.exe、netness.exe、hunter、NetView、PowerView があります。
1、psloggedon.exe
このツールを使用してリモートコンピュータのリソースを確認できます。つまり、ターゲットホストにどのアカウントがログイン状態であるかを確認できます。
ダウンロードリンク:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psloggedon
psloggedon.exe \DC
2、PVEFindADUser.exe
PVEFindADUser は、アクティブディレクトリユーザーのログイン位置を検索し、ドメインユーザーを列挙し、特定のコンピュータにログインしているユーザーを検索するために使用できます:ローカルユーザー、RDP でログインしているユーザー、サービスやスケジュールされたタスクを実行するためのユーザー。(このツールは.NET 3.5 が必要です)
Windows Server 2012 に.NET 3.5 をインストールするのは成功しない場合があるため、インストールソースを指定する必要があります:https://www.cr173.com/soft/921507.html
ダウンロードリンク:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
PVEFindADUser.exe <パラメータ>
パラメータ:
-h:ヘルプ情報を表示
-u:プログラムの新しいバージョンを確認
-current [“username”]:-current パラメータのみを指定した場合、ターゲットコンピュータ上の現在ログインしているすべてのユーザーを取得します。ユーザー名(Domain\Username)を指定した場合、そのユーザーがログインしているコンピュータを表示します。
-last [“username”]:-last パラメータのみを指定した場合、ターゲットコンピュータの最後のログインユーザーを取得します。ユーザー名(Domain\Username)を指定した場合、このユーザーの最後のログインコンピュータを表示します。ネットワークのセキュリティポリシーにより、最後のログインユーザーのユーザー名が隠される場合があり、その場合、このツールを使用してもそのユーザー名を取得できないことがあります。
-noping:このツールがユーザーログイン情報を取得する前にターゲットコンピュータに ping コマンドを実行するのを防ぎます。
-target:オプションのパラメータで、クエリするホストを指定します。このパラメータを指定しない場合、現在のドメイン内のすべてのホストをクエリします。指定した場合は、カンマで区切ったホスト名のリストが続きます。
3、NetView.exe
NetView は列挙ツールで、WinAPI を使用してシステムを列挙し、NetSessionEnum を利用してログインセッションを探し、NetShareEnum を利用して共有を探し、NetWkstaUserEnum を利用してログインしているユーザーを列挙します。また、共有エントリや価値のあるユーザーを確認することもできます。
ダウンロードリンク:https://github.com/mubix/netview
netview.exe <パラメータ>
パラメータ:
-h:ヘルプ情報を表示
-f aaa.txt:ホストリストを抽出するファイルを指定
-e aaa.txt:除外するホスト名のファイルを指定
-o aaa.txt:すべての出力を指定したファイルにリダイレクト
-d aaa.txt:ホストリストを抽出するドメインを指定 ° 指定しない場合は、現在のドメインからホストリストを抽出します。
-g group:検索するグループ名を指定します。指定しない場合は、Domain Admins グループ内を検索します。
-c:見つかった共有ディレクトリ / ファイルのアクセス権を確認します。
4、PowerView
PowerView は、重要なユーザーを特定するための機能を提供する PowerShell スクリプトです。
ダウンロードリンク:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView
5、Empire
Empire にもこのタイプのスクリプトがあります:
usemodule situational_awareness/network/powerview/user_hunter
execute
6、Nmap の NSE スクリプト
Nmap の NSE スクリプトを使用してリモートマシンのログインセッションを取得します。
smb-enum-sessions.nse はドメイン内ホストのユーザーログインセッションを取得し、現在ユーザーがログインしているかどうかを確認します。管理者権限は不要です。
smb-enum-domains.nse はドメインコントローラーに情報収集を行い、ホスト情報ユーザー、使用可能なパスワードポリシーのユーザーなどを取得できます。
smb-enum-users.nse はこのスクリプトを使用してドメインコントローラーをスキャンできます。
ダウンロードリンク:https://nmap.org/nsedoc/scripts/smb-enum-sessions.html
十、ドメイン管理プロセスの検索
管理者権限を持つシステム内でドメイン管理者のログインプロセスを探し、ドメイン管理者の資格情報を収集します。
仮定の状況:
ペネトレーションテスト担当者がある内網環境でドメイン一般ユーザーの権限を取得した場合、まずさまざまな方法で現在のサーバーのローカル管理者権限を取得し、次に現在のサーバーのユーザーログインリストおよびセッション情報を分析して、どのユーザーがこのサーバーにログインしているかを確認します。ペネトレーションテスト担当者が分析を通じて、取得可能な権限のあるログインユーザーがドメイン管理者アカウントでないこと、かつドメイン管理者グループのユーザーがこのサーバーにログインしていないことを発見した場合、別のアカウントを使用してそのアカウントが内網のどのマシンで管理権限を持っているかを探し、そのマシン上のログインユーザーを列挙し、さらにペネトレーションテストを続けて、ドメイン管理者権限を取得するための有効なパスを見つけることができます。
参考文献:ドメイン管理者が実行するプロセスを見つけるための 5 つの方法
1、本機の確認
// ドメイン管理者リストを取得
net group "Domain Admins" /domain
// ローカルのすべてのプロセスとプロセスユーザーをリスト
tasklist /v
2、ドメインコントローラーのドメインユーザーセッションを確認
// ドメインコントローラーリストを確認
net group "Domain Controllers" /domain
// ドメイン管理者リストを収集
net group "Domain Admins" /domain
// すべてのアクティブドメインのセッションリストを収集
netsess -h
十一、PowerShell を使用してドメイン情報を収集
PowerView を使用
ダウンロードリンク:
https://github.com/shigophilo/tools/blob/master/PowerView.ps1
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
いくつかの使用:
powerview 使用記録
powerview 使用小記
十二、機密データ保護
1、資料、データ、ファイルの特定プロセス
内網データ保護では、まず攻撃者がデータを取得するプロセスを理解する必要があります。
実際のネットワーク環境では、攻撃者は主にさまざまな悪意のある方法を使用して、会社内部の関連する人物のマシンを特定し、資料、データファイルを取得します。プロセスは以下の通り:
内部人事組織構造の特定
内部人事組織構造内で監視が必要な人物を探す
関連人物のマシンを特定
関連人物が文書を保存している場所を監視
文書を保存しているサーバーのディレクトリをリスト
2、コアビジネスマシン
上級管理者、システム管理者、財務 / 人事 / 営業担当者の個人コンピュータ
製品管理システムサーバー
オフィスシステムサーバー
財務アプリケーションシステムサーバー
コア製品ソースコードサーバー(IT 企業は通常、自社の SVN または GIT サーバーを設置します)
データベースサーバー
ファイルサーバー、共有サーバー
電子メールサーバー
ネットワーク監視システムサーバー
その他のサーバー(支社、工場)
3、機密情報
サイトソースコードバックアップファイル、データベースバックアップファイルなど
各種データベースの Web 管理インターフェース、例えば phpMyAdmin、Adminer
ブラウザのパスワードとブラウザの Cookie
他のユーザーセッション、3389 および ipc$ 接続記録、「ごみ箱」の情報など
Windows 無線パスワード
ネットワーク内部のさまざまなアカウントとパスワード、電子メール、VPN、FTP、TeamView などを含む