[SVATTT 2019 Qual] eznote + curl-me 1

Nghĩa Đào Trọng
Nov 5 · 3 min read
  1. EzNote (100pts)

Luồng thực thi của chương trình .

  • Tạo ra 10 node.
  • Yêu cầu nhập secret key
  • Lựa chọn 2 option đọc hoặc ghi vào node.
  • Thoát.

#Bug:

Khi kiểm tra index của node , dù index không thỏa mãn nhưng hàm không trả về mà vẫn xử lý bước tiếp theo dẫn tới biến buffer chưa được khởi tạo.

#Tính toán stack

3 hàm read_int(), read_note(), write_note() do cùng được gọi từ hàm main , cùng calling convention , cùng k có tham số nên có cùng stack base (rbp) .

Hàm read_int() đọc 0x200 byte vào buffer từ $rbp-0x200 tới $rbp

Hàm read_note() lấy 8 byte cho buffer từ $rbp-8 tới $rbp

Hàm write_note() lấy 8 byte cho buffer từ $rbp-8 tới $rbp

=> Ta có thể điều khiển địa chỉ buffer chưa được khởi tạo bằng hàm read_int()

#Minimal POC

#RCE.

Mình chọn ghi đè địa chỉ hàm atoi thành hàm system trong GLOBAL_OFFSET_TABLE và gọi shell bằng cách read_int(“/bin/sh\x00”)

2. Curl-me 1

Cá nhân mình thấy bài này rất hay, qua nó mình học được rất nhiều thứ của PHP khi làm,debug.

Bài cho ta source-code:

Để trực tiếp bypass qua đoạn check, ta cần một chuỗi $url sao cho sau khi parse_url thì sẽ không chứa xâu flag trong $path. Đồng thời curl_exec $url phải trả về flag/

Sau khi mất 1 tiếng t rao đổi với teamate về chức năng các hàm được sử dụng trong code, không ai có thể đưa ra chính xác các hàm như urldecode,parse_url xử lý những cái gì và hoạt động thế nào và khiến mình phải lôi source của php ra đọc.

https://github.com/php/php-src

Check1 : in_array($parse[“scheme”], array(“file”, “gopher”))

Check này qua bằng cách sử dụng 1 schema là File.

Bạn có thể kiểm chứng trong source code.c của hàm parse_url không có những hàm nào kiểu như tolower hay đại loại vậy để xử lý schema.

Check2: preg_match(“/flag/i”, $path)

Để qua check này mình kiểm tra nhánh parse_path trong hàm parse_url

Nếu có ký tự # trong url thì nó sẽ parse sang phần fragment.

Từ đó mình nảy ra ý tưởng, mình sẽ làm cho thằng curl nghĩ # là 1 folder và sử dụng path traversal để đọc được file mình muốn.

Và payload cuối cùng như các bạn đã biết.

File:///#/../flag1

    Nghĩa Đào Trọng

    Written by

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade