Professional Documents
Culture Documents
Untitled
Untitled
dựa theo source code thì a có thể biết được rằng địa chỉ được output ra chính là địa chỉ đầu
tiên của chuỗi, vào sau đó ct bắt ta nhập vào 1 chuỗi bất kì.
nhìn vào source code ta cũng có thể thấy được lỗi có thể khai thác được là BOF bởi vì hàm
gets() sẽ nhận hết tất cả input từ bàn phím rồi đưa nó vào stack và khi kiểm tra các chế độ bảo vệ thì
canary đã bị disable.
đặc biệt là mình có thể nhìn thấy được chế độ bảo vệ NX cũng đã được disable đồng nghĩa với việc
ta có thể thực hiện lệnh ở trên stack -> có thể chạy shellcode trên stack để chiếm shell của hệ thống
(kỹ thuật shellcode).
-> đại chỉ đó không chứa bất kỳ dữ liệu nào của chương trình. có nghĩa là 0xbfc24857bfc33148 chính là 1 phần
của chuỗi shellcode thế nên ret k thể nhảy đến địa chỉ này để thực hiện lệnh trên stack.
giải pháp khác: theo như ban đầu có đề cập thì chương trình sẽ xuất ra địa chỉ đầu tiên của buff cho nên mình có
thể lấy cái địa chỉ đó để tính ra địa chỉ nào đó trên stack mà có chứa shellcode để thực hiện.
-> cách làm đơn giản nhất đó chính là chèn vào địa chỉ 0x7fffffffde30 (ngay sau địa chỉ
chứ địa chỉ trả về của ret) đoạn shellcode của mình và ghi đè điạ chỉ trả về tại 0x7fffffffde28 thành
0x7fffffffde30 thì có thể chạy shellcode trên stack
-> chiếm được shell