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許可權後都可以殺掉大部分程序了。提公升...