Tôi hiện đang quan tâm đến việc học cách làm tràn bộ đệm. Tôi đã thực hiện khá một chút lắp ráp, và hiểu làm thế nào ngăn xếp hoạt động và làm thế nào để thực hiện một tràn bộ đệm trong C. Tuy nhiên, tôi đang chạy trên khá một chút rắc rối cố gắng để có được GCC 4.9.1 để cho phép tôi tràn một bộ đệm đúng cách. Tôi đang chạy Debian Jessie.Làm cách nào để kiểm tra tràn bộ đệm trên hệ thống hiện đại?
Here là hướng dẫn mà tôi đang cố gắng làm theo, trong phần 2.2. Tôi đã sao chép/dán chương trình C mà anh ấy cung cấp, và tôi đang sử dụng cùng một kịch bản Perl mà anh ấy có, vì vậy mọi thứ đều giống hệt như trường hợp của anh ấy (ngoại trừ hệ thống, tất nhiên).
Đây là những kết quả mà tôi nhận được một cách nhất quán:
~/projects/buffer-overflow$ ls
run.pl test.c
~/projects/buffer-overflow$ sudo su
[email protected]# echo "0" > /proc/sys/kernel/randomize_va_space
[email protected]# exit
exit
~/projects/buffer-overflow$ gcc -m32 -fno-stack-protector -zexecstack test.c
~/projects/buffer-overflow$ ./run.pl
Address of foo = 0x804845b
Address of bar = 0x80484a4
My stack looks like:
(nil)
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x8048657
0xffffd494
[email protected]
Now the stack looks like:
0xffffd718
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x42418657
0x46454443
Tôi không hiểu phiếu bầu. Câu hỏi có vẻ khá rõ ràng đối với tôi, và chắc chắn là về lập trình. – NPE
Bạn đã thử nhập một chuỗi dài * trước * thử với kịch bản Perl, để xác minh rằng ngăn xếp đang được ghi đè "chính xác" chưa? Mỗi phiên bản của gcc đều giới thiệu các tối ưu hóa mới và biện pháp đối phó với loại thủ thuật này. Bạn có thể muốn thử có lẽ với -O. – LSerni
@NPE. Tôi cũng lo lắng về điều đó. Có vẻ như một câu hỏi hợp pháp và giao thoa với tôi. –