Writeup challenge objdump - Grandprix 2017

Thảo luận trong 'Exploitation' bắt đầu bởi tmnt53, 08/01/18, 11:01 AM.

  1. tmnt53

    tmnt53 Moderator Thành viên BQT

    Tham gia: 25/04/15, 09:04 AM
    Bài viết: 128
    Đã được thích: 95
    Điểm thành tích:
    28
    Thể loại: pwnable
    Đề bài:
    Khai thác một dịch vụ web, chạy các chức năng giống như công cụ objdump của GNU binutils:
    objdump_service.PNG

    File thực thi objdump của dịch vụ được biên dịch từ binutils 2.24, nhưng được sửa đi một chút, để có thể khai thác được. Mã nguồn binutils 2.24 phiên bản sửa, file thực thi objdump và file thông tin cấu hình biên dịch đều được cung cấp: https://drive.google.com/drive/folders/0B943jnA--r3YY0pmR0ZLUDIzWDQ
    objdump_info.PNG

    Cách làm:
    Để tìm ra chỗ mã nguồn bị sửa, ta tải mã nguồn binutils 2.24 thật về, và dùng diff để so sánh:
    diff.PNG
    File bị sửa là bfd/peicode.h. Điều kiện internal_f.f_opthdr > bfd_coff_aoutsz (abfd) bị comment đi.
    Do đó kích thước của optional hdr có thể lớn tùy ý. Ngoài ra, tác giả biên dịch với option -fno-stack-protector => hướng khai thác là stack BoF, bằng cách cung cấp một file PE với optional header có kích thước thật lớn. Cấu trúc của optional header như sau:
    DataDirectory.PNG
    Ở cuối cấu trúc này là một mảng lưu trữ các IMAGE_DATA_DIRECTORY. Mình thử tạo một file PE có số lượng IMAGE_DATA_DIRECTORY thật lớn, lớn hơn IMAGE_NUMBEROF_DIRECTORY_ENTRIES, thì lập tức có BoF!!!
    Mã khai thác trong file đính kèm

    Phần còn lại là viết mã khai thác. Stack BoF => sử dụng ROP trong file objdump để leak thông tin libc, rồi ghi đè hàm fread bằng hàm system.
    objdump_exploit.PNG
     

    Các file đính kèm:

    Chỉnh sửa cuối: 08/01/18, 11:01 AM
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
    whf thích bài này.