[SVATTT2017 Final] The last bullet

Trước khi đi vào nội dung xin mời mọi người thưởng thức 1 bài hát đã ám ảnh mình suốt cả cuộc thi
(Mình cá là không chỉ có mỗi mình mình bị ám ảnh bởi bài hát này thôi đâu)


Ok nghe xong rồi thì tới phần nội dung chính thôi

THE LAST BULLET (Author: g4mm4)


Title của trang web là StarTrek Local System:1337 => mình nghĩ là cần lấy cái gì đó ở 127.0.0.1:1337, tuy nhiên chỉ như thế thì mọi thứ vẫn khá mù mờ (note lại để sau vậy).

Sau khi fuzzing các kiểu ta có file robots.txt

Đề cho cái gì thì ta cứ mò theo cái đó thôi => kiếm được file backup (chứa source code).

Từ source code, ta rút ra một số điểm như sau:
  • Có 3 tính năng chính: insert, delete, select
  • Sau khi thực hiện insert thì delete cũng được gọi ngay sau đó
  • Hàm file_get_contents được gọi khi thực hiện select
  • Các tham số truyền vào đều được xử lý bằng hàm mysqli_real_escape_string
  • URL được thêm vào khi thực hiện insert có prefix là http://tradahacking.vn và suffix là /phiasaumotcogai.html. Ngoài ra URL còn bị filter các kí tự #, ?, &
Do khi thực hiện insert xong thì tính năng delete mới được gọi nên ta hoàn toàn có thể thực hiện Race Condition Attack để thực hiện hàm file_get_contents phía server.

Hiểu cơ bản về Race Condition Attack như sau:
  • Khi server thực hiện xong insert thì URL sẽ tồn tại ở trong database
  • Ở quãng thời gian sau khi server thực hiện xong thao tác insert và trước khi thực hiện delete. Nếu như ta thực hiện select trong khoảng thời gian này. Thì lúc này URL ta thêm vào vẫn còn tồn tại ở database và server lấy URL đó ra để truyền vào hàm file_get_contents.
  • Như vậy ta có thể tấn công Server Side Requets Forgery thông qua Race Condition Attack.
Mình sử dụng đoạn code sau để tấn công:

Bây giờ ta cần server đọc nội dung của http://127.0.0.1:1337/ rồi hiển thị kết quả trả về. Server đã thêm prefix và suffix vào tham số path nên ta cần bypass được 2 thành phần này để có thể request đến URL ta muốn.

Cấu trúc của một URL như sau (lấy trên wikipedia về):
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
Từ cấu trúc trên ta có thể bypass phần prefix bằng cách cho tradahacking.vn làm user và thêm giá trị host, port. Ví dụ ta cho path có giá trị là @yoursite.tld thì URL sẽ là http://tradahacking.vn@yoursite.tld/phiasaumotcogai.html. Khi đó server sẽ request đến http://yoursite.tld/phiasaumotcogai.html.

Vậy là đã bypass xong prefix, còn có phần suffix nữa. Phần suffix này ta có thể dùng 2 cách sau để bypass:

- Cách 1: MySQL Truncation Attack

Ta thêm thật nhiều khoảng trắng vào sau tham số path để /phiasaumotcogai.html sẽ bị loại bỏ trong quá trình insert vào database.

PoC:


- Cách 2: Handjob (mình tự đặt tên)

Khi server request đến http://yoursite.tld/index.php/phiasaumotcogai.html thì index.php vẫn sẽ được hiện. Như vậy ta chỉ cần dựng 1 server php rồi cho index.php redirect đến http://127.0.0.1:1337/ là ok.

PoC:





=> FLAG: svattt{Th3_l4st_bullet_4_th3_l4st_En3my_!!!!!!!!}

Cảm ơn anh g4mm4 đã ra 1 challenge rất thú vị.
Mặc dù chỉ làm được mỗi một bài nhưng mình cũng rất vui vì được giao lưu với các bạn ở các trường khác. Đặc biệt hơn là còn được chụp ảnh chung với anh g4mm4 và anh superkhung nữa.

Hy vọng sau cuộc thi này team mình sẽ rút ra được nhiều kinh nghiệm hơn, đỡ ăn hành như mọi khi nữa @@



Nhận xét

Bài đăng phổ biến từ blog này

[SVATTT2017] Web 300 - Whichgirls

[SVATTT2017] Web 100 - Tên là gì ấy chả nhớ?