Fu interpreter
Points
101
Solves
53
Category
Pwning
- Description: We have developed a Fu interpreter, try your chance and find the flag. This service running on latest Ubuntu Xenial OS.
- nc 69.90.132.40 4001
- Ta cần thực hiện fu_interpreter nhiều lần nên cần quay lại main sau khi fu_interpreter. (1) => ghi đè puts_got thành main.
- Sau khi quay lại được thì ta dùng fu_interpreter để leak địa chỉ trong libc nhằm tìm địa chỉ system.
- Sau khi có địa chỉ system thì ta cần ghi đè system lên strlen_got
- Nhập /bin/sh để truyền vào system
strlen(buf)
- main:
fu_interpreter:
Ta chỉ có 1 chỗ input duy nhất ở hàm main (line 20) nhưng không thể overflow được buf.
Ở fu_interpreter ta có thể kiểm soát được địa chỉ mà fu trỏ tới và giá trị tại địa chỉ đó nhưng không hề có 1 sự kiểm tra an toàn nào => ta có thể lợi dụng để ghi đè lên các vùng nhớ quan trọng nhằm thay đổi luồng thực thi của chương trình.
Xem xét từ main ta thấy fu = &data mà data nằm tại địa chỉ 0x0804A080 trong data segment.
fu tại địa chỉ 0x0804A060 trong data segment.
data segment nằm ngay trên got segment => đè got
Hướng giải quyết bài này: ghi đè địa chỉ system lên strlen_got thì fgets(buf, 150, stdin); len = strlen(buf) sẽ trở thành len = system(buf)
Các bước cần làm:
Kết quả:
Full payload: https://pastebin.com/EpUmC080