Shellcode là gì

Trong đoạn phim khai quật BoF (https://christmasloaded.com/threads/video-huong-dan-khai-thac-bof-co-ban.8391/), chúng ta gồm sử dụng đến một nhỏ shellcode là binsh. Hôm ni bản thân sẽ chỉ dẫn chúng ta bí quyết hoạt động của một nhỏ shellcode cùng biện pháp viết nó.Môi trường: Linux, viết shellcode 32bit.Linc các tệp tin đi kèm (bé shellcode binsh, tệp tin testShellcode.c) ngơi nghỉ cuối bài viết.khi viết shellcode bên trên môi trường xung quanh Linux, ta dùng đến những system Gọi. Trên Windows hay không có tác dụng vậy, cơ mà phải Hotline tới các hàm trong tlỗi viện dll, bởi vì hệ thống system Hotline qua những đời Windows bị đổi khác, nhưng không hẳn Việc gì cũng có tác dụng được. Còn trên Linux thì ngược trở lại, bình ổn, cụ thể, cung ứng mọi Việc từ bỏ ghi tệp tin cho tới msinh sống kết nối socket.System gọi là những lời Gọi tới những cách xử lý ngắt, mà các cách xử trí này được triển khai vào kernel. khi ta điện thoại tư vấn một hàm bên trên khối hệ thống 32bit, thì ta cần truyền tsay mê số vào staông chồng cùng tiến hành lệnh Hotline. Nhưng khi triển khai Gọi một system Call, ta đang truyền những tmê say số vào những tkhô hanh ghi, với thực hiện lệnh int 0x80.lấy một ví dụ một nhỏ shellcode dễ dàng độc nhất, chỉ thực hiện các bước tựa như hàm exit, qua lời Điện thoại tư vấn system điện thoại tư vấn sys_exit:


Bạn đang xem: Shellcode là gì

Shellcode bên trên tương tự với lời điện thoại tư vấn hàm exit(0x3). Trong Linux, hàm exit bao gồm system điện thoại tư vấn tương xứng của nó, nhận 1 tsi mê số. Tsay mê số này được truyền qua tkhô cứng ghi ebx (mov ebx, 0x3). Còn system call exit bao gồm số hiệu 1, đề nghị ta truyền eax bởi 1 (mov eax, 0x1).

Xem thêm: Bạn Hãy Cho Biết Việt Nam Và Trung Quốc Bắt Đầu Đàm Phán Phân Định Vịnh Bắc Bộ Khi Nào

Cuối cùng điện thoại tư vấn lệnh int 0x80 là chấm dứt.Để biên dịch bé shellcode bên trên, ta tạo thành một file exit.asm cùng với nội dung:
*
Và ta cần sử dụng nasm để biên dịch: nasm exit.asm -o exit
Dòng BITS 32 nhằm chỉ mang lại nasm biết là ta đề xuất biên dịch mã 32bit.Để dump shellcode ra, ta cần sử dụng objdump:objdump -D -b binary -mi386 -M intel fileName
*
Nhỏng hình bên trên ta thấy vùng quẹt màu đá quý đó là mã hex của shellcode sau khoản thời gian được biên dịch.Để chạy shellcode này, ta cần sử dụng một chương trình điện thoại tư vấn chạy shellcode nlỗi sau:
*
Chương trình trên dìm tmê man số thứ nhất là tệp tin shellcode; đọc shellcode vào một string, cùng thực thi vùng shellcode ấy. Vì shellcode 32bit bắt buộc ta biên dịch buộc phải tsay đắm số -m32. Còn -execstaông xã là để có thể chấp nhận được xúc tiến dữ liệu, như thế shellcode new bao gồm quyền chạy (theo như kiến thức phần NX - https://christmasloaded.com/threads/gioi-thieu-nx-va-aslr.8446/)gcc testShellcode.c -o testShellcode32 -m32 -zexecstack
Ta hotline chạy fileshellcode exit, với in ra quý giá trả về:
*
Nhận thấy quý hiếm trả về là 3 => shellcode sẽ tiến hành thành công!Để tra số hiệu của các system Gọi, có thể xem trên http://syscalls.kernelgrok.com/.
*
lấy ví dụ, sys_read có số hiệu 3. Hay để Gọi sys_write, ta cần truyền eax = 0x4.Trong bảng trên, các tsi mê số yêu cầu truyền vào đến ebx, ecx,… không được chuẩn, ví dụ so với sys_execve sầu, các tmê man số biểu hiện nlỗi trên là không nên. Để biết phải truyền các tham mê số mang lại sys_execve ra sao, ta sử dụng định nghĩa hàm:Tra số hiệu được eax = 0xbThứ đọng tự truyền những tmê mệt chu kỳ lượt là ebx, ecx, edx, esi mê, ediXem quan niệm hàm bởi man execve:
*
Vậy đề nghị truyền ebx = filename, ecx = argv, edx = envp.Con shellcode binsh chỉ đơn giản và dễ dàng hotline cho hàm execve với những tham số nlỗi sau:filename = “/bin//shx00x00x00x00”argv = NULLenvp không xác định (ko truyền gì vào đến edx)
*
Người ta truyền các tsay mê số không tuân luật lệ nhỏng trên là để triển khai làm sao để cho shellcode nlắp tốt nhất hoàn toàn có thể, với không tồn tại byte 0x00. Con shellcode binsh tạo nên chỉ dài 21 byte. Test chạy demo shellcode:
*
Tổng kết lại, ta có:Shellcode thường xuyên được Hotline lên các system điện thoại tư vấn. Sử dụng system gọi table nhằm tra list system Điện thoại tư vấn.Sử dụng nasm để viết shellcode.Dùng testShellcode để khám nghiệm shellcode tất cả chạy hay không (debug bằng gdb trường hợp cần).


Xem thêm: Làm Thế Nào Để Giữ Lửa Khi Yêu Xa, Làm Gì Để Giữ Lửa Khi Yêu Xa

Mời các bạn tmê mẩn gia Group christmasloaded.com để bàn thảo với cập nhật thông tin bình an mạng mỗi ngày.Lưu ý tự christmasloaded.com:
Kiến thức bình yên mạng nhằm chống kháng, ko làm điều xấu. Luật pháp liên quan

Chuyên mục: Hỏi Đáp