逆向之利用地址覆蓋執行Shellcode
Shellcode
- Shellcode定義
Shellcode實際是一段代碼(也可以是填充數據),是用來發送到服務器利用特定漏洞的代碼一般可以獲取權限。
- Shellcode的作用
Shellcode一般是作爲數據發送給受攻擊服務器的。Shellcode是溢出程序和蠕蟲病毒的核心提到它自然就會和漏洞聯想在一起。漏洞利用中最關鍵的是Shellcode的編寫。
由於漏洞發現者在漏洞發現之初並不會給出完整Shellcode因此掌握Shellcode編寫技術就顯得尤爲重要。
Shellcode的構造
- 構造shellcode的作用:
構造一段shellcode的作用就是爲了在緩衝區溢出時將shellcode的地址覆蓋掉正常的返回地址。
- Shellcode的存放位置:
Shellcode的通常放在緩衝區內,也可以通過環境變量存入堆內,也可以通過動態內存放入堆區。
Shellcode執行方法
跳板跳轉
- 跳板跳轉的定義
跳板跳轉是一種常見的讓可執行程序執行Shellcode內容的方法。
- 跳轉過程:
(1)用內存中任意一個”jmpesp”的地址覆蓋返回地址。
(2)函數返回後被重定向去執行內存中jmpesp”指令。
(3)由於函數返回後ESP指向返回地址後,"jmpesp”執行後,CPU將到棧區函數返回地址之後的地方取指令執行。
(4)Shellcode的佈置。緩衝區前面一段用任意數據填充,把Shellcode放在函數返回地址後面。jmpesp執行完就執行Shellcode。