Basic Linux Exploit – Buffer Overflow – Phần 3 – Khai thác lỗi tràn bộ đệm với small buffer

Tram Ho

Chào mọi người, nối tiếp phần trước, phần này mình sẽ giới thiệu phương pháp khai thác với buffer nhỏ. Như phần trước, buffer của chúng ta có độ lớn 64 bytes, đủ chứa shellcode và thực hiện sửa đổi return address. Tủy nhiên ở phần này, buffer chỉ có độ lớn 10 bytes, cùng tìm hiểu phương pháp khai thác ở dưới bằng cách sử dụng biến môi trường.

1. Thêm shellcode vào environment và lấy địa chỉ env với C code

Trên linux, để thêm env ta có thể sử dụng đơn giản với cmd export, ta thực hiện thêm shellcode như phần trước vào env như sau:

Sau đó, tạo file c để tiến hành lấy địa chỉ shellcode:

get_env.c

Ta thực compile file: gcc -m32 get_env.c -o get_env
Chạy thử ta được kết quả như sau:

Ok, ta đã có địa chỉ của shellcode, tiếp theo thực hiện debug với gdb để tìm offset để sửa đổi return address.

2. Debug với gdb tìm offset eip và viết file exploit

Ta có file small_buff.c

Compile: gcc -m32 -z execstack -mpreferred-stack-boundary=2 small_buff.c -o small_buff

Debug với gdb:
Ta tạo 1 pattern để tìm offset (các bạn cần cài đặt gef, link đã để ở phần 1):

Chạy file với input vừa tạo

Ta được kết quả chương trình dừng tại 0x61666161, dùng câu lệnh sau để tìm offset

Như vậy offset = 18, ta viết file small_buff_exploit.py

Chạy chương trình và mình nhận được 1 shell

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo