再次翻出來很早寫的文章:
《你能控制什麼?漏洞利用高級技巧》
一直想寫的東西,就是懶一直沒寫,簡單寫一些資訊。
其實就是利用可以控制的東西,怎麼一步步擴大控制去控制整個程式達到你的目的。文字病毒(病毒新理論)! http://hi.baidu.com/yuange1975/blog/item/9feaa273f0348c148701b095.html 裡面其實就是說的這個,不要簡單的把此文章理解成在玩文字遊戲。可以把想達到的目的看成一個個許可權小島,有些許可權是等價的,我們就可以把這樣的小島用橋連接起來,這樣其實就變成我們怎麼利用一些條件通過一個個小島怎麼到達我們想去的小島的遊戲。比如我們要提權,經常我們不是利用提權的漏洞,我們知道cpu0級的運行許可權這個小島就和最高許可權這個小島是連通的,我們只要到達這個小島就可以得到最高許可權了。我們的漏洞利用技巧就是在對系統的瞭解、對漏洞的理解基礎上儘量多建立這樣的小島,以及小島與小島之間的橋樑。
其實利用這種思想也很容易找到一些許可權類的漏洞。 ms的rpc曾經有個漏洞就是一個rpc行程裡面可以跑很多線程程式碼,有些rpc線程是低許可權,但有些rpc是高許可權的客戶調用,低許可權的程式碼只要hook那些高全許可權客戶調用的rpc,然後調用一個類比客戶的調用就得到高許可權,實現提權了。系統目錄、程式目錄等都對應著系統許可權,原來winnt、win2000對程式目錄沒有設定好許可權,包含一直到後來很多程式安裝對程式目錄的許可權設定都有問題。
有人把攻擊分為非程式碼執行類和程式碼執行類,我們習慣於程式碼執行類攻擊,因為我們知道程式碼執行這個島嶼和我們需要的島嶼基本上都是連通的。非程式碼執行類比較零星,改變一些身份標識、認證標識、shell\dll路徑等。程式碼執行類現在也出現很多對抗措施、dep+aslr、antirop、emet攻擊等,還有一些cfi、sfi等。CFI(Control-FlowIntegrity,控制流完整性保護),CFI可以看成一個盒子保護程式流,但這盒子是屬於一些比較弱的保護,他們都運行在一個行程記憶體裡面,記憶體控制小島和程式流小島是連通的,程式流被控制,但只要利用漏洞到達了控制記憶體這塊小島,也就突破了這塊盒子,然後程式流就完全可以被任意控制,甚至把這種保護剔除掉。其實個人認為CFI也就是和虛擬機器一樣的一個盒子,解决虛擬機器和真實機的一個簡單隔離的算灋,NaCl利用這個算灋可以在web裡面跑c程式碼,恐怕也算不上安全解决緩衝溢出等的好方案。
1、一個wins漏洞只能溢出幾個位元組不能覆蓋eip、ebp、內部指針等,微軟號稱只能崩潰。利用這一個字節的溢出覆蓋一個變數,利用這個變數導致再次溢出成功利用。
2、ms08-068,漏洞洩露用戶名和加密的密碼hash,通常是破解。但是通過數學演算,我們知道這個用戶名和加密的密碼hash可以構造環境後使用,成功利用中間人認證成功,然後自動psexec上傳木馬運行。
3、ms08-067,漏洞穩定利用需要兩個0x005c數據,一個可傳遞的字串長度len,另一個可以利用大記憶體申請,使用新頁面的特性,精確定位記憶體指針的低兩個位元組得到0x005c。
4、wins指針傳遞漏洞,可以精確得到指針,可以控制指針裡面的數據得到需要的opcode,精確實現跳轉,不依賴系統版本等。還有利用hook科技讓wins自己關閉通訊端,而shellcode截獲通訊端,避免wins和shellcode都讀數據的處理,成功使用數據通道對抗防火牆等。
5、aspcode,堆溢出利用。溢出後構造自己的記憶體鏈表,每次記憶體分配,分配和合併兩組4次記憶體寫操作。記憶體寫寫出幾個位元組的小s hellcode,覆蓋通用peb指針跳轉到小s hellcode得到執行。
6、phpcmd,php可以執行指定檔案。控制日誌檔生成需要的phpshell,然後加載。