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