Tôi muốn hiểu sự khác biệt chính xác giữa hai loại tấn công này. Từ những gì tôi đã đọc:Sự khác biệt giữa - tràn bộ đệm và trở về cuộc tấn công libc
Tràn bộ đệm: Nó ghi đè địa chỉ ret trên ngăn xếp để trỏ đến một phần khác của mã nơi mã độc hại được chèn vào. Vì vậy, hiệu quả - ở đây chúng ta cần phải sửa đổi mã nguồn của chương trình để thực sự thực hiện các cuộc tấn công.
Quay lại Libc- Tại đây thay vì sửa đổi mã nguồn, các cuộc gọi hàm thời gian chạy được cung cấp bởi thư viện C được sử dụng (để mở trình bao). Ở đây các tham số được sử dụng cho các cuộc gọi chức năng cũng được thông qua trong bộ đệm ghi đè, kết thúc sau khi phần ret của ngăn xếp.
Mô tả ở trên có chính xác không?
Và một câu hỏi liên quan khác - liệu có thể có một cuộc tấn công tràn bộ đệm mà không thực sự sửa đổi mã nguồn của chương trình gốc không? Có lẽ nếu chúng ta viết một chương trình mới và cho phép sửa đổi một số phần bộ nhớ (đó là địa chỉ ret mới trong ngăn xếp bị hỏng của chương trình gốc). Sau đó, một lần nữa, tôi nghĩ rằng điều này có thể không thực hiện được do việc bảo vệ bộ nhớ được cung cấp giữa các tiến trình trong nhân.
Bạn có thể giải thích ý của bạn bằng cách - làm cho bộ nhớ thực thi (hoặc không thể thực thi được). Và nghi ngờ khác (một phần của câu hỏi ban đầu của tôi) là - tôi tin rằng một mã C sẽ không có quyền truy cập vào tất cả các bộ phận của bộ nhớ chính. Vì vậy, làm thế nào là nó xác định được nơi mã lắp ráp độc hại được đặt trong bộ nhớ. Bởi vì tôi nghĩ cho hầu hết các vùng bộ nhớ - nó sẽ chỉ gắn cờ một lỗi phân đoạn khi quay trở lại đó. – Hari
Cốt lõi của mã khai thác bạn chèn thường sử dụng và hàm exec() kiểu gia đình. Điều này có nghĩa, bằng cách cho nó các thông số thích hợp, bạn có thể có nó, nói, sinh ra một/bin/sh shell là người dùng root. Đây là * thực hiện * một chương trình, và bạn không thể nữa. Có nhiều biện pháp bảo mật khác nhau, nhưng điều này sẽ được mô tả, ví dụ: trong – gnometorule
http://en.wikipedia.org/wiki/NX_bit – gnometorule