任意寫入轉RCE 是做什麼的?
任意寫入轉 RCE 手冊。當你擁有任意寫入原語(來自堆積利用、格式化字串或越界寫入)並需要將其轉換為程式碼執行時使用,目標包括 GOT、鉤子、_IO_FILE vtable、exit_funcs、TLS_dtor_list、modprobe_path、.fini_array 或 C++ vtables。
目標
此技能專注於將任意寫入原語轉化為程式碼執行,以下是一些常見的攻擊目標:
- GOT(全域偏移表):修改函數指標以劫持控制流。
- 鉤子(hooks):覆蓋回呼函數以執行惡意程式碼。
- _IO_FILE vtable:利用檔案結構體的虛函數表進行攻擊。
- exit_funcs:在程式退出時執行自訂函數。
- TLS_dtor_list:透過執行緒本地儲存解構子列表觸發代碼執行。
- modprobe_path:修改模組載入路徑以執行任意二進位檔。
- .fini_array:在程式終止時執行函數指標。
- C++ vtables:覆蓋虛函數表以劫持物件方法呼叫。
使用方法
- 識別漏洞:確認你擁有任意寫入原語(例如堆積溢位、格式化字串或越界寫入)。
- 選擇目標:根據目標環境選擇合適的攻擊目標(參考上述列表)。
- 執行寫入:使用你的原語將惡意負載寫入目標記憶體位置。
- 觸發執行:透過正常程式流程(如函數呼叫、物件方法調用或程式退出)觸發代碼執行。
範例
假設你有一個能寫入任意位址的原語,以下是如何修改 GOT 條目以劫持 free() 函數:
# 範例指令,實際情況需根據漏洞調整
echo "Write exploit payload to GOT"
注意事項
- 確保目標系統的保護機制(如 ASLR、NX、Stack Canaries)已考慮在內。
- 某些目標(如 modprobe_path)可能需要 root 權限。
- 測試時請在受控環境中進行,避免影響生產系統。
參考資源
- 有關各目標的詳細技術說明,請參閱相關安全文檔或漏洞利用指南。