Halo, lại là Pr1vacy đây.
Hôm nay tui sẽ viết write-up cho 1 challenge tui được bạn tui gửi và cũng đã được hint 1 chút từ người giỏi hơn. Tui sẽ cố gắng viết writeup nhiều hơn để đánh dấu chặng đường tui phát triển trong ngành này nói chung. Anyway, back to the topic thì challenge hôm nay có github project ở đây : https://github.com/Kaligo/hello-anya
Tui sẽ lướt nhanh nha và sẽ focus vào cái nào cái challenge này muốn hướng tới
# Hello Anya
- Khi vào bài này thì giao diện nó như thế này, thì khi thấy reg và login thì trong đầu tui nảy số liền là sẽ cố gắng sql injection để lấy tài khoản admin nhma không phải

- Khi đọc source code thì ta thấy. Nếu mà account được đăng nhập với username là anya thì sẽ set is_anya = true
- Tui là nghĩ tới việc sẽ sql injection làm sao để đăng nhập vào với username là anya mà không được.

- khi tui lướt qua file pages_controller.rb thì tui có thấy có gsub ../ thành "" . thì tui cũng có nghĩ tới path traversal nhưng mà tui không hiểu phải làm sao vì tui nghĩ là nó sẽ lấy cái path tới image và encode base64 rồi thì làm sao mà path traversal được

## Bí tắc time
- Đến đây thì tui cũng hơi đuối vì cũng khác nhiều deadline hiện tại nên đã gạt challenge này sang một bên để ưu tiên deadline trước. Nhưng mà :) tui bị bứt rứt nếu không giải quyết được nó.
- Tui cũng có 1 bạn cũng làm challlenge này nên tui có co-work với họ để làm chung cho có động lực thì có 1 đại thần đã làm ra thì tui có hỏi họ thì mới biết challenge này dùng path traversal để làm.
- God how???
## reading code time
- Đến đây thì tui đọc lại đoạn code trong pages_controller.rb lần nữa thì tui phát hiện ra vấn đề gòi :))

- Nó sẽ nhận tham số img và open file đó nếu không thì nó sẽ lấy anya_path + anya.png
- Ayda, problem solved, exploit nào
- Ok thì đầu tiên để xác nhận lại thì tui sẽ fuzz file etc/passwd để xác định cái path của nó thì sau truyền payload thì ta có được file /etc/passwd dưới dạng base64 như sau


- Khi decode ra ta có được thông tin file /etc/passwd

- Tưởng đời như mơ khi toi tưởng rằng /anya/very_secured_secret/secret_file sẽ là đích đến của tôi nhưng mà không phải như vậy

- Kết quả tui nhận được chỉ là 1 file với nội dung trống

- Khi đọc lại source code tui có thấy 1 file có đoạn code dùng Rails.root.join nó sẽ join cái Rails.root với một trong những đường dẫn trong array đó và chọn ngẫu nhiên 1 sample + anya_file_name

- Ví dụ ha nó chọn db thì path nó sẽ là Rails.root + db + anya_file_name vậy chúng ta sẽ brute force xem nơi nào mới thật sự là nơi chứa file flag của chúng ta. Thì khi đến app/sus ta có được flag


- Khi decode base64 ra ta có được bản được decode là 19bedbe681c8082b3a50a2ac4466e662e358f4b144400

- Theo đề thì 3 chữ cái đầu là 19b vậy ta đã có được flag của challenge này rồi.
