/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
小編為大家帶來了全新開發的自動化漏洞利用引擎,Rex自動化漏洞利用引擎,該軟件是為了參加DARPA網絡挑戰賽而設計,展示Rex棧溢出之Exploit自動生成能力 ,測試樣例為linux下可執行程序vuln_stacksmash,其中存在棧溢出漏洞,通過rex自動生成rop2text ,rop2system ,jmpesp等三種Exploit,有需要的快來下載Rex自動化漏洞利用引擎
使用 radare2 簡要分析 vuln_stacksmash。vuln() 函數中,調用 read(int fd, void * buf, size_t count) 時未檢查緩衝區大小,導致棧溢出。
使用 GDB 調試 vuln_stacksmash,運行至溢出點,程序狀態如下:
計算偏移為 0×44,構造 PoC 並輸入。單步執行並檢查棧幀情況,可見 EBP 已被 “\x41\x41\x41\x41” 覆蓋,後續四個字節為 EIP 值,已被覆蓋為 “\x42\x42\x42\x42”。
跟蹤至 vuln() 返回,觸發異常,EIP 被劫持為 “\x42\x42\x42\x42”。
上文簡要分析了 vuln_stacksmash 中存在的棧溢出漏洞,下文將介紹如何利用 Rex 自動生成 Exploit。
Rex 的實現基於 Angr,主要采用混合符號執行技術,對原理感興趣的同學可以閱讀論文 《(State of) The Art of War: Offensive Techniques in Binary Analysis》。由於封裝的原因,整體代碼看起來較為簡潔,從漏洞複現、漏洞類型判定、Exploit 生成到 Exploit 有效性驗證,共計 10 行代碼。其中,Crash 類用以複現漏洞並返回漏洞類型,Exploit 類用以判定漏洞的可利用性,並生成 Exploit。171 ~ 174 行用以驗證 Exploit 的有效性。
Rex 在實現混合符號執行時,首先使用 QEMU 進行 Concrete Execution,在獲取到 Crash 狀態後,使用 Angr 進行 Concolic Execution,相關功能封裝在 Crash 類中。
1、Concrete Execution
使用 QEMU 加載 vuln_stacksmash,以 PoC 為輸入運行,獲取程序崩潰時的狀態。執行結果如下:
2、Concolic Execution
在獲取到 Crash state 後,基於 Angr 實現 Concolic Execution。首先設置程序初始狀態。
使用 ‘posix’、’preconstrainer’ 插件輔助分析:
SimSystemPosix()
Data storage and interaction mechanisms for states with an environment conforming to posix.
Available as “state.posix“.
SimStatePreconstrainer()
This state plugin manages the concept of preconstraining – adding constraints which you would like to remove later.
:param constrained_addrs : SimActions for memory operations whose addresses should be constrained during crash analysis
使用 ‘Tracer’、’Oppologist’ 兩種 Exploration_techniques:
設置 simulation_manager :
執行結果:
0×03 漏洞類型判定
Crash 類中的 _triage_crash() 方法對漏洞類型進行判定。
執行結果為 IP_OVERWRITE:
代碼中設置了 rop_leak_memory、rop_set_register、 explore_for_exploit 三種利用方式。通過閱讀源碼可知,rop_leak_memory、rop_set_register 均是針對 CGC 格式文件的利用技術。在 Rex 現有的 exploit_technique 中,call_jmp_sp_shellcode、call_shellcode、rop_to_system 三種技術用以針對 ELF 文件。執行結果如下:
0×05 Verified
對三種生成結果進行確認。
0×06 小結