提公升許可權令牌

2022-03-24 00:08:46 字數 4527 閱讀 5649

getcurrentprocess() 介紹:

功能:檢索當前程序的偽控制代碼。

函式原型:handle getcurrentprocess();

返回值:返回值是當前程序的偽控制代碼。

函式原型:bool winapi openprocesstoken(

handle  processhandle,   // 要修改訪問許可權的程序控制代碼。

dword   desiredaccess, // 指定你要進行的操作型別。

phandle tokenhandle  // 返回的訪問令牌的指標。

);引數

desiredaccess

常用值:

token_adjust_privileges

token_adjust_groups

token_adjust_default

token_execute

token_query

token_read

token_write

token_all_access

如要修改訪問令牌的特權,我們要指定第二個引數為 token_adjust_privileges

返回值:非零表示成功,零表示失敗。

adjusttokenprivileges() 介紹:

功能:用於啟用或禁止,指定訪問令牌的特權。

函式原型:bool winapi adjusttokenprivileges(

handle   tokenhandle,  // 要修改的許可權的訪問令牌的控制代碼。

bool  disableallprivileges, // 指定函式是否禁用所有標記的許可權。

ptoken_privileges  newstate, // 指向 token_privileges 結構的指標, 它指定特權陣列及其屬性。

dword  bufferlength, // 指定由 previousstate 引數指向的緩衝區的大小 (以位元組為單位)。

ptoken_privileges  previousstate, // 乙個指向緩衝區的指標。

pdword  returnlength // 乙個指標, 該變數接收 previousstate 引數指向的緩衝區所需的大小 (以位元組為單位)。

);引數

tokenhandle

包含要修改的許可權的訪問令牌的控制代碼。控制代碼必須具有對令牌的 token_adjust_privileges 訪問許可權。

如果 previousstate 引數不是 null, 則控制代碼還必須具有 token_query 訪問許可權。

disableallprivileges

指定函式是否禁用所有標記的許可權。如果此值為 true, 則該函式將禁用所有許可權並忽略 newstate 引數。

如果是 false, 則該函式根據 newstate 引數指向的資訊修改許可權。

newstate

指向 token_privileges 結構的指標, 它指定特權陣列及其屬性。

如果 disableallprivileges 引數為 false, 則 adjusttokenprivileges 函式啟用、禁用或刪除令牌的這些特權。

它的值有這三個:se_privilege_enabled,se_privilege_removed,none

bufferlength

指定由 previousstate 引數指向的緩衝區的大小 (以位元組為單位)。如果 previousstate 引數為 null, 則此引數可以為零。

previousstate

乙個指向緩衝區的指標, 該函式用包含該函式修改的任何特權的以前狀態的 token_privileges 結構填充。

即, 如果此函式修改了許可權, 則該特權及其以前的狀態將包含在 previousstate 引用的 token_privileges 結構中。

如果 token_privileges 的 privilegecount 成員為零, 則此函式不更改任何特權。此引數可以為 null。

returnlength

乙個指標, 該變數接收 previousstate 引數指向的緩衝區所需的大小 (以位元組為單位)。

返回值:如果函式成功, 則返回值為非零。如果失敗,則可以是:error_success,error_not_all_assigned。

token_privleges 結構體:

typedef struct _token_privileges  token_privileges, *ptoken_privileges;

luid_and_attributes 結構體:

typedef struct _luid_and_attributes  luid_and_attributes, *pluid_and_attributes;

屬性

描述

se_privilege_enabled_by_default

特權預設啟用

se_privilege_enabled

特權啟用.

se_privilege_removed

刪除特權

se_privilege_used_for_access

特權被用來訪問乙個物件或服務。

這個標誌 被用於 標識有關特權,因為

通過一組客戶端應用程式,可能包含不必要的特權

ludi 結構體:

typedef struct _luid  luid, *pluid;

本地唯一識別符號 (luid) 是僅在生成它的系統上保證唯一的64位值。只有在系統重新啟動之前, 才能保證 luid 的唯一性。

luid 不是直接操縱的。驅動程式必須使用支援例程和結構來操作 luid 值。

若要獲取與 luid 關聯的特權的名稱, 請呼叫 lookupprivilegename():

lookupprivilegename() 介紹:

功能:檢索與指定的本地唯一識別符號 (luid) 在特定系統上表示的許可權相對應的名稱。

函式原型:bool lookupprivilegename(

lpcstr  lpsystemname,  // 乙個指標, 它指定檢索特權名稱的系統的名稱。本地系統為 null。

pluid   lpluid, // 指向目標系統上已知許可權的 luid 的指標。

lpstr   lpname, // 乙個指向緩衝區的指標, 它接收表示特權名稱的以 null 結尾的字串。

lpdword cchname // 乙個指標, 該變數指定 lpname 緩衝區的大小。

); 返回值:非零表示成功,零表示失敗。

lookupprivilegevalue() 介紹:

功能:檢視系統許可權的特權值,返回資訊到乙個luid結構體裡。

函式原型:bool lookupprivilegevalue(

lpcstr lpsystemname, // 乙個指標, 它指定檢索特權名稱的系統的名稱。本地系統為 null。

lpcstr lpname, // 乙個指標, 指定特權的名稱.

pluid  lpluid // 乙個指向乙個變數的指標, 它接收到由 lpsystemname 引數指定的系統上已知許可權的 luid。

);引數 lpname:

返回值:非零表示成功,零表示失敗。

democode:

bool preprocess()

if (lookupprivilegevalue(null, se_shutdown_name, &tkp.privileges->luid) == 0

)

/*if (lookupprivilegevalue(null, se_shutdown_name, &tkp->privileges[0].luid) == 0 ||

lookupprivilegevalue(null, se_security_name, &tkp->privileges[1].luid) == 0

......)

*/tkp.privilegecount = 1

; tkp.privileges->attributes =se_privilege_enabled;

/*tkp->privilegecount = n+1;

for ( i = 0; i <= n; i++)

*/if (adjusttokenprivileges(htoken, false, &tkp, 0, null, 0) == 0

)

closehandle(htoken);

return

true;

}bool shutdown()

步驟應該很清楚了......

Kali學習 許可權提公升 5 1 使用假冒令牌

使用假冒令牌可以假冒乙個網路中的另乙個使用者進行各種操作,如提公升使用者許可權 建立使用者和組等。令牌包括登入會話的安全資訊,如使用者身份識別 使用者組和使用者許可權。當乙個使用者登入windows系統時,它被給定乙個訪問令牌作為它認證會話的一部分。例如,乙個入侵使用者可能需要以域管理員處理乙個特定...

DELPHI 中如何提公升程序令牌

delphi 中如何提公升程序令牌 近一段時間在用delphi寫個程式,當我寫到乙個結束其他程序的模組的時候有時不成功,那是因為其他程序,如病毒程序的許可權高,通過常規的結束程序的函式行不通,要首先提高自身程式的許可權,再結束其他程序 在網上也看到了一些提公升程序令牌的函式但都不怎麼好用,最後我還是...

提公升程序令牌 Delphi原始碼

眾所周知,當我們要結束乙個程序時,可以呼叫windows api函式terminateprocess函式。但是,有很多程序依然還是無法結束的,這是因為程序許可權不夠,這時我們可以給程序提公升許可權再k掉k不掉的程序。一般程序獲取了sedebugprivilege許可權後都可以殺掉大部分程序了。提公升...