20145332盧鑫 擴充:注入shellcode實驗
shellcode基礎知識
Shellcode實際是一段程式碼(也可以是填充資料),是用來傳送到伺服器利用特定漏洞的程式碼,一般可以獲取許可權。另外,Shellcode一般是作為資料傳送給受攻擊伺服器的。 Shellcode是溢位程式和蠕蟲病毒的核心,提到它自然就會和漏洞聯想在一起,畢竟Shellcode只對沒有打補丁的主機有用武之地。網路上數以萬計帶著漏洞頑強執行著的伺服器給hacker和Vxer豐盛的晚餐。漏洞利用中最關鍵的是Shellcode的編寫。由於漏洞發現者在漏洞發現之初並不會給出完整Shellcode,因此掌握Shellcode編寫技術就顯得尤為重要。
Shellcode本質上可以使用任何程式語言,但我們需要的是提取其中的機器碼。Shellcode使用匯編語言編寫是最具可控性的,因為我們完全可以通過指令控制程式碼生成,缺點就是需要大量的時間,而且還要你深入瞭解彙編。如果你想追求速度,C是不錯的選擇。C語言編寫起來較為省力,但Shellcode提取較為複雜,不過,一旦寫好模板,就省事許多。
shellcode程式碼
實驗過程
結構為:anything+retaddr+nops+shellcode。
如下圖“\x4\x3\x2\x1”處是即將要覆蓋的shellcode返回地址,構造shellcode:
除錯執行,發現"segmentation fault",編譯時對該程式啟動棧空間可執行許可權(gcc -z execstack -o 5332shellcode 5332shellcode.c),問題解決,結果如下: