🎰ELF x86 - Format string bug basic 1
Note : A JOURNEY TO GAIN KNOWLEDGE
Last updated
Note : A JOURNEY TO GAIN KNOWLEDGE
Last updated
chall:
Work flow:
Đầu tiên ta xác định được buffer size 32
Flag được đọc từ file .passwd được chuyển thành string và ghi vào stack
Hàm trigger đáng ngờ ở đây chính là printf với argv[1]
Thật vậy, khi đọc tài liệu về hàm printf ta thấy điều thú vị sau:
Như vậy tham số đầu tiên luôn là kiểu dữ liệu như %d, %s tương ứng với giá trị theo sau đó
Nhưng ở đây lại truyền vào hàm printf với các giá trị không kiểm duyệt, dẫn đến hiện trạng nếu ta nhập các kiểu dữ liệu hex %x sẽ khiến hàm trả về các giá trị trong stack (bao gồm địa chỉ các function và flag)
Để dễ quan sát hơn ta dùng %0x.
0 là padding khi không đủ số lượng
8 là số lượng giá trị hiển thị
x là hiển thị giá trị hex
Kí tự . để phân cách mỗi 8 kí tự cho dễ quan sát
Như vậy ý tưởng ở đây, ta chỉ việc leak hết các dữ liệu có thể đọc trong stack và tìm cụm có nghĩa
Tuy nhiên do đang ở dạng little-endian, ta có thể viết đoạn script cơ bản sau để chuyển lại big-endian
flag: Dpa9d6)(Epamd