Cara mengekstrak nomor port dari shellcode
Sep 27 2020
Saya melihat kode shell ini dan ketika mereka menggunakan connectfungsinya mereka mengirimkan nomor port 4444:
set_address:
push byte 0x05 ; retry counter
push 0x0100007F ; host 127.0.0.1
push 0x5C110002 ; family AF_INET and port 4444
mov esi, esp ; save pointer to sockaddr struct
Atau di situs lain seperti itu:
0000001A push dword 0x5c110002 ; [0x5c110002, 0x81caa8c0, 0x1, 0x0] // sin_port and sin_family (4444, 0x0002)
Tapi mereka mendorong 0x5C110002, bagaimana mereka mengekstrak 4444 dari 0x5C110002?
Jawaban
2 ShaneReilly Sep 28 2020 at 07:30
The connectsyscall mengambil sockaddrstruktur sebagai argumen, yang terlihat seperti ini:
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Mereka tidak mengekstraksi 4444, itu hanya diteruskan di tumpukan sebagai pendek dua byte. Anda meneruskan ke connect, dalam urutan little-endian:
sin_family: 0x0002 (AF_INET)sin_port: 0x5c11 (4444 in hex, little endian)sin_addr: 0x0100007F ([127] [0] [0] [1], little endian)
E235 Sep 27 2020 at 16:23
Saya menemukan di sini bagaimana mengubahnya dengan python.
import socket
port = 4444
hex(socket.htons(port))
Result : 0x5c11
Kebalikannya seperti itu:
socket.htons(0x5c11)
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'