Writeup cho 2 bài pwn của vòng loại SVATTT 2017

tmnt53

VIP Members
25/04/2015
98
132 bài viết
Writeup cho 2 bài pwn của vòng loại SVATTT 2017
Đề bài pwn400 năm nay hơi fail, khi mà cách giải của người chơi không được đúng ý tác giả. Còn bài pwn100 khá hay, là lỗi format string hay gặp, tuy nhiên nằm ở snprintf chứ không phải printf. Khá ít đội làm được bài pwn100 do chưa quen với snprintf.

Bài pwn400

Theo ý của tác giả, thì để giải bài này, người chơi cần phải viết được con shellcode chỉ dùng các ký tự printable. Tuy nhiên, cách giải đơn giản chỉ là viết rop, gọi tới hàm get_string với tham số là địa chỉ vùng ghi được, và nhảy luôn tới đó.

upload_2017-11-5_0-52-11.png

Mã khai thác:

upload_2017-11-5_0-59-24.png

Bài pwn100

Lỗi format string cơ bản, với hàm bị lỗi là snprintf. Tác giả chỉ cho xâu format dài 0x7F byte, do đó ta không thể ghi đè dữ liệu thoải mái được. Tuy nhiên, để biến atoi thành system, thì ta chỉ cần ghi đè 4 byte thấp của atoi thành 4 byte thấp của system là được. Và với 0x7F byte thì ta hoàn toàn làm được.

upload_2017-11-5_1-30-31.png

Mã khai thác:

upload_2017-11-5_1-0-37.png

Link tải đề bài và mã khai thác: pwn_vongloai_svatt2017.zip
 
Chỉnh sửa lần cuối bởi người điều hành:
PWN em đọc không có hiểu gì cả, một starter như em thì xem hướng dẫn ở đâu ạ
 
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
Comment
Ai có thể giải thích rõ hơn cho em ở đoạn p32(get_string)+p32(s1)+p32(s1) là sao không ạ
 
Chỉnh sửa lần cuối:
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
Comment
Ai có thể giải thích rõ hơn cho em ở đoạn p32(get_string)+p32(s1)+p32(s1) là sao không ạ
Trong C, có các kiểu int, short, char,... Trong bộ nhớ, số nguyên int được lưu 4byte, short 2byte và char 1byte. Các byte được lưu theo thứ tự little endian (https://en.wikipedia.org/wiki/Endianness). Ví dụ một biến int, có giá trị bằng 1234 (0x4d2) thì trong bộ nhớ, nó là string "\xd2\x04\x00\x00".
Trong p32(get_string), anh có get_string là số nguyên, muốn chuyển sang dạng số nguyên int lưu trong bộ nhớ thì anh dùng hàm p32 của pwntools.
 
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: fallensaint
Comment
Thẻ
pwn svattt 2017 writeup
Bên trên