---
# System prepended metadata

title: HTB - WEB - Interstellar

---

Bài này bao gồm hai lỗi là SQLi và SSRF. Cùng phân tích nhé.

1. Phân tích:
Procedure searchUser() bị dính lỗi SQL Injection khi biến name được nhúng trực tiếp vào chuỗi truy vấn.
![image](https://hackmd.io/_uploads/r1-_I665gx.png)
Ở index.php có chỗ để trigger, rất rõ ràng:
![image](https://hackmd.io/_uploads/HJQEw6pcge.png)
Tuy nhiên, `$name` lại được nhận từ `$SESSION['name']`, nhưng mình lại không thể injection trực tiếp bởi vì ở phần đăng ký chỉ cho phép `$name` là chữ và số:
![image](https://hackmd.io/_uploads/BJT5v66cxl.png)
Nhưng lại có một chức năng đổi tên, tuy nhiên lại chỉ có local mới có thể trigger được:
![image](https://hackmd.io/_uploads/Hk0y_T6clx.png)
File `communicate.php` có một phần bị lỗi SSRF, có thể dùng để trigger để đổi tên:
![image](https://hackmd.io/_uploads/H1iH_665ge.png)
2. Khai thác
Đầu tiên, ở `communicate.php` chúng ta có thể thấy url được parse từ hàm parse_url(), chúng ta có thể khai thác bằng payload kiểu
`1232://user:pass@127.0.0.1:80|motherland.com:80/` hoặc `1232://user:pass@127.0.0.1:80;motherland.com:80/`
Khi parse thì nó sẽ là:
![image](https://hackmd.io/_uploads/B1RiF6T5ll.png)
Phù hợp để bypass qua phần if phía dưới. Sau khi đã qua được SSRF, mình sẽ trigger SQL Injection.
Ở đây, flag nằm trong file random tên, nên mình cần RCE. Cách tốt nhất là ghi nội dung file bằng hàm INTO OUTFILE.
![image](https://hackmd.io/_uploads/S1gfq66cxx.png)
3. POC
![image](https://hackmd.io/_uploads/S1O8cpa9xl.png)

![image](https://hackmd.io/_uploads/rJ8wc669xl.png)

![image](https://hackmd.io/_uploads/S1-o9aTcxg.png)
