pwnable.tw – start – challenge 1

pwnable-tw-start-1

Phân tích

Chương trình sử dụng các ngắt 80h để thực hiện lệnh gọi hệ thống đọc và ghi dữ liệu. Điểm đáng chú ý ở đây đó là không gian dự kiến để chứa dữ liệu nhập là 14h = 20 bytes nhưng lại cho phép nhập đến 3Ch = 60 bytes. Điều này dẫn đến lỗi tràn stack.

Quyết định là sẽ chèn vào đây 1 shellcode để chiếm quyền điều khiển. Nhưng làm thế nào để giá trị trả về đúng bằng địa chỉ của shellcode trên ngăn xếp.

Giải pháp

Xét thấy phần code in dữ liệu ra màn hình lấy dữ liệu là từ trong stack. Nếu quay trở lại đoạn này thì dữ liệu in ra sẽ là một giá trị khác trong ngăn xếp. May mắn thay, giá trị đó có chứa địa chỉ ngăn xếp.

=> Thực hiện 2 lần tràn bộ đệm:

  • Lần 1: Tràn để lấy địa chỉ trên stack
  • Lần 2: Tràn để đưa shellcode vào ngăn xếp và thực thi shellcode

=> Thiết kế payload:

  • Payload1 = “A”  * 20 + 0x08048087( address of ‘mov ecx, esp’)
  • Payload2 = “A” * 20  + (add_stack + 20) + shellcode

pwnable-tw-start-2.png

Shellcode: Here

pwnable-tw-start-3.png

 

 

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s

%d người thích bài này: