適合新手入門的漏洞調試與分析—CVE-2010-3333

語言: CN / TW / HK

這是第二次在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安全學習資料包