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.

Ở index.php có chỗ để trigger, rất rõ ràng:

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ố:

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:

File `communicate.php` có một phần bị lỗi SSRF, có thể dùng để trigger để đổi tên:

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à:

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.

3. POC


