- Phá hoại DNS traffic tunnelin g route mangling
1) Kẻ tấn công truy vấn DNS server cục bộ 2) DNS cục bộlàm cho các truy vấn lặp lạ
2.10. Tấn công Buffer Overflow Vấn đề
Vấn đề void foo(char *s) { char buf[10]; strcpy(buf,s); printf(“buf is %s\n”,s); } … foo(“thisstringistolongforfoo”); void foo(char *s) { char buf[10]; strcpy(buf,s); printf(“buf is %s\n”,s); } … foo(“thisstringistolongforfoo”);
Khai thác
Ý tưởng chung là để cung cấp cho các chương trình
(server) các chuỗi ký tự rất lớn đến mức sẽ làm tràn bộ đệm.
Đối với một server với mã cẩu thả - có thể dễ dàng đánh sập server bằng việc làm tràn bộ đệm.
Đôi khi chúng có thể làm bất kỳ điều gì với server mà chúng muốn (thay vì đánh sập).
101
Kiến thức cần biết
Hàm C và ngăn xếp
Một ít kiến thức về ngôn ngữ máy/hợp ngữ
Hiểu được cách hệ thống gọi thực thi (tại mức mã máy)
Các lời gọi hệ thốngexec()
Phụ thuộc CPU/OS
Xây dựng một khai thác yêu cầu kiến thức của CPU cụ thể và hệ điều hành của mục tiêu.
Ở đây chỉ nói về x86 và Linux, nhưng các phương pháp làm việc cho cả CPU và OS khác.
Một số chi tiết rất khác nhau, nhưng các khái niệm đều giống nhau.
103
C Call Stack
Khi một hàm gọi được thực hiện, các địa chỉ trả lại được đặt trên ngăn xếp.
Thường thì giá trị của các tham số được đặt trên ngăn xếp.
Thông thường hàm sẽ ghi con trỏ khung ngăn xếp
(stack frame pointer) (trên ngăn xếp). Các biến cục bộ được đặt trên ngăn xếp.
Hướng ngăn xếp
Trên Linux (x86) ngăn xếp đi từ địa chỉ cao đến địa chỉ thấp.
Đẩy một cái gì đó trên ngăn xếp đi từ đỉnh của ngăn xếp (Top of Stack) hướng về địa chỉ 0.
105
Một khung của ngăn xếp (A Stack Frame)
Các tham số (Parameters)
Địa chỉ trả về (Return Address)
Gọi con trỏ khung (Calling Frame Pointer)
Các biến cục bộ (Local Variables)
00000000
Addresses