分析poc和分析exp有一些不一樣,因為exp是人為構造後的東西,它會執行一段自定的shellcode。結果是根本不會觸發異常或者異常在離觸發點十萬八千里的地方。這樣分析poc的技巧就用不上了(因為無法有效的定位到漏洞觸發的第一現場)。但是可以從exp的功能入手,觀察一下exp的行為比如建立檔案、建立程式之類的。可以從行為找出關鍵的API進行下斷。
1.分析shellcode的功能,對其中的關鍵API下斷。
2.透過系統API找到shellcode的位置,分析shellcode的位置。找到漏洞處觸發的第一現場。
如果得到了棧中shellcode的地址但是卻不知道是哪個函式的棧,可以對棧下寫入斷點da w 4 XXX "r eip;gc"。這樣的話,最後輸出的eip值就是最後對棧進行寫入的函式位置了,也就得到了溢位函式的地址。
另一方面是在調exp的時候要注意很多dll是動態載入的,可以利用sxe lm在模組載入時斷下來提供除錯時機。
在抓到shellcode之後想要得出漏洞觸發的原理的時候,可以在樣本中搜尋這個shellcode字串實現定位(多見於檔案格式漏洞)
Tips 1:剛學到的小知識,word類的exp樣本基本都會使用GetFileSize函式來釋放木馬和正常文件
Tips 2:溢位類漏洞的三要素:目標地址、來源地址、複製大小