1. 程式人生 > >《metasploit滲透測試魔鬼訓練營》靶機演練之第五章實戰案例Oracle資料庫

《metasploit滲透測試魔鬼訓練營》靶機演練之第五章實戰案例Oracle資料庫

準備一臺BT5作為入侵機,一臺win2003作為靶機,靶機上存在著Oracle資料庫(版本為10.2.0.1.0)TNS服務的漏洞,該漏洞的編號為CVE-2009-1979。 BT5: ip 10.10.10.128 win2003: ip 10.10.10.130 下面開始演練: 在網上找到了關於這一漏洞的一些介紹,metasploit裡有利用這個漏洞的模組,首先search這個模組:
進入目錄去檢視一下這個模組的原始碼,找到target,如圖:
能看出用了p/p/r的溢位方式,以及不同版本需要不同的返回地址變數Ret。 進入metasploit,選擇好滲透模組和攻擊載荷,配置好引數:



配置好後,執行exploit命令,發現沒有返回shell:
多以執行後依然沒有返回,於是就懷疑係統版本的問題。 首先懷疑是返回地址出現的差錯,於是去靶機用OllyDbg載入了ORACLE.EXE程序,從滲透模組的原始碼可以知道,Ret為0x011b0528,對應的是p/p/r, 在靶機上定位到該位置,如圖:
沒有錯啊,, 沒有思路了,,還是回去翻了翻書,根據書上的思路來吧。。 回去看了看模組原始碼,找到了這幾行,有了線索:

資料包用了AUTH_SESSKEY作為名稱標識,這就意味著ORACLE程式中肯定用到了這個標識,回到OllyDBG,檢視所有的文字字串,如圖:
在文字框中搜索 AUTH_SESSKEY,找到了三個,如圖:
分別跟進去看了看,發現都呼叫了同一個函式,這裡就截一個圖:
跟蹤這個函式,來到了這裡:
在60FD99AC下個斷點,然後F9讓程式跑起來,然後再次用BT5的exploit命令攻擊。程式斷在斷點處。 然後用Ctrl+F9到返回處01010EBD,如圖:
接著又呼叫了CALL_02610928函式,看了書才知道這是_intel_fast_memcpy函式,F7跟進,可以再棧中看到呼叫的引數, Address        Value            Comments 0673D040    |0673DA96    目的地址 0673D044    |04AB99A4     源地址 0673D048    |000001A7     複製長度 接下來看一下SEH: Address        Value            Comments 0673DC40    |0673DE64    Pointer to next SEH record 0673DC44    |0261348C    SEH handler 計算一下,向目的地址0673DA96複製長度0X1A7位元組的資料,最終覆蓋到0X0673DC3D 沒有覆蓋到SEH起始地址0X0673DC40 。 真相大白了,原來是複製的字串不構長! 在記憶體部分中找到源地址04AB99A4處的字串,然後查詢開始時找到的返回地址Ret0x011B0528,地址為0x04AB9B42。 計算一下偏移量: 返回地址和源地址之間:0x04AB9B42-0x04AB99A4=0x19E 目的地址到SEH Handler之間:0x0673DC44-0x0673DA96=0x1AE 故,需要增加0x10的隨機位元組,找到模組中構造溢位字串的原始碼:

修改為
為了覆蓋必須加長字串,所有+0x10。這樣做就加大了棧中payload和跳轉指令偏移量,所以也要修改jmp指令跳轉的距離,由於jmp後移0x10,前面字串增加0x10最終增加+0x20,這裡說的略簡單,不懂的讀者可以去百度一下SEH跳轉記憶體攻擊原理,就不在詳細說了,過於繁瑣,而且我也不是很懂。 重新啟動ORACLE服務,在BT5上重新測試,用rexploit命令,結果:
成功。 演練心得: 這次演練主要是根據書上的步驟來的,如果沒有書的教程,自己根本就做不來,特別是程式跟蹤除錯,完全就是一步步跟著做,換個演練案例估計就跪了。。。所以以後得加強這方面的學習和實踐,還有關於利用SEH異常溢位漏洞的原理還是不太懂,計算偏移量時有點混亂。。毛病多多啊。。。 這兩天好好把這些梳理梳理,會轉載一些關於講解溢位漏洞的文章(自己寫不出來啊。。),還有關於程式除錯的。