Tôi đang tham gia một khóa học bảo mật cần chúng ta thực hiện tấn công chuỗi định dạng trên một máy ảo unix. Lỗ hổng là một chuỗi định dạng sử dụng đối số dòng lệnh.Cách viết giá trị vào một địa chỉ trong tấn công chuỗi định dạng
Câu hỏi của tôi là làm thế nào tôi có thể viết giá trị vào một địa chỉ trong chuỗi định dạng (như viết địa chỉ mã shell vào địa chỉ trả về hàm)?
Ví dụ: tôi cố gắng viết giá trị 987654 vào vị trí địa chỉ trả về 0xaabbccdd. Tôi đã thử một số chuỗi như "AAAA_%10$x"
và điều này có thể dẫn chương trình in AAAA_41414141
.
Sau đó, tôi thay thế các chữ cái bằng địa chỉ của mình và cố gắng ghi đè lên nó.
\xdd\xcc\xbb\xaa_%10$x_%54321x_%n"
Nhưng nó không hoạt động. Tôi thấy một bài viết nói rằng tôi nên sử dụng một số nhỏ hơn trong %54321x
vì có một số ký tự tôi đã viết, nhưng tôi không biết có bao nhiêu ký tự tôi đã viết trước %54321x
, một trong hai.
lưu ý: Môi trường có phiên bản cũ của gcc, vì vậy không cần phải lo lắng về giá trị quá lớn. Bất kỳ đề xuất nào? Cảm ơn.
'sprintf' ghi vào bộ đệm char trên ngăn xếp cũng có thể được sử dụng để gây sát thương độc hại ... –
@Oli: có nhưng đó không phải là một cuộc tấn công chuỗi định dạng, nhiệm vụ của OP có vẻ là ... –
A chuỗi định dạng do người dùng cung cấp có thể được sử dụng để làm hỏng. –