Thực hành DVWA: khai thác lổ hổng Command Injection, level security low

Chào các bạn, hôm nay chúng ta cùng đến với bài thực hành về an toàn thông tin ứng dụng mức cơ bản với nội dung “Thực hành DVWA: khai thác lổ hổng Command Injection mức độ thấp (level security Low)“.

1. DVWA là gì ? Command Injection là gì ?

1.1 DVWA là gì ?

DVWA là một bộ mã nguồn ứng dụng PHP/MYSQL có chứa các tập hợp phân mục lỗ hổng ở tầng ứng dụng web. Giúp cho các bạn đang tìm hiểu về bảo mật có thể tham khảo và khai thác lỗ hổng đang tồn tại ở DVWA nhằm hiểu thêm về các nguy cơ rủi ro bảo mật trong code PHP.

Nếu bạn chưa biết cách cài đặt mã nguồn DVWA để thực hành khai thác lổ hổng bảo mật cơ bản thì có thể tham khảo bài viết : Hướng dẫn cài đặt mã nguồn DVWA .

1.2 Command Injection là gì ?

Command Injection xuất hiện ở các nội dung website, có cung cấp chức năng cụ thể thực thi các câu lệnh hệ thống nhằm mục đích phục vụ người dùng đầu cuối. Ví dụ cho phép ping 1 địa chỉ website để xem site đó có uptime không ?!

1.3 Tấn công khai thác ‘Command Injection’ là gì ?

Ở phần này mình sẽ chỉ giải thích cơ bản về tấn công ‘Command Injection‘ là khả năng chèn nội dung câu lệnh hệ thống (inject) vào phần input ứng dụng và thực thi được các câu lệnh đó ngoài phạm vi kiểm soát của ứng dụng từ kẻ xấu tấn công lỗ hổng ‘Command Injection‘ trên ứng dụng như web.

Trong phần thực hành hôm nay với mã nguồn DVWA Command Injection mức độ Level Low , mức thấp nhất, chúng ta sẽ có thể thử khai thác thông qua câu lệnh hệ thống Linux (system command shell) và thực thi chúng như một user hợp lệ ngay trên hệ thống. Lổ hổng ‘Command Injection’ xảy ra đa phần đều do cấu trúc kiểm tra dữ liệu input đầu vào của code mã nguồn không chặt chẽ dẫn đến lổ hỗng phát sinh.

1.4 ‘Command Injection Harvesting’ là gì ?

Hoạt động ‘Command Injection Harvesting‘ là khi mà các câu lệnh hệ thống được kẻ xấu thực thi thành công trên ứng dụng bất kì và cung cấp kết quả trả về thông tin dữ liệu hệ thống, dữ liệu cần bảo mật như cấu hình dịch vụ, username, thư mục,…

Lưu ý trong phần thực hành ‘Command Injection DVWA – Level Low’
– Set mức độ Security level là : Low
– Hệ thống web server chứa mã nguồn DVWA là : LINUX . Nên các phương pháp khai thác thực thi lệnh sẽ tương ứng là lệnh trên LINUX, nếu web server là IIS hoặc host trên Windows thì sẽ khác.
– Các hoạt động thực hành trong bài ‘Command Injection‘ nhằm mục đích thực hành pentest bảo mật ứng dụng cơ bản, không phục vụ cho các mục đích xấu khác và website ‘https://cuongquach.com‘ không chịu trách nhiệm cho các hoạt động bất hợp pháp của người dùng.
– Nếu bạn chưa biết cách cài đặt mã nguồn DVWA để thực hành hãy tham khảo bài viết sau.

2. Thực hành tấn công khai thác lỗi ‘Command Injection’ – level low

Đầu tiên bạn cần thiết lập mức độ level security là LOW để giúp mã nguồn lựa chọn đoạn source code phù hợp với cấp độ để bạn có thể thực hành khai thác lổ hổng Command Injection.

setup dvwa security level low 

2.1 Thao tác khai thác ‘Command Injection’

