滲透技巧——程序的降權啟動
0x00 前言
在滲透測試中,常常會遇到需要改變程序啟動許可權(分為提權和降權)的情況。
提權包含從普通用戶許可權到管理員許可權和從管理員許可權到system許可權,而滲透測試中的降權通常是指從system許可權降到普通用戶許可權(從管理員許可權降到普通用戶許可權比較簡單,方法很多),往往是為了操作當前用戶的文件內容(如捕獲桌面、操作註冊表等)
本文將會介紹具體的降權方法(從system許可權降到普通用戶許可權),理清其中的重點,並且開源一個小工具,用於判斷進程許可權
0x01 簡介
本文將要介紹以下內容:
為什麼要降權
從管理員許可權降到普通用戶許可權的方法
從system許可權降到普通用戶許可權的方法
利用SelectMyParent實現提權和降權
註:
測試系統: Win7
0x02 為什麼要降權
使用sytem許可權的進程可能會遇到以下問題:
1、無法獲得當前用戶的文件內容
例如無法捕獲用戶的屏幕
2、環境變數有差異
比如以下環境變數:
APPDATA
Temp
Tmp
USERDOMAIN
USERNAME
USERPROFILE
cmd下可通過echo查看環境變數,例如查看環境變數APPDATA的命令為:
echo %appdata%
system許可權下,查詢到的環境變數APPDATA為C:Windowssystem32configsystemprofileAppDataRoaming
管理員許可權下,查詢到的環境變數APPDATA為C:UsersaAppDataRoaming
如下圖
通過API SHGetSpecialFolderPath 獲取指定的系統路徑,如APPDATA,也能發現許可權不同導致的區別
c++代碼如下:
#include
#include
bool IsSystemPrivilegeCmp()
{
static bool isSystemPrivilege = false;
char *flag="C:Windows";
if (isSystemPrivilege)
{
return isSystemPrivilege;
}
char szPath[MAX_PATH] = ;
if (SHGetSpecialFolderPathA(NULL, szPath, CSIDL_APPDATA, TRUE))
{
printf("APPDATA Path:%sn",szPath);
if(memcmp(szPath,flag,strlen(flag))==0)
printf("[+]I m System Privilegen");
else
printf("[-]Not System Privilegen");
}
return isSystemPrivilege;
}
int main(int argc, CHAR* argv[])
{
IsSystemPrivilegeCmp();
return 0;
}
如下圖
註:
SHGetSpecialFolderPath支持查詢的系統路徑可在Shlobj.h中獲取
如下圖
3、註冊表有差異
對HKCU的部分註冊表操作會被重定向到HKEY_USERS.DEFAULT
如下圖
0x03 從管理員許可權降到普通用戶許可權的方法
1、runas
cmd:
runas /user:a calc.exe
接著輸入密碼:123456
calc.exe的許可權為用戶a的許可權
如下圖
缺點:
需要等待用戶手動輸入密碼,不夠自動化
但是可以藉助管道實現自動輸入密碼,需要藉助第三方工具Sanur,方法不具體介紹
2、第三方工具:lsrunas
下載地址:
cmd:
lsrunas.exe /user:a /password:123456 /domain: /command:"calc.exe" /runpath:c:
註:
/domain:參數為空表示為本機
從管理員許可權降權到普通用戶許可權,成功,如下圖
3、第三方工具:CPAU
下載地址可參考我的github:
https://github.com/3gstudent/From-System-authority-to-Medium-authority
cmd:
CPAU.exe -u a -p 123456 -ex "calc.exe" -lwp
註:
必須添加參數-lwp或-lwop,否則無法實現降權
從管理員許可權降權到普通用戶許可權,成功,如下圖
4、powershell
代碼如下:
$uname="a"
$pwd=ConvertTo-SecureString "123456" -AsPlainText –Force
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)
Start-Process -FilePath "calc.exe" -Credential $cred
5、c++
使用API:
CreateProcessAsUser
CreateProcess
0x04 從system許可權降到普通用戶許可權的方法
註:
本次測試的system許可權通過漏洞獲取
1、runas
cmd:
runas /user:a calc.exe
接著輸入密碼:123456
成功降權,但啟動失敗,如下圖
2、第三方工具:lsrunas
cmd:
lsrunas.exe /user:a /password:123456 /domain: /command:"calc.exe" /runpath:c:
同上,成功降權,但啟動失敗
3、第三方工具:CPAU
cmd:
CPAU.exe -u a -p 123456 -ex "calc.exe" -lwp
CPAU不支持system許可權啟動,如下圖
4、powershell
同1,成功降權,但啟動失敗
5、c++
可以使用Didier Stevens的工具SelectMyParent
註:
該代碼尚未在github共享,所以我在我的github上傳了該代碼,並註明作者為Didier Stevens
代碼地址:
https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/SelectMyParent.cpp
SelectMyParent:
用來創建具有選定父進程的windows進程
例如:創建新進程calc.exe,使用SelectMyParent可以將新進程calc.exe設置為進程winlogon.exe的子進程
使用步驟:
1、獲取進程winlogon.exe的pid
在我的測試系統中,進程winlogon.exe的pid為504
2、啟動SelectMyParent
參數如下:
SelectMyParent.exe calc.exe 504
顯示calc.exe為winlogon.exe的子進程,如下圖
該方法主要可以用來提高進程的隱蔽性,欺騙用戶
特別的地方:
由於子進程會繼承父進程的許可權,並且winlogon.exe的許可權為system,那麼其子進程calc.exe的許可權也將會成為system
如下圖
也就是說,我們可以基於SelectMyParent實現以下提權和降權操作:
提權:從管理員許可權到system許可權
降權:從system許可權到admin許可權
降權:從system許可權到普通用戶許可權
操作步驟:
1、獲取進程pid
cmd下獲取進程pid的方法:
tasklist /v /fo list
可獲取每個進程對應的pid及許可權(用戶名的值表示),如下圖
為了方便測試,可以使用過濾將特定許可權的進程篩選出來,例如篩選NT AUTHORITYSYSTEM
命令如下:
tasklist /v /fo list /fi "USERNAME eq NT AUTHORITYSYSTEM"
如果是獲取普通用戶許可權的進程,篩選的USERNAME可設置為whoami的返回結果
2、使用SelectMyParent.exe
從管理員許可權到system許可權:
上文已經演示,不再重複介紹
從system許可權到admin許可權:
通過tasklist無法區分進程是否是管理員許可權還是普通用戶許可權
於是我通過c++寫了一個小工具,作用如下:
遍歷進程
判斷進程許可權,如果為管理員許可權,進行標記
代碼下載地址:
https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/Processauthority.cpp
工具使用如下圖
從system許可權到普通用戶許可權:
選取普通用戶許可權進程,pid為3864,創建的calc.exe許可權也會具有普通用戶許可權,如下圖
成功實現從system許可權到普通用戶許可權的降權
0x05 小結
本文對常用降權方法進行測試,結論是有些條件下降權方法會失效,通用的方式是使用SelectMyParent進行降權。
結合實際,開源了遍歷判斷進程許可權的小工具,用於提高效率。
本文為3gstugent原創稿件,授權嘶吼獨家發布,未經許可禁止轉載
點擊展開全文


※密碼管理器OneLogin遭遇黑客攻擊,企業客戶敏感數據已被泄漏
※一場國際爭霸的黑客賽事
※有了郵件防火牆你就安全了嗎?想法太單純了……
※AssetHook:Android應用資源數據運行時編輯工具
※美國國防部承包商使用亞馬遜伺服器,一不小心泄露了機密文件
TAG:嘶吼RoarTalk |
※程序自動模式的「柔性程序」
※利用「驅動人生」升級程序的惡意程序預警
※發揮智能技術的無限潛力 商業應用程序中加入增強現實
※這些小技巧,能有效提升程序員的效率
※實用技巧與小程序
※談程序的腐化
※應用程序快速啟動工具
※程序猿的進化
※程序員必備技能之 Git 的體系結構與歷史
※安卓應用程序滲透測試
※喜推科技持續發力智能小程序,為企業決策賦能
※能自動進行病毒宏基因組分類的應用程序!
※案例分析:如何不利用驅動執行內核提權程序
※移動應用程序的個性化實現方法
※程序員穿運動褲會不會有損形象呢?
※程序員漲薪必備技能
※程序員的鄙視鏈
※埃森哲互動將提供程序化服務,滲透廣告購買領域
※「螺絲刀」揭開嚴重安全漏洞:多廠商驅動程序及固件現惡意軟體提權問題
※線程,進程,程序的區別