標籤:技術 斷點 color create 特殊 分享圖片 center ble bsp
之前弄NSA smb漏洞的時候需要調核心的shellcode,所以整理了一下windbg調試shellcode的技巧。
應用程式層中直接載入shellcode比較簡單,通過以下步驟
- .dvalloc 5000
- .readmem shellcodepath allocaddress length
- r eip = allocaddress
雙機核心模式下由於.dvalloc命令不可用,因此需要採取一些特殊的方式。
通過下nt!NtCreateFile斷點,讓其斷下,其他的函數也可,使用nt!NtCreateFile主要是考慮到其調用的頻繁性,此時斷下之後,相當於劫持了一個線程,在該線程中調用函數nt!ExAllocatePool手動分配一段記憶體頁池。
直接單步到返回,eax即為分配的記憶體池。
通過.readmem將shellcode載入。
設定eip即可單步調試。
在該文章中,其作者將這一步驟整合為一個windbg指令碼
https://vallejo.cc/2017/06/23/loading-and-debugging-windows-kernel-shellcodes-with-windbg-debugging-doublepulsar-shellcode/
但是比較臃腫,至少我是沒有跑起來,實際上整個步驟完全就是一個斷點的事兒,以下是我整合的斷點:
bp nt!NtCreateFile "ed esp+4 0;ed esp+8 20000;r eip = nt!ExAllocatePool;bp ExAllocatePool+0x15 \"r eax;.readmem C:\\\\Users\\\\goabout2\\\\Desktop\\\\shellcode @eax L5000;r eip = ea+0x0\";g"
其中紅色部分可以自行替換,第一,二個紅框分別標識分配的記憶體池,和拷貝的shellcode的長度,第三個標識shellcode的入口位移,這個一般直接為0即可,效果如下:
轉載請註明出處
Windbg調試核心shellcode