Bạn bấm vào phần ‘Command Injection‘, để thực hành nội dung kiểm tra lỗi bảo mật chèn lệnh thực thi trên form cho phép. Với tính năng được cho phép “Ping a device“, thì phần DVWA Command Injection cho phép bạn ping 1 địa chỉ IP từ hệ thống Linux đang chứa mã nguồn DVWA và in ra kết quả trên web. Ví dụ mình ping 8.8.8.8 (google) thì được trả về kết quả như sau.

Giờ thử dùng 1 câu lệnh đơn giản như xem thông tin user trên Linux nhập vào form xem có thực thi được không ? Kết quả là sẽ không hiện ra thông tin gì hết.

lệnh cat trên dvwa command injection 
Nhưng giờ bạn thử kết hợp với kí tự ‘;‘ để kết hợp 2 nội dung lại gồm địa chỉ IP input vào và câu lệnh thực thi trên Linux theo sau. Dấu ‘;‘ hoặc ‘&&‘ dùng để nói với OS Linux rằng ta sẽ thực hiện vài câu lệnh theo sau trên cùng 1 dòng. Chúng ta sẽ dùng lệnh ‘cat /etc/passwd‘ để xem nội dung file chứa thông tin user trên Linux.

Input form :

8.8.8.8 ; cat /etc/passwd

hoặc

8.8.8.8 && cat /etc/passwd

kết hợp lệnh trên dvwa command injection

Kết quả là hiển thị ra nội dung file ‘/etc/passwd‘.

 
2.2  Nguyên nhân lổ hổng bị khai thác

DVWA cho phép bạn kiểm tra mã nguồn từng mục nội dung thực hành để xem lý do tại sao lại phát sinh lỗ hổng trên. Vậy thì chúng ta sẽ cùng xem xét lý do lỗ hổng ‘Command Injection‘ level security low lại để lộ.

set dvwa command injection security low 
Mẫu code trên như sau
:

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}

?>

 
Nếu bạn để ý 2 dòng ‘shell_exec‘ trong code PHP, tương ứng từng hành vi xử lý đối với OS Windows hoặc Linux được sử dụng.

shell_exec được định nghĩa như sau (PHP) : giúp thực thi câu lệnh được truyền vào thông qua chương trình shell dưới hệ thống và trả về output dưới dạng string.

shell_exec — Execute command via shell and return the complete output as a string

 
Với OS ‘Unix‘ thì bạn hoàn toàn có thể nhập input vào biến $target với nội dung ‘&&‘ hoặc ‘;‘ để hàm ‘shell_exec‘ chạy thực thi cả 2 câu lệnh cùng lúc luôn. Lúc này phần hàm shell_exec sẽ chạy như sau trên OS.

# ping 8.8.8.8 ; cat /etc/passwd

 
Thế tại sao lúc đầu đẩy code xem file /etc/passwd trực tiếp không được ? Lý do là cú pháp câu lệnh khi ghép lại để chạy dưới OS không phù hợp về cú pháp như sau.

# ping cat /etc/passwd

Với việc cho phép bạn thực thi các câu lệnh trên OS Linux hay Windows kèm theo thì ta hoàn toàn có thể làm những chuyện khác ngoài chuyện xem thông tin /etc/passwd . Còn làm được những gì và tới đâu thông qua lỗ hổng ‘Command Injection‘ thì nó phụ thuộc vào khả năng của bạn rồi. Như vậy bạn đã hoàn thành bài thực hành lỗ hổng ‘Command Injection‘.

Như vậy tóm gọn ở phần thực hành mức độ level LOW này bạn chỉ cần 2 cú pháp cơ bản giúp chạy các lệnh trên cùng 1 dòng trên Linux là :

  • Kí tự  ‘ ;
  • Kí tự  ‘ &&

Ở kì tới chúng ta sẽ đến với các mức độ level security kế tiếp là : MEDIUMHIGH , của DVWA COMMAND INJECTION.

3. Tham khảo tư liệu

Nguồn tham khảo lổ hổng bảo mật ‘Command Injection‘:
https://www.scribd.com/document/2530476/Php-Endangers-Remote-Code-Execution
https://ss64.com/nt/
https://www.owasp.org/index.php/Command_Injection

Previous articleSo sánh giữa Unetlab và GNS3, chương trình giả lập thiết bị mạng
Next articleHội thảo chuyên đề “Bảo mật điện toán đám mây” (HCM-6/5/2017)
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !