Trong bài viết này, chúng ta sẽ khám phá thử thách OWASP Top 10 trên TryHackMe. Qua thử thách này, bạn còn có thể tìm hiểu và khai thác từng lỗ hổng trong số 10 lỗ hổng hàng đầu của OWASP. Đó là 10 rủi ro bảo mật web quan trọng nhất, đọc bài viết này để hiểu thêm.
Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Do thử thách này hơi nhiều nên mình sẽ chia làm 3 phần để bạn tiện theo dõi và cũng đọc cho đỡ chán hơn nhé.
Mình sẽ đi thẳng vào phần thực hành và bỏ qua các kiến thức kỹ thuật. Nếu bạn muốn tìm hiểu kiến thức hay cách hoạt động của lỗ hổng đó thì có thể vào phòng để đọc nha. Và lưu ý, những trang web mình truy cập trong bài viết này là máy chủ ảo của Tryhackme.
TryHackMe: Thử thách OWASP Top 10 Phần 1
Nhiệm vụ 5: [Mức độ nghiêm trọng 1] Command Injection
Active Command Injection là gì?
Tiêm lệnh mù (Blind command injection) xảy ra khi lệnh hệ thống được thực hiện cho máy chủ không trả lại phản hồi cho người dùng trong tài liệu HTML. Còn ACI (Active command injection) sẽ trả lại phản hồi cho người dùng. Nó có thể được hiển thị thông qua một số phần tử HTML.
Xem script sau: EvilCorp bắt đầu phát triển trên nền tảng web nhưng đã vô tình tiếp xúc với Internet. Nó chưa hoàn thành nhưng vẫn chứa lỗ hổng chèn lệnh. Nhưng lần này, phản hồi từ lệnh gọi hệ thống có thể được nhìn thấy trên trang web.
Đọc code mẫu từ evilhell.php và xem nó đang làm gì và lý do tại sao nó lại bị ACI. Mình sẽ để code mẫu ở dưới.
EvilShell (evilshell.php)
Phân tích chương trình:
- Kiểm tra xem tham số “commandString” đã được khai báo chưa.
- Nếu đúng như vậy, thì biến $command_string lấy những gì đã được chuyển vào trường đầu vào.
- Sau đó, chương trình đi vào một khối lệnh try để thực thi hàm passthru($command_string). Bạn có thể đọc tài liệu về hàm passthru() trên trang web của PHP, nhưng nói chung, nó sẽ thực thi những gì được nhập vào trường đầu vào, sau đó chuyển đầu ra trực tiếp trở lại trình duyệt.
- Nếu không thành công, nó sẽ báo lỗi. Nói chung, thì nó cũng không xuất ra cái gì đâu vì bạn không thể xuất ra stderr.
Các cách phát hiện Active Command Injection
ACI xảy ra khi bạn có thể thấy phản hồi từ lệnh gọi của hệ thống (system call). Trong đoạn code trên, hàm passthru() chuyển phản hồi trực tiếp đến tài liệu để bạn có thể thấy. Lệnh này sẽ giúp bạn dễ dàng xem và phân tích các lỗi của hệ thống.
Các lệnh có thể thử
Linux
- whoami
- id
- ifconfig/ip addr
- uname -a
- ps -ef
Windows
- whoami
- ver
- ipconfig
- tasklist
- nestat -an
Để trả lời những câu hỏi bên dưới thì bạn cần điều hướng đến http://10.10.147.50/evilshell.php.
# 1 Tập tin văn bản lạ nào nằm trong thư mục root của trang web?
Chúng ta có thể truy cập evilhell.php và thử lệnh whoami.
Thử tiếp lệnh uname -a
.
Tiếp tục thử lệnh ls
.
Các bạn thấy gì không? Mình tìm được file drpepper.txt.
#2 Có bao nhiêu người dùng không phải root/non-service/non-daemon?
Bạn có thể thử lệnh cat /etc/passwd
Không tìm được gì cả.
#3 Ứng dụng này đang chạy với tư cách người dùng nào?
Chúng tôi đã tìm thấy nó ở tầng trên, nhưng chúng ta hãy viết lại lệnh whoami.
Đáp án: www-data
#4 Shell của người dùng?
Chúng ta có thể tìm thấy nó bằng lệnh cat /etc/passwd.
Đáp án: usr/sbin/nologin
#5 Phiên bản Ubuntu đang chạy?
Như ảnh trên, các bạn chỉ cần nhập lệnh lsb_release -a
để biết phiên bản Ubuntu ứng dụng đang chạy.
Đáp án: 18.04.4
#6 Xem MOTD
Chỉ cần tìm kiếm một chút trên internet là bạn sẽ biết lệnh hiển thị MOTD. MOTD (Message Of The Day) là đoạn tin nhắn khi bạn khởi động một ứng dụng trong terminal.


Nhiệm vụ 7: [Mức độ nghiêm trọng 2] Broken Authentication
Đối với lỗ hổng này, chúng ta sẽ nghiên cứu một lỗ hổng logic trong cơ chế xác thực.
Các nhà phát triển thường quên lọc đầu vào (tên người dùng và mật khẩu) do người dùng cung cấp trong ứng dụng của họ, điều này có thể khiến ứng dụng dễ bị tấn công SQL injection. Và chúng ta sẽ tập trung vào một lỗ hổng bảo mật xảy ra do lỗi của nhà phát triển nhưng rất dễ bị khai thác – đăng ký lại người dùng hiện có.
Mình để một khoảng trắng ở trước từ darren.
Mình đang đăng nhập với tư cách là thành viên. Thành công rồi nè!
Chúng ta đã tìm ra được flag.
Đáp án: fe86079416a21a3c99937fea8874b667
#2 Bây giờ hãy thử thực hiện thủ thuật tương tự và xem liệu bạn có thể đăng nhập bằng tài khoản arthur hay không.
# 3 Flag mà bạn tìm thấy trong tài khoản của arthur là gì?
Đáp án: d9ac0f7db4fda460ac3edeb75d75e16e
Hoàn thành 2 lỗi phổ biến trong OWASP 10 là Broken Authentication và Command Injection.
Phần tiếp theo vẫn sẽ là khai thác các lỗi khác trong OWASP 10 nữa nhé.