Về cơ bản các chức năng tôi đang khai thác là thế này:Cần khai thác tràn bộ đệm. Không thể tìm hiểu làm thế nào để uncorrupt ngăn xếp sau khi thực hiện mã khai thác?
int getbufn()
{
char buf[512];
Gets(buf);
return 1;
}
Khi tôi chạy chương trình chính chức năng thực hiện 5 lần và mỗi lần vị trí của những thay đổi buf và do đó, vị trí của% ebp. Những gì tôi phải làm là đặt một giá trị hex cụ thể, cho phép nói 0xFFFFFFFF, vào một biến và chương trình chính kiểm tra mỗi lần để xem nếu biến đó là có. Nếu nó được thực hiện một lần nữa cho đến khi tất cả 5 lần được thực hiện và chương trình thoát ra lặng lẽ.
Sự cố tôi gặp phải là trước khi kiểm tra giá trị hex có một kiểm tra cho một giá trị khác không đổi, cho phép nói 0x12345678. Nếu tôi đã bị hỏng 0x12345678 và nó không có, chương trình phát nổ trên tôi.
Tôi đã tìm ra rằng 0x12345678 được lưu trữ trong -0x10 (% ebp) vì vậy tôi biết nó dựa trên% ebp và tôi biết địa chỉ% ebp mỗi lần nhưng tôi chỉ có thể khai thác để làm việc lần đầu tiên . Tôi làm điều này bằng về cơ bản nopsled-ing 496 byte và có mã máy này ở định dạng byte:
mov 0xFFFFFFFF, %eax
movl address old ebp, %ebp
push correct return adress in function main
ret
mà kết thúc lên được 5 lời nói và một byte trong thời gian dài trở lại mà tôi đầy 0x313131 để làm cho nó dài 6 chữ . Tại thời điểm này, chuỗi khai thác của tôi dài 520 byte, chính xác là bao nhiêu bộ đệm dưới% ebp và vì vậy tôi thêm vào địa chỉ của ebp cũ và địa chỉ ở đâu đó bên trong nopsled của tôi ghi đè giá trị hiện tại ở% ebp cũng như trả về địa chỉ cho getbufn.
Vấn đề là khi chương trình thực thi lần thứ 2% ebp ở địa chỉ 0x10 thấp hơn địa chỉ trước đó, do đó cách của tôi không hoạt động% ebp không hoạt động và phát hiện chính 0x12345678 không phải là -0x10 (% ebp). Làm thế nào để tôi không bị hỏng% ebp?
Bạn không thể tính% ebp là khoản chênh lệch từ% esp? I E. khôi phục% ebp không bằng 'movl' của địa chỉ ngay lập tức, nhưng bằng cách sao chép% esp vào% ebp và thêm một phần bù vào nó? – pmdj
Bạn đang sử dụng cờ trình biên dịch nào, trình biên dịch nào. Bạn có thể cung cấp toàn bộ chương trình và mã khai thác không? – Stellarator
Một trường học cho đệm khai thác bài tập về nhà ... Tôn trọng! –