[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
->&a
có 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.