[ISITDTU CTF Final 2019] Web Write-ups

Lâu rồi cũng không viết write-ups hay blog, dạo gần đây mình cũng làm về web nhiều hơn crypto như trước, nên lần này mình sẽ write-ups về web. Cá nhân mình cảm thấy 3 bài web đợt ISITDTU Final này idea khá là hay và mình quyết định sẽ write-ups để chia sẻ solution cho mọi người cùng tham khảo. Cả 3 bài mình đều xin tác giả và làm lại sau giải, sau khoảng 1 tháng đợi các team đi thi write-ups nhưng mãi chẳng thấy nên thôi mình xin phép trình bày solution của mình luôn.

1. Multiweb

  1. Tóm tắt
  • Ở web 2 sẽ load ra những ảnh từ static và chuyển thành tag <img> qua 1 class như sau
Class Map
save message
Class UserControl
define xor stream
  • Class Map lại có 1 method __destruct cho phép đọc content 1 file tùy ý (có check header xem phải là 1 image qua hàm exif_imagetype )
  • trigger phar unserialize qua bằng cách đọc file .txt (chức năng thứ 3 của web 2)
https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf

2. rg2

  1. Tóm tắt
  • /initialize: cấp cho chúng ta 1 JWT với identity là “guest”
  • /flag: để có thể POST được vào route này thì cần JWT với identity “admin”, đồng thời cùng cần có các claims là username và password của admin
  • password admin
  • bypass filter SSRF
config.py
  • input không chứ “127.”, “.0”, “.1”
  • nếu input chỉ chứa [a-zA-Z] và gethostbyname(input) == “127.0.0.1” thì fail
  • tác giả cũng code async để phòng trường hợp Race Condition
  • nếu mà a fail thì sẽ không thực hiện b 😐

3. Laravel (Mình cũng không nhớ bài này tên gì 😐)

Source code: https://drive.google.com/file/d/10KfVraZtTQw0BDboWN_-_B5T13Pu_VEN/view?usp=sharing

  • Từ đó tìm tiếp các method liên quan để cuối cùng nhảy đến các hàm như call_user_func, call_user_func_array hoặc dẫn thẳng tới các hàm có thể ghi file hoặc gọi được command
  • mình sẽ tham khảo php ggc thì thấy đa số các gadget đều đi từ magic method __destruct của class Illuminate\Broadcasting\PendingBroadcast
  • Ở đây sẽ có 2 hướng đi, thứ nhất là tìm trong source có class nào có method dispatch có thể lợi dụng được hay không (write-ups cho hướng thứ 1: http://m4p1e.com/web/20181224.html) và hướng thứ 2 sẽ trigger magic method __call ( https://www.php.net/manual/en/language.oop5.overloading.php#object.call)
HomeController
GenPayloadController
  • và có thêm symfony
'<?php return ' + 'aaa' (len % 4 = 0) + base_encode(payload) + 'aaa;' (len % 4 = 0)
$this->events->dispatch($this->event);

4. Kết

Cảm ơn BTC và 2 tác giả (Đình BảoSon Tran) đã mang lại 3 bài web hay và nhiều kiến thức cho bản thân mình. Một điều mình cảm nhận gần đây là đa số tài liệu + blog mình tìm hiểu đa số xuất phát từ Trung Quốc hay Đài Loan và đó là một nguồn kiến thức bổ ích.

Nub-boi