Description
Command Injection Challenge
Find the contents of the flag located in /home/tryhackme/flag.txt. You can use a variety of payloads to achieve this – I recommend trying multiple.
Approach
Form có dạng như sau:
Nhập vào 127.0.0.1
thì kết quả trả về là:
Có thể thấy, server đã thực hiện gọi lệnh ping với 4 packets.
Tiến hành thử các payloads có sẵn, có thể tham khảo:
- 🎯 Command Injection Payload List (github.com)
- Mastering Payloads for Web Application Security: XSS, LFI, RCE, and SQL Injection | by Security Lit Limited | Apr, 2023 | InfoSec Write-ups (infosecwriteups.com)
Thử truyền vào ;whoami
thì thu được:
www-data
Ban đầu tưởng đây không phải là username nên bỏ qua.
Tiếp tục thử ;ls
thì thu được:
css file.txt img index.php js test.php
Xác định được có thể thực hiện command injection, thử thêm lệnh ;cat index.php
để đảm bảo là ta có thể đọc dữ liệu của tập tin.
Thu được giao diện của form tương tự như hình ảnh ban đầu cũng như là dòng code sau đây:
"; $result = passthru("/bin/ping -c 4 ".$_GET["address"]); } ?>
Đúng như dự đoán ban đầu, chương trình thực hiện gọi lệnh ping với 4 gói tin.
Đến lúc này, ta cần xác định đường dẫn hiện tại thông qua payload ;pwd
, thu được:
/var/www/html
Yêu cầu đề bài là đọc file /home/tryhackme/flag.txt
. Vì thế ta cần truy cập vào thư mục /home/tryhackme
và dùng lệnh cat
để đọc file flag.txt
.
Payload như sau:
;/home/tryhackme;cat flag.txt
Nội dung của file cũng chính là flag.
Từ đây, ta cũng có thể kết luận được luôn chuỗi www-data
ban đầu chính là username cần tìm.
Flag
What user is this application running as?
www-data
What are the contents of the flag located in /home/tryhackme/flag.txt?
THM{COMMAND_INJECTION_COMPLETE}