Writeup challenge objdump - Grandprix 2017

tmnt53

VIP Members
25/04/2015
98
132 bài viết
Writeup challenge objdump - Grandprix 2017
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
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
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
  • Thích
Reactions: whf
Thẻ
grandprix 2017 objdump writeup
Bên trên