提權函式之RtlAdjustPrivilege

2021-06-16 08:18:44 字數 3152 閱讀 4812

提權函式之rtladjustprivilege()

rtladjustprivilege() 這玩意是在 ntdll.dll 裡的乙個不為人知的函式,ms沒有公開,原因就是這玩意實在是太nb了,以至於不需要任何其他函式的幫助,僅憑這乙個函式就可以獲得程序acl的任意許可權!

下面是函式定義: ?

12

3

4

5

6

7

ntstatus rtladjustprivilege

(

ulongprivilege,

booleanenable,

booleancurrentthread,

pbooleanenabled

)

引數的含義:

privilege [in] privilege index to change.                        

// 所需要的許可權名稱,可以到msdn查詢關於process token & privilege內容可以查到

enable [in] if true, then enable the privilege otherwise disable.

// 如果為true 就是開啟相應許可權,如果為false 則是關閉相應許可權

currentthread [in] if true, then enable in calling thread, otherwise process.

// 如果為true 則僅提公升當前執行緒許可權,否則提公升整個程序的許可權

enabled [out] whether privilege was previously enabled or disabled.

// 輸出原來相應許可權的狀態(開啟 | 關閉)

用法很簡單: 1

2

3

#define se_debug_privilege 0x14 //debug 許可權

ints;

rtladjustprivilege(se_debug_privilege,true,false,&s);

rtladjustprivilege(se_debug_privilege,1,0,null);

比用 adjusttokenprivileges 來提公升程序許可權方便很多,所以自己整理下備忘

這個函式封裝在ntdll.dll中(在所有dll載入之前載入),被微軟嚴格保密,就是說你在msdn上查不到關於他的任何資訊。

常量 se_backup_privilege = 0x11h

常量 se_restore_privilege = 0x12h

常量 se_shutdown_privilege = 0x13h

常量 se_debug_privilege = 0x14h

先來看看這個函式的定義(winehq給出):

ntstatus rtladjustprivilege

(ulong    privilege,

boolean enable,

boolean currentthread,

pboolean enabled

)引數的含義:

privilege [in] privilege index to change.                        

// 所需要的許可權名稱,可以到 msdn 查詢關於 process token & privilege 內容可以查到

enable [in] if true, then enable the privilege otherwise disable.

// 如果為true 就是開啟相應許可權,如果為false 則是關閉相應許可權

currentthread [in] if true, then enable in calling thread, otherwise process.

// 如果為true 則僅提公升當前執行緒許可權,否則提公升整個程序的許可權

enabled [out] whether privilege was previously enabled or disabled.

// 輸出原來相應許可權的狀態(開啟 | 關閉), 注意:該引數賦予空指標會出錯,我測試過。

附上 delphi 定義和例子,我測試過的:

function rtladjustprivilege(privilege:ulong;

enable:bool;

currentthread:bool;

var enabled:bool):dword; stdcall; external 'ntdll';

const

se_backup_privilege = $11;

se_restore_privilege = $12;        

se_shutdown_privilege = $13;     //關機許可權

se_debug_privilege = $14;             //除錯許可權

delphi 呼叫例子:

varenabled:bool;

begin                           

if rtladjustprivilege(se_debug_privilege,true,false,enabled)) = 0 then

showmessage('ok');

end;

瞬間關機**vc

#include

const unsigned int se_shutdown_privilege = 0x13;

int main()

nresult = zwshutdownsystem(2);

freelibrary(hdll);

return 0;

}

提權函式之RtlAdjustPrivilege

rtladjustprivilege 這玩意是在 ntdll.dll 裡的乙個不為人知的函式,ms沒有公開,原因就是這玩意實在是太nb了,以至於不需要任何其他函式的幫助,僅憑這乙個函式就可以獲得程序acl的任意許可權 先來看看這個函式的定義 winehq給出 ntstatus rtladjustpr...

提權函式之RtlAdjustPrivilege

ulong privilege,boolean enable,boolean currentthread,pboolean enabled 引數的含義 privilege in privilege index to change.所需要的許可權名稱,可以到msdn查詢關於process token ...

授權函式 web set user

為web伺服器指定登入字串。當我們使用rns伺服器或者某些伺服器的時候需要我們輸入賬號密碼登入才能給進行訪問,那麼這個時候就需要用到該函式 int web set user const char username,const char password,const char host port 引數...