[WebSec] Level 25
Information Gathering
Đầu tiên vẫn thử các payloads về SQLi, về XSS, … Tuy nhiên vẫn không có lỗi gì xuất hiện.
View-source challenge thì mình cần chú ý đến 2 đoạn code PHP trong đó.
Source code 1
1 | |
Với đoạn code 1 trên thì check xem trong URL của chúng có tồn tại parameter page không. Nếu không có, thì sẽ Redirect sang trang có page=main (trang chủ của challenge).
Source code 2
1 | |
Với đoạn code 2 ở trên, chúng ta có nhiều vấn đề để phân tích hơn.
Dòng code thứ 2, hàm parse_url() có chức năng phân tích các thành phân của URL ra. Sau đó sẽ gán vào biến $query.
Hàm parse_url() hoạt động như sau:
1 | |
Sau khi vào vòng for, nếu như giá trị trong $query lúc này chính kết quả đầu ra của hàm parse_url() mà khác false thì chương trình sẽ die.
Vậy, làm sao để chương trình không die?
Exploit
Để chương trình in ra được flag, thì phải bypass qua vòng for.
Search Google: “parse_url return false in php”
Sau khi tham khảo link trên kết hợp việc debug, thì mình phải cho cái cấu trúc của các param sau khi qua hàm parse_url kết quả bị sai.
Ví dụ:
http://example.com///thu-muc/file.php?...
->///sẽ làm cho parse_url() hiểu là host. Nên sẽ bị sai.http://example.com/thu-muc/file.php?cmd=ls&a=1.1.1.1:39
->&acó giá trị là host:port, cũng sẽ làm cho parse_url() hiểu sai.
Mục đích của mình lấy flag ở file flag.txt. Vì sau thi include page vào thì chương trình sẽ tự gắn đuôi txt cho mình.
Việc còn lại chỉ lấy flag thôi.
