Shellcode是嵌入在惡意程序中的一段代碼,在感染受害者的目標系統后,可以獲取命令shell代碼,例如類UNIX操作系統中的/bin/bash, Microsoft windows 操作系統上的 MS-DOS 和cmd .exe。shellcode經常被用作漏洞利用負載。
Shellcode
1.如你所知,僅僅感染系統、利用漏洞或安裝某些系統服務是不夠的。在許多情況下,黑客的所有這些行為都是為了獲得對受感染機器的管理員訪問權限。
2.所以惡意軟件只要感染了機器,得到一個shell,也就是控制權的一種方式。這是信息泄露、創建僵尸網絡將目標系統變成僵尸的直接途徑,或者只是在被黑客入侵的機器上執行其他破壞性功能。
3.Shellcode通常被注入到正在運行的程序的內存中,然后通過利用堆棧溢出或堆緩沖區溢出等編程錯誤或使用格式字符串攻擊將控制權轉移給它。
4.通過用注入的shellcode的地址覆蓋堆棧上的返回地址、覆蓋被調用函數的地址或更改中斷處理程序來將控制權轉移到shellcode。這一切的結果就是shellcode的執行,它打開了通道供破解者使用。
5.在利用遠程漏洞(即漏洞利用)時,shellcode可以在易受攻擊的計算機上打開預定義的 TCP 端口,以便進一步遠程訪問 shell。這樣的代碼稱為端口綁定shellcode。
6.如果shellcode連接到攻擊者計算機的端口(為了繞過防火墻或通過NAT泄漏),那么這樣的代碼稱為反向shell(reverse shell shellcode)。
將 shellcode 運行到內存中的方法
有兩種方法可以將shellcode運行到內存中執行:
1.位置無關代碼 (PIC) 方法是使用二進制代碼(即,將在內存中執行的代碼)硬綁定到特定地址或數據的代碼。Shellcode本質上是一個 PIC。為什么硬綁定如此重要?shell 無法確切知道 RAM 的位置,因為在執行受感染程序或惡意軟件的不同版本期間,它們可以將shellcode加載到不同的內存單元中。
2.識別執行位置方法意味著當訪問位置獨立的內存結構中的數據時,shellcode必須取消引用基指針。從基指針中添加(ADD)或減去(Reduce)值可以讓你安全地訪問作為shellcode一部分的數據。