Tổng hợp Shellcode Là Gì – Hướng Dẫn Viết Shellcode là ý tưởng trong bài viết hôm nay của KTĐT Lễ Hội Phượng Hoàng. Đọc content để biết chi tiết nhé.
Bạn đang xem: Shellcode là gì
Như vậy muốn viết được shellcode, tôi phải học cách viết mã máy? Câu trả lời là không. Không ai trực tiếp viết ra mã máy khi muốn tạo shellcode. Thay vào đó, bạn có thể: a) sử dụng các shellcode có sẵn trên Internet; b) viết bằng C, dịch sang Assembly rồi tiếp tục dịch sang mã máy; c) viết bằng Assembly rồi dịch luôn ra mã máy.Đối với cách a), tin vui là có rất nhiều thư viện shellcode trên Internet, thậm chí có một số chương trình cho phép bạn tạo shellcode và viết exploit bằng một ngôn ngữ cao cấp như Python hay Ruby. Tin buồn là nếu bạn nhào vào sử dụng liền các shellcode có sẵn mà không tìm hiểu chúng, bạn có thể bị gài bom. Nên nhớ rằng, shellcode có thể làm được tất cả mọi chuyện, hành động lấy shellcode từ Internet rồi chạy mà không thật sự hiểu shellcode đó làm gì giống như việc chạy các file .exe nhận được từ một người lạ mặt! Đến một lúc nào đó, bạn sẽ sử dụng các chương trình tạo shellcode tự động kể trên để đơn giản hóa việc viết exploit nhưng trước mắt, bạn cần phải tự viết được shellcode đã. Trong tài liệu này chúng ta sẽ sử dụng luân phiên hai cách b) và c) để viết shellcode. Bạn nên sử dụng cách b) khi mới bắt đầu hoặc khi cần phải triển khai một loại shellcode phức tạp. Nhìn vào hai cách này, bạn có thể thấy rằng viết shellcode đòi hỏi phải có sự thông hiểu về ngôn ngữ Assembly của kiến trúc máy tính mà bạn dự định sẽ chạy shellcode trên đó. Đây là điều hiểu nhiên bởi lẽ các loại máy khác nhau (x86, x86-64, sparc, ppc, amd hay mips…) chỉ hiểu được một nhóm mã máy khác nhau. Ngoài ra, bạn còn phải thông hiểu cách giao tiếp với hệ điều hành (linux, windows, solaris hay freebsd…) để có thể thực thi được lệnh trong shellcode. Thông thường, bạn cần phải có một phiên bản shellcode khác nhau cho mỗi loại hệ điều hành chạy trên mỗi loại kiến trúc phần cứng khác nhau. Nói cách khác, shellcode phụ thuộc vào hệ điều hành và kiến trúc phần cứng.
Xem thêm: Aromatic Là Gì – Trong ẩm Thực
Bạn vẫn còn đang đọc bài này đó chứ :p? Nếu có bất kì chỗ nào còn mù mờ, bạn nên đọc lại từ đầu và đừng ngại hỏi nếu bạn muốn. Những gì tôi trình bày về shellcode từ đầu đến giờ là những ý quan trọng nhất về shellcode, nếu bạn chỉ muốn biết shellcode để nói chuyện cho vui thì bạn có thể dừng lại ở đây. Còn nếu bạn muốn tự viết cho mình những đoạn shellcode tối ưu thì hãy đi tiếp cùng tôi nhé.
Xem thêm: Reporter Là Gì – Đâu Là Sự Khác Biệt Giữa Reporter Và Journalist
Trong bài tiếp theo, tôi sẽ trình bày những kiến thức căn bản về Assembly đủ để bạn có thể hiểu và viết được shellcode đầu tiên của mình. Sau đó tôi sẽ đề cập đến hai trở ngại quan trọng nhất mà bạn cần phải vượt qua khi viết shellcode: vấn đề địa chỉ ô nhớ (addressing problem) và vấn đề của các byte có giá trị null (null byte problem). Chúng ta cũng sẽ thảo luận sơ lược một số ví dụ về shellcode trên kiến trúc máy Intel 32-bit (còn gọi là x86).
Cần chuẩn bị những gì để học viết shellcode?
Như đã nói từ đầu, bài viết này không yêu cầu bạn phải có kiến thức trước về Assembly hay C. Yêu cầu duy nhất là bạn phải có sự khao khát học hỏi cái mới. Ngoài ra, tôi sử dụng Ubuntu Linux trên máy x86 để viết các shellcode mẫu trong bài này, do đó bạn cũng cần phải chuẩn bị một máy tính có cấu hình tương tự (Linux-x86) như tôi. Bạn chọn distro nào cũng được, nhưng tốt nhất là nên chọn Ubuntu như tôi luôn. Các phần mềm khác mà bạn cần phải chuẩn bị:
gdb là phần mềm giúp bạn debug (bắt lỗi) hoặc disassemble các chương trình viết bằng C. gdb thường có sẵn trong distro của bạn.objdump là công cụ giúp bạn xem các thông tin quan trọng trong các file object hay file executable. Tương tự như gdb, objdump thường có sẵn trong distro của bạn.strace là công cụ xem các syscall (tôi sẽ giải thích khái niệm này sau) mà một chương trình gọi khi nó được thực thi
(vnhacker)
Lượt xem (1821)
Ngành “HOT” – An toàn thông tin (Information Security)
Nguy cơ khi bạn Crack phần mềm
Web Fake, DNS CACHE POISONING, đánh cắp tài khoản trong LAN
Tạo một ứng dụng Empty Project hoặc Win32 trên Visual C++
An ninh mạng làm gì?
Tại sao C++ 35 năm tuổi vẫn còn thống trị thế giới lập trình?
Ẩn sóng Wireless (p1)
Modem TP-Link bị tấn công thay đổi cấu hình
Chuyên mục: Hỏi Đáp