Mask
VIP Members
-
03/07/2013
-
33
-
25 bài viết
EX1: Tìm hiểu lỗ hổng Buffer overflow
Xin lỗi các bạn, thấy forum thiếu nhiều mục kiến thức cơ bản về phần các lổ hổng quá, hôm nay mình mạn phép xin viết một bài nhỏ về một loại lỗi cơ bản nhất từ xưa đến nay, lỗ hổng tràn bộ đệm buffer overflow, có gì thiếu sót hay không hiểu các bạn cứ đóng góp ý kiến nha. Thank trước.
Phần trình bay của mình sẽ bao gồm 2 phần, phần giới thiệu lý thuyết và phần thực hành. Hôm nay chắc sẽ nói qua về phần lý thuyết trước đã.
Để tìm hiểu về cái này, mình xin đi vào một số khái niệm cơ bản đã nhỉ:
Bài giới thiệu của mình là về lỗ hổng tràn bộ đệm, vậy bộ đệm là gì ? Lỗ hổng tràn bộ đệm là gì ?
Buffer – tạm dịch là bộ đệm – được định nghĩa là một vùng nhớ liên tục có kích thước giới hạn. Bộ đệm thường dùng nhất trong C là một mảng. Bộ đệm thường được dùng để lưu trữ các giá trị tạm thời của một xâu phục vụ cho quá trình xử lý.
Vậy lỗ hổng tràn bộ đệm hiểu theo nghĩa đơn giản nhất là sao chép dữ liệu có kích thước lớn hơn vào một bộ đệm mà không thực hiện các thao tác kiểm tra biên dẫn đến vùng nhớ phía sau bộ đệm bị ghi đè, vùng nhớ này có thể lại là một bộ đệm khác hoặc là vùng nhớ hệ thống…Hậu quả có thể làm chương trình hoạt động không chính xác hoặc đổ vỡ.
Các bạn có thể nhìn qua ví dụ sau:
Ở đây, khi chương trình chạy, một buffer sẽ được cấp phát để lưu trữ các giá trị của mảng array. Và biên dịch chương trình không hề có lỗi, điều đó chứng tỏ C không hề thực hiện kiểm tra biên của mảng.
Dù không tồn tại phần tử array[5] nhưng cũng không có lỗi xảy ra.
Chúng ta cùng thử một ví dụ khác:
Phần trình bay của mình sẽ bao gồm 2 phần, phần giới thiệu lý thuyết và phần thực hành. Hôm nay chắc sẽ nói qua về phần lý thuyết trước đã.
Để tìm hiểu về cái này, mình xin đi vào một số khái niệm cơ bản đã nhỉ:
Bài giới thiệu của mình là về lỗ hổng tràn bộ đệm, vậy bộ đệm là gì ? Lỗ hổng tràn bộ đệm là gì ?
Buffer – tạm dịch là bộ đệm – được định nghĩa là một vùng nhớ liên tục có kích thước giới hạn. Bộ đệm thường dùng nhất trong C là một mảng. Bộ đệm thường được dùng để lưu trữ các giá trị tạm thời của một xâu phục vụ cho quá trình xử lý.
Vậy lỗ hổng tràn bộ đệm hiểu theo nghĩa đơn giản nhất là sao chép dữ liệu có kích thước lớn hơn vào một bộ đệm mà không thực hiện các thao tác kiểm tra biên dẫn đến vùng nhớ phía sau bộ đệm bị ghi đè, vùng nhớ này có thể lại là một bộ đệm khác hoặc là vùng nhớ hệ thống…Hậu quả có thể làm chương trình hoạt động không chính xác hoặc đổ vỡ.
Các bạn có thể nhìn qua ví dụ sau:
Mã:
#include
int main[B]()
{[/B]
int array[B][[/B]5[B]][/B] [B]=[/B] [B]{[/B]1[B],[/B]2[B],[/B]3[B],[/B]4[B],[/B]5[B]};[/B]
printf[B]([/B]"%d
"[B],[/B]array[B][[/B]5[B]]);[/B]
[B]return[/B] 0[B];
}[/B]
Ở đây, khi chương trình chạy, một buffer sẽ được cấp phát để lưu trữ các giá trị của mảng array. Và biên dịch chương trình không hề có lỗi, điều đó chứng tỏ C không hề thực hiện kiểm tra biên của mảng.
Dù không tồn tại phần tử array[5] nhưng cũng không có lỗi xảy ra.
Chúng ta cùng thử một ví dụ khác:
Mã:
int main[B]()
{[/B]
int array[B][[/B]5[B]];[/B]
int i[B];[/B]
[B]for[/B] [B]([/B]i [B]=[/B] 0[B];[/B] i [B]
Chỉnh sửa lần cuối bởi người điều hành: