適合新手入門的漏洞除錯與分析—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安全學習資料包