Trong video khai thác BoF (https://infobandarpkr.com/threads/video-huong-dan-khai-thac-bof-co-ban.8391/), chúng ta tất cả sử dụng mang lại một bé shellcode là binsh. Hôm ni mình sẽ khuyên bảo các bạn biện pháp buổi giao lưu của một bé shellcode với biện pháp viết nó.Môi trường: Linux, viết shellcode 32bit.Linh các file đi kèm (con shellcode binsh, file testShellcode.c) sinh sống cuối bài viết.lúc viết shellcode trên môi trường thiên nhiên Linux, ta dùng mang lại những system điện thoại tư vấn. Trên Windows thường ko làm vậy, nhưng mà bắt buộc Hotline tới những hàm vào thư viện dll, bởi vì hệ thống system Call qua các đời Windows bị đổi khác, cơ mà không phải bài toán gì rồi cũng làm cho được. Còn bên trên Linux thì ngược trở lại, bất biến, ví dụ, hỗ trợ đa số việc từ bỏ ghi tệp tin cho tới msinh hoạt liên kết socket.System hotline là các lời Hotline cho tới những xử lý ngắt, mà lại các giải pháp xử lý này được triển khai vào kernel. Khi ta call một hàm trên hệ thống 32bit, thì ta yêu cầu truyền tđắm say số vào staông xã và thực hiện lệnh hotline. Nhưng lúc thực hiện call một system gọi, ta vẫn truyền những tđam mê số vào các tkhô nóng ghi, cùng triển khai lệnh int 0x80.Ví dụ một nhỏ shellcode đơn giản nhất, chỉ tiến hành quá trình giống như hàm exit, qua lời call system gọi sys_exit:


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

Shellcode bên trên tương tự với lời Call hàm exit(0x3). Trong Linux, hàm exit gồm system Call tương ứng của chính nó, dìm 1 tsi số. Ttê mê số này được truyền qua tkhô cứng ghi ebx (mov ebx, 0x3). Còn system điện thoại tư vấn exit gồm số hiệu 1, đề xuất ta truyền eax bằng 1 (mov eax, 0x1).

Xem thêm: Openvpn Là Gì ? Hướng Dẫn Cấu Hình Và Cách Sử Dụng Vpn Chuẩn A

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


Xem thêm: Sổ Đỏ Tiếng Anh Là Gì - Phân Biệt Sổ Hồng Và Sổ Đỏ

Mời các bạn tsi gia Group infobandarpkr.com nhằm thảo luận với cập nhật thông tin an toàn mạng từng ngày.Lưu ý từ infobandarpkr.com:
Kiến thức an toàn mạng để phòng chống, không làm cho điều hung. Luật pháp liên quan