适合新手入门的漏洞调试与分析—CVE-2010-3333
這是第二次在tools發帖,為了響應管理猿的號召,也為了愛好應用程序安全新手的需要。在此,我初步研究了一下微軟3333漏洞的成因,并試著定位到了樣本中的shellcode,現在就對這個入門級的漏洞做個簡單的分析:
首先,我們還是用OD加載word.exe程序,按F9運行。如圖:
圖(一)
接下來,我們要具體分析3333漏洞出現的成因(具體的可以百度)。經過查詢,我們知道導致3333漏洞的原因,是因為漏洞產生在MSO.DLL文件中,下文以Microsoft Office2003的MSO.DLL(版本號為:11.0.5606.0)為例。我們將樣本拖入運行的word中,如圖:
圖(二)
此時,先別急著打開!我們回到OD中,按下ALT+E,看看此時word加載了哪些模塊。
圖(三)
我們看到,mso.dll(也就是導致3333漏洞的文件)已經被OD加載進來。我們雙擊mso.dll,并同時按下ctrl+A,讓OD對mso.dll進行分析。等OD分析完成后,如圖:
圖(四)
根據我們百度的結果(鏈接:http://wenku.baidu.com/link?url=8SkPKM5C5lGsrkjd4-uckMFg4YvuTlWN0kAdQSQKMXRgSRL8FiuxjwZ1aOE92QDwCbt855VWEEsOjGkc9ecQ54daMWivTpjMpcY1kS9rI87)可知,函數在處理pFragments屬性的值時,未嚴格檢查屬性值所占用的空間大小,導致memcpy函數在復制屬性值時溢出堆棧。
在此,我們選用“mov bx , 5000000”這句指令,來定位處理pFragments屬性值的函數(當然這種定位方式,是在已知漏洞位置的情況下。在調試0day時,因為我們不知道具體的漏洞點,此種方法便顯得無能為力。在這種情況下我們可以通過定位WINEXEC函數的來定位shellcode,從而調試、定位出具體漏洞點…其實分析0day是個很復雜過程,這個話題我們以后在討論)。如圖:
圖(五)
我們在“mov bx , 5000000”下好斷點后,就可以點擊剛才word彈出的是否打開對話框(圖二中對話框),選擇“打開”。如圖:
圖(六)
此時我們看到EIP寄存器斷在了“mov bx , 5000000”指令處。通過之前百度到資料,我們知道導致棧溢出的函數位于:30F4CC93處的 call dword ptr ds:[eax+0xlc] 函數,我們單步F7跟進來,如圖:
圖(七)
我們通過對百度結果的分析,可知:當執行完“rep movs dword ptr es:[edi],dword ptr ds:[esi]”棧中的數據就會產生溢出(此時,我還未執行這句指令),現在我們看看未溢出時棧空間的情況:
圖(八)
接下來,我們執行一下“rep movs dword ptr es:[edi],dword ptr ds:[esi]”這句指令,看看棧中的變化,如圖:
圖(九)
注意:請讀者自行比較圖(八)與圖(九)的區別。
接下來就是執行shellcode了,至此我們將這個3333漏洞用OD分析完了。如果要想從全局了解3333漏洞的成因,全面的掌握3333漏洞的情況,還得借助IDA分析工具(可謂是反匯編的利器),至于對shellcode的分析和編寫在此就不敘述了。
最后,想跟大家分享一句心得:我們研究漏洞的目的不是為了去搞破壞,而是更好完善網絡安全,更好的服務他人。
有需要網安新手入門教材的點擊下方字體
價值11980安全學習資料包
總結
以上是生活随笔為你收集整理的适合新手入门的漏洞调试与分析—CVE-2010-3333的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别再问Cloudflare CDN 漏洞
- 下一篇: 由PLC未授权访问引发的工程重置漏洞