[writeup] 31c3ctf mynx

Tesla123

VIP Members
25/03/2014
7
141 bài viết
[writeup] 31c3ctf mynx
Đây là một bài khá hay, mình phải mấy mấy tiếng đồng hồ để phân tích code.
Đầu tiên chương trình tổ chức bộ nhớ, cấp phát như sau:
ScreenShot2014-12-31at80513PM_zps8cb11523.png


Cấp phát 1 vùng nhớ 0x1000 bytes đầu tiên, và set 4 byte kế tiếp là length (1)
Vùng nhớ 0x1000 bytes này được chia nhỏ ra 16 phần, 1 phần là 256 bytes.
ScreenShot2014-12-31at80606PM_zpsc221f81d.png


Nếu vùng nhớ 0x1000 bytes này hết , chương trình sẽ tạo 1 vùng nhớ khác tiếp theo như (1)
Cấu trúc của một ascii art được phân bố như sau:
ScreenShot2014-12-31at80632PM_zps39c04618.png

PHP:
struct ascii_art{
       char tag; // tag của ascii_art có giá trị bằng 'I'
       int id;
       void (*filter)(char* content);
       char content[247];
};
Cấu trúc của một comment được phân bố như sau:
ScreenShot2014-12-31at80645PM_zps60860a85.png

PHP:
struct comment{
     char tag; // tag có giá trị bằng '7'
     int id;
     char content[251];
}

Xem xét đoạn mã sau:
ScreenShot2014-12-31at80625PM_zps3f35d054.png

Sau khi tạo 1 block comment, chương trình đọc vào vùng content với giá trị là 252 bytes (lố 1 byte) dựa vào đây mình sẽ khai thác được lỗi, ghi đè giá trị tag của block kế, biến block comment -> block ascii art, từ đó fake được filterfunc.
ScreenShot2014-12-31at80916PM_zps2f85890b.png

ScreenShot2014-12-31at81442PM_zpse2e136b0.png


đoạn mã trên dùng để trigger bug khi biến block comment -> block ascii art
Các khai thác lỗi:
PHP:
Tạo 1 block ascii art, tạo 2 block comment cho block ascii 1 , tạo block ascii art 2
+----------------------+
|  Ascii Block 1       |
+----------------------+
|  comment 1(1)        |
+----------------------+
|  comment 2(1)        |
+----------------------+
|  Ascii Block 2       |
+----------------------+
Xóa hết comment block 1, tạo lại comment cho block 1 và block 2, dùng comment block 2, overwrite giá trị tag của Ascii Block 2 thành comment, dùng comment block 1 để overwrite comment block 2 thì Ascii Block 2
+----------------------+
|  Ascii Block 1       |
+----------------------+
|  comment 1(1)        |
+----------------------+
|  comment 1(2)        |
+----------------------+
|  Ascii Block 2       |
+----------------------+
Trạng thái cần đạt được
+--------------------------------+
|  Ascii Block 1                 |
+--------------------------------+
|  comment 1(1)                  |
+--------------------------------+
|  comment 2(1),block 2 fake     |
+--------------------------------+
|  Ascii Block 2, comment 2 fake |
+--------------------------------+


Trigger bug và ta có
ScreenShot2014-12-31at81310PM_zps714162e4.png


Do mình có thể control được filter_func và content, cho nên mình sẽ dùng printf và fmt để leak được địa chỉ __libc_main_start ở trên stack, từ đó tính được địa chỉ của hàm system
 
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
Re: [writeup] 31c3ctf mynx

Tesla 123 cố gắng viết những bài như thế này thật nhiều nữa hơn nhé :D
 
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
Re: [writeup] 31c3ctf mynx

các anh cho em hỏi cái trên là gì thế ạ.và muốn hiểu được thì phải tu luyện binh pháp gì vậy mấy anhem cảm ơn ạ :)
 
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
Re: [writeup] 31c3ctf mynx

Exploitation : khai thác lỗi phần mềm, để bắt đầu thì bạn nên học lập trình, nắm thật vững C và chơi cái chall này io.smashthestack.org
 
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
Bên trên