Tổng quan về DotDotPwn
Dotdotpwn là gì?
Các thư mục trong ứng dụng web chứa thông tin đa dạng về chức năng của trang web, trong đó có những thư mục nhạy cảm như /etc/passwd, chứa thông tin quan trọng về máy chủ Linux Những thư mục này có thể trở thành mục tiêu cho tấn công Directory Traversal Việc kiểm tra các thư mục này là thách thức lớn đối với các tester, do đó, công cụ tự động DotDotPwn đã được phát triển để hỗ trợ trong việc này.
DotDotPwn có một số module như:
- Payload (Không phụ thuộc giao thức)
Hình 1: Kiến trúc của DotDotPwn
Lịch sử hình thành, quá trình phát triển của Dotdotpwn
DotDotPwn phiên bản 1.0, ra mắt vào ngày 21 tháng 8 năm 2010, được phát triển bằng ngôn ngữ lập trình Perl bởi Christian Navarrete (chr1x) và Alejandro Hernandez H (nitr0us) Phần mềm này được nghiên cứu và phát triển tại CubilFelino Security Research Lab và Chatsubo [(in)Security Dark] Labs.
Ngoài 2 tác giả trên, còn có những đóng góp của những cá nhân khác về code cũng như ý tưởng để phần mềm có thể hoàn thiện và đầy đủ chức năng hơn, ví dụ như Eldar Marcussen (Wireghoul): hỗ trợ SSL tại module http-url và http, Roberto Salgado (LightOS) : ý tưởng về thuật toán Bisection để phát hiện độ sâu chính xác của lỗ hổng truyền tải thư mục khi nó đã được tìm thấy…
Hiện tại phiên bản mới nhất của DotDotPwn là 3.0.2, ra mắt ngày 10 tháng
Khái quát về Tấn công Directory Traversal
3.1 Tấn công Directory Traversal là gì?
Kiểm soát truy cập nội dung trang web là yếu tố quan trọng trong việc duy trì bảo mật cho máy chủ Một trong những mối đe dọa lớn là tấn công Directory Traversal, cho phép tin tặc truy cập và đọc bất kỳ file nào trên server đang chạy ứng dụng web.
Trên server, việc phân quyền và sở hữu đối với các file và folder là rất quan trọng Quản trị viên sẽ sử dụng Access Control List (ACL) để xác định quyền truy cập của người dùng đối với các file, bao gồm các quyền như đọc, ghi và thực thi Bên cạnh đó, Directory Traversal có thể cho phép truy cập vào các file hoặc folder mà thường bị hạn chế, gây ra rủi ro về bảo mật.
Loại tấn công này có khả năng tác động nghiêm trọng đến mã nguồn ứng dụng, làm lộ thông tin đăng nhập hệ thống back-end, dữ liệu quan trọng và các tệp điều hành nhạy cảm.
Kẻ tấn công có thể ghi vào các tệp trên máy chủ một cách tùy ý, dẫn đến việc sửa đổi dữ liệu và hành vi của ứng dụng, từ đó kiểm soát hoàn toàn máy chủ.
3.2 Directory Traversal có thể xuất hiện ở đâu?
Tương tự như OS Command Injection, Path Traversal có thể xảy ra ở bất kỳ đâu nếu không thực hiện các biện pháp bảo mật thích hợp, như lọc các ký tự mà người dùng nhập vào.
8 nhập vào và ràng buộc hoặc phân quyền rõ ràng cho file và folder được phép truy cập
3.3 Nguyên nhân gây ra Directory Traversal:
Vẫn sẽ có 2 nguyên nhân chủ yếu là do vô tình hoặc cố tình
Việc lập trình viên thiếu chủ động trong việc phân quyền thư mục và không kiểm soát chặt chẽ các ký tự đầu vào của người dùng có thể dẫn đến lỗ hổng bảo mật Điều này cho phép kẻ tấn công lợi dụng các dấu phân cách thư mục để truy cập và chỉnh sửa các tệp tin trên hệ thống.
Hoặc cố tình như build lab hoặc do có lý do sâu xa nào đó mà nhân viên cố tình làm vậy
3.4 Cơ chế hoạt động của tấn công Directory Traversal:
Hình thức tấn công Path Traversal không cần công cụ phức tạp, chỉ cần thao tác với các biến và sử dụng ký tự / để truy cập vào các tệp tin và thư mục, bao gồm cả mã nguồn và các tệp hệ thống Kẻ tấn công thường xác định khả năng khai thác lỗ hổng này bằng cách quan sát kết quả từ spider hoặc crawler Việc nhận diện khả năng khai thác Path Traversal là rất quan trọng trong bảo mật ứng dụng.
The results returned by a Spider or Crawler typically include URLs such as: http://sinhvienptit.com/getUser Profile.jsp?page=main.html, http://sinhvienptit.com/index.php?file=help, and http://sinhvienptit.com/main.cgi?home=index.htm.
Khi nhận được kết quả từ việc quét website với các URL tương tự, kẻ tấn công có thể sử dụng cú pháp “ /” để kiểm tra khả năng truy cập vào các file và thư mục khác.
Ví dụ http:// sinhvienptit.com/getUserProfile.jsp?page= / / /etc/passwd
Thông báo lỗi từ Website giúp kẻ tấn công xác định đường dẫn thực sự trên WebServer, cho phép họ sử dụng ký tự / (dot-dot-slash) để truy cập vào các tệp quan trọng của Website như cơ sở dữ liệu và tệp cấu hình.
Lưu ý rằng lỗ hổng Path Traversal không chỉ xuất hiện ở các biến trong phương thức GET, mà còn có thể xảy ra trong các phương thức POST và biến COOKIE.
Ví dụ: Một số website có thể sử dụng COOKIE để lưu template động cho Website như sau:
Cookie: ID= 2ddd73ef3620afc62cd6942c31bb6003:TEMPLATE=xpstyle Cookie: USER=member1234: PSTYLE=LongPTIT
Như vậy kẻ tấn công có thể thay đổi COOKIE để thực hiện Directory Traversal Attack như sau
Cookie: ID= 2ddd73ef3620afc62cd6942c31bb6003:TEMPLATE=xpstyle Cookie: USER=member1234: PSTYLE= / /etc/passwd
Trong quá trình khai thác kẻ tấn công có thể encode hoặc double encode, sử dụng
%00(null) để bypass filter mà Website đó áp dụng
Khi tiếp cận với một ứng dụng Web, việc kiểm tra nó có khả năng bị lỗi Path
Traversal có thể được thực hiện bằng hai loại:
Nếu kẻ tấn công không có mã nguồn, họ sẽ sử dụng spider hoặc crawler để kiểm tra website Từ các kết quả mà spider cung cấp, họ sẽ lần lượt kiểm tra các biến liên quan đến các phương thức GET, POST hoặc COOKIE có khả năng bị lỗi.
Nếu kẻ tấn công sở hữu mã nguồn, họ có thể dễ dàng xác định các hàm trong ngôn ngữ lập trình Web có khả năng gây ra lỗi Path Traversal.
PHP: include(), include_once(), require(), require_once(), fopen(), readfile(),
JSP/Servlet: java.io.File(), java.io.FileReader(),
ASP: include file, include virtual,
Lỗ hổng Directory Traversal đã được kẻ tấn công khai thác trong nhiều trường hợp Năm 2019, các nhà nghiên cứu phát hiện ra lỗ hổng nghiêm trọng trong Jira Service Desk của Atlassian, cho phép truy cập dễ dàng vào cơ sở dữ liệu và dữ liệu khách hàng Cũng trong năm đó, Adobe đã phát hành bản vá cho ba lỗi nghiêm trọng, trong đó có một lỗi có thể bị khai thác để tấn công Directory Traversal, cho phép kẻ tấn công vượt qua kiểm soát truy cập.
Một số cách ngăn chặn Directory Traversal:
Nên validate input của người dùng trước khi xử lý nó
Sử dụng whitelist cho những giá trị được cho phép
Hoặc tên file là những kí tự số,chữ không nên chứa những ký tự đặc biệt
11 Đảm bảo rằng đã cài đặt máy chủ web với phần mềm mới nhất, các bản vá có sẵn đã được áp dụng
Hình 2: Quy trình tấn côn Directory Traversal
Khái quát về fuzzing testing
Fuzzing là một kỹ thuật phát hiện lỗi phần mềm thông qua việc tự động hoặc bán tự động tạo ra dữ liệu đầu vào không hợp lệ và không mong đợi, như các giá trị vượt quá biên hoặc các giá trị đặc biệt Kỹ thuật này giúp theo dõi và ghi lại phản ứng của hệ thống khi xử lý các dữ liệu này, từ đó phát hiện ra các lỗi tiềm ẩn trong chương trình.
Fuzzing là một kỹ thuật kiểm thử hộp đen hiệu quả, không yêu cầu quyền truy cập vào mã nguồn, giúp phát hiện lỗi nhanh chóng trong quá trình xử lý của ứng dụng Các chương trình và framework được sử dụng để thực hiện fuzzing được gọi là Fuzzer, và việc xây dựng Fuzzer có thể được điều chỉnh tùy theo môi trường và ứng dụng cần kiểm tra.
Fuzzing, một kỹ thuật kiểm thử bảo mật, đã được biết đến từ lâu nhưng gần đây trở nên phổ biến khi các tổ chức nhận ra tầm quan trọng của việc tư duy như một hacker trong việc bảo vệ chống lại các cuộc tấn công mạng.
Kiểm tra fuzz là quy trình hiệu quả giúp các nhà phát triển khám phá lỗ hổng zero-day và nâng cao khả năng phục hồi an ninh mạng Bằng cách áp dụng fuzzing trong giai đoạn phát triển và kiểm thử chất lượng (QA), các nhà phát triển có thể tạo ra mã an toàn hơn.
DotDotPwn chính là một fuzzing tool để kiểm tra xem có lỗ hồng về
Directory Traversal hay không Ưu điểm và nhược điểm của kiểm thử Fuzzing: Ưu điểm:
- Kiểm thử fuzzing giúp tìm thấy những lỗi nghiêm trọng nhất về bảo mật hoặc khiếm khuyết
- Kết quả sử dụng kiểm thử Fuzzing hiệu quả hơn khi sử dụng các phương pháp kiểm thử khác
- Kiểm thử fuzzing cải thiện vấn đề về an ninh khi kiểm tra phần mềm
Fuzzing có thể phát hiện những lỗi nghiêm trọng trong phần mềm, thường là những lỗ hổng mà tin tặc khai thác, bao gồm các sự cố như crashes, rò rỉ bộ nhớ và unhandled exception.
- Những lỗi không được tìm thấy khi kiểm thử bị hạn chế về thời gian và nguồn lực thì cũng được kiểm thử fuzzing tìm ra
- Chỉ riêng kiểm thử Fuzzing thì không thể xử lý hết được các mối đe dọa an ninh tổng thể hoặc các lỗi
Kiểm thử Fuzzing thường không hiệu quả đối với các lỗi không gây treo chương trình, như virus, worm máy tính hay Trojan Phương pháp này chỉ phát huy tác dụng trong một số tình huống cụ thể.
- Fuzzing không cung cấp nhiều kiến thức về hoạt động nội bộ của các phần mềm
- Với chương trình có các đầu vào phức tạp đòi hỏi phải tốn thời gian hơn để tạo ra một fuzzer đủ thông minh
Hình 3: Quy trình kiểm thử Fuzzing
Hướng dẫn cài đặt và sử dụng DotDotPwn cho hệ điều hành Kali-Linux
Kiểm tra xem Môi trường Perl đã được thiết lập hay chưa
Hình 4: Kết quả kiểm tra môi trường Perl
Chuyển về Desktop và tạo thư mục có tên DotDotPwn tại đây
DotDotPwn sẽ được cài đặt tại thư mục cùng tên ở Desktop
Sử dụng lần lượt các lệnh: cd Desktop mkdir DotDotPwn
Hình 5: Kết quả sau khi tạo thư mục
Clone DotDotPwn từ Github về máy
Sử dụng lệnh: git clone https://github.com/wireghoul/dotdotpwn.git
Hình 6: K ết quả sau khi Clone DotDotPwn về máy
Kiểm tra và cài đặt những module còn thiếu với quyền root
Dùng lệnh: “ls” để kiểm tra thư mục bên trong
Sau khi dùng lệnh, ta thấy có một thư mục mới mang tên “dotdotpwn”, đây chính là thư mục được tạo ra lúc cài đặt DotDotPwn
Chuyển đến thư mục đó bằng lệnh: cd dotdotpwn
Kiểm tra lần nữa kết cấu của thư mục bằng lệnh: “ls”
Tiến hành cài đặt những module còn thiếu với quyền root với lệnh: sudo perl -MCPAN -e "install "
Sau khi nhập mật khẩu và xác nhận, ta được kết quả như sau:
Hình 7: Kết quả sau khi cài đặt xong những module còn thiếu
Mở giao diện của công cụ DotDotPwn
Hướng dẫn sử dụng DotDotPwn
Cú pháp lệnh cơ bản của DotDotPwn:
/dotdotpwn.pl -m [module] -h [host] [additional_options]
Tùy chọn thêm của lệnh:
Lựa chọn module ví dụ như http, http-url, ftp, tftp, payload, hay stdout
Chỉ định hostname của mục tiêu
Dùng NMAP để kiểm tra hệ điều hành
Kiểm tra phiên bản dịch vụ của mục tiêu
Tên của file cụ thể
Mặc định: toàn bộ file đuuợc định nghĩa trong TraversalEngine.pm
URL được đánh dấu là TRAVERSAL để thực hiện fuzz
Ví dụ: http://foo:8080/id.php?x=TRAVERSAL&y1337
Chuỗi để khớp với phản hồi nếu như phát hiện điểm yếu dễ bị khai thác
Ví dụ: "root:" nếu như tên file thử là /etc/passwd
Mặc định: “dot@dot.pwn”
Tên file cùng với payload để gửi đi và phần sẽ làm thực hiện fuzz, được đánh dấu là TRAVERSAL
Mặc định: HTTP, FTP!, TFTPi
Thời gian giữa các lần test
Dừng khi phát hiện lỗ hổng đầu tiên
Chế độ im lặng (Không in ra màn hình sau mỗi lần thử)
Ví dụ cụ thể
HTTP Module: dotdotpwn -m http -h 192.168.1.1 -x 8080 -f /etc/hosts -k "localhost" -d 8 -t
Độ sâu tối đa của fuzz là 8, với DotDotPwn sẽ gửi 5 yêu cầu mỗi giây (-t) tới máy chủ web (-m) lắng nghe ở cổng 8080 (-x) và có địa chỉ IP 192.168.1.1 (-h) DotDotPwn cũng sẽ cố gắng truy xuất tệp /etc/hosts (-f) và thực hiện kiểm tra bổ sung để tránh xác thực sai bằng cách tìm kiếm từ khóa trong phản hồi của máy chủ.
Nếu phát hiện "localhost" trong hệ thống, đây có thể là dấu hiệu của lỗ hổng bảo mật Để thu thập thêm thông tin, banner của web server sẽ được truy xuất bằng cách sử dụng tùy chọn (-s) Kết quả quét sẽ được DotDotPwn lưu trữ trong tệp có tên 192.168.1.1__ trong thư mục.
20 dotdotpwn -m http-url -u http://192.168.1.1:10000/unauthenticated/TRAVERSAL -O -k "root:" -r webmin.txt
DotDotPwn sẽ tiến hành nhận diện Hệ điều hành đang chạy trên địa chỉ
Địa chỉ IP 192.168.1.1 (-O) sẽ được sử dụng để phát hiện các lỗ hổng, sau đó Traversal Engine sẽ tạo ra fuzz dựa trên hệ điều hành đã xác định DotDotpwn sẽ thay thế token TRAVERSAL trong URL được chỉ định (-u) bằng các phần traversal đã tạo và gửi yêu cầu fuzz đến máy chủ web đang lắng nghe tại cổng 10000.
DotDotPwn sẽ kiểm tra phản hồi của Server bằng cách tìm kiếm từ khóa “root” Nếu từ khóa này được phát hiện, điều đó cho thấy Server có lỗ hổng bảo mật.
FTP Module dotdotpwn -m ftp -h 192.168.1.1 -s -U nitr0us -P n1tr0u5pwnzj00 -o windows - q -r ftp_server.txt
DotDotPwn sẽ bắt đầu bằng cách lấy banner message (-s) của FTP Server (-m) và sau đó đăng nhập bằng tên người dùng (-U) và mật khẩu (-P) đã chỉ định, nếu máy chủ không cho phép truy cập ẩn danh Sau khi xác thực thành công, công cụ này sẽ thu thập thông tin về các tệp phổ biến trong hệ điều hành Windows (-o) trong thư mục.
DotDotPwn hoạt động ở chế độ yên lặng (-q) và chỉ hiển thị các lỗ hổng tìm thấy, mà không in chi tiết của từng lần thử.
Tấn công Directory Traversal, traversal sequence được loại bỏ bằng trình giải mã
sequence được loại bỏ bằng trình giải mã URL thừa
Sử dụng LAB online tại: https://portswigger.net/web-security/file-path- traversal/lab-superfluous-url-decode
Tại LAB này, phần hiển thị hình ảnh của hàng hóa có chứa lỗ hổng có thể khai thác bằng cách tấn công Directory Traversal
LAB này cũng chặn toàn bộ những input có chứa Directory Traversal Sau đó, nó thực hiện giải mã URL của input trước khi sử dụng
Bước 1: Khởi chạy Burp Suite sau đó truy cập LAB bằng trình duyệt:
Bước 2:Do phần hình 1 hàng hóa có chứa lỗ hổng có thể tấn công Directory
Traversal nên ta chọn bất kì ảnh hàng hóa nào đó rồi chọn mở trong tab mới
Hình 10: Mở hình ảnh trong tab mới để lấy URL
Bước 3: Sau khi thực hiện xong bước 2, ta vào phần Proxy của Burp Suite, chọn send to repeater
Hình 11: Giao diện Proxy của Burp Suite
Bước 4: Trong Repeater, sửa “GET /image?filenameT.jpg HTTP/1.1” thành
“GET /image?filename=/etc/passwd HTTP/1.1”
Sau khi nhấn “Send”, ta được kết quả như hình
Do LAB chặn toàn bộ những input có chứa Directory Traversal nên kết quả trả về sẽ là “No such file”
Vì lí do đó, ta cần dùng đến DotDotPwn để có thể tìm ra lỗ hổng để tấn công
Hình 12: Giao diện trong Reepeater sau khi gửi thông tin từ Proxy sang
Bước 5: Khởi chạy DotDotPwn ở máy Kali Linux bằng lệnh “dotdotpwn -h” để xem chi tiết các lệnh của DotDotPwn.
Hình 13: Chuẩn bị công cụ DotDotPwn
Bước 6: Chạy lệnh sau: dotdotpwn -m http-url -u "https://acc01f9f1f6d0d0ec04f0505003500e3.web- security-academy.net/image?filename=TRAVERSAL" -f "/etc/passwd" -k
-m: Lựa chọn module, ở đây ta chọn http-url
-u: URL của ảnh: https://acc01f9f1f6d0d0ec04f0505003500e3.web-security- academy.net/image?filenameT.jpg Thay thế phần đằng sau file name bằng TRAVERSAL để tiến hành fuzz
-f: Tên file cụ thể, ở đây là "/etc/passwd"
-k: phần text để nối trong response, "root"
-d: Độ sâu của traversal, lựa chọn 7
-b: Dừng sau khi lỗ hổng đầu tiên được tìm thấy
Nhấn Enter để DotDotPwn bắt đầu test
DotDotPwn sẽ dừng khi phát hiện lỗ hổng:
Hình 15: Lỗ hổng LAB 1 đã được tìm thấy
Bước 7: Copy phần được đánh dấu là VULNERABLE:
“ %252f %252f %252fetc%252fpasswd” sang Burp Suite, thay thế cho“/etc/passwd” và chọn “Send”
Hình 16: Nội dung File Passwd của LAB 1
Sau khi thực hiện thành công bước 7, ta đã tấn công Directory Traversal thành công và biết được nột dung của file passwd
File Inclusion/Directory Traversal
Sử dụng LAB online tại: https://academy.hackthebox.com/
Tại LAB này, lỗ hổng Directory Traversal xuất hiện ở thẻ language, cho phép khai thác khi người dùng thay đổi ngôn ngữ Khi nhấp vào để đổi ngôn ngữ, URL sẽ có sự thay đổi, tạo cơ hội để sử dụng công cụ DotDotPwn nhằm khai thác lỗ hổng này.
Hình 18: Chuẩn bị công cụ DotDotPwn
Bước 2: Chạy lệnh: dotdotpwn -m http-url -h http://104.248.168.109:31310 -u http://104.248.168.109:31310/index.php?language=TRAVERSAL -f etc/passwd -k
-m: Lựa chọn module, ở đây ta chọn http-url
-u: URL của ảnh: http://104.248.168.109:31310/index.php?language=TRAVERSAL thế phần đằng sau language name bằng TRAVERSAL để tiến hành fuzz
-f: Tên file cụ thể, ở đây là "/etc/passwd"
-k: phần text để nối trong response, "root"
Nhấn Enter để thực hiện quét
Sau khi quét, ta được kết quả sau:
Hình 20: Phát hiện lỗ hổng của LAB 2
Bước 3: Do LAB 2 không chặn input có chứa Directory Traversal, chúng ta có thể truy cập trực tiếp bằng cách sao chép dòng được đánh dấu là VULNERABLE Khi truy cập bằng trình duyệt, chúng ta nhận được kết quả như mong đợi.
Hình 21: Nội dung file passwd của LAB 2
Sau khi thực hiện thành công, ta đã truy cập được vào file /etc/passwd thành công vào có được thông tin từ file này
Các cuộc tấn công Directory Traversal vào các Web Server không đủ bảo mật đang gia tăng, với nguy cơ xâm phạm toàn bộ máy chủ web Dotdotpwn là công cụ quét lỗ hổng Directory Traversal mạnh mẽ, giúp phát hiện các lỗ hổng bảo mật trên Web Server để khắc phục kịp thời, tránh sự cố trước khi đưa vào vận hành Tuy nhiên, công cụ này vẫn còn tồn tại một số điểm yếu khác.
- Dễ cài đặt, chỉ yêu cầu Perl và Nmap
- Nhiều Module khác nhau để lựa chọn tùy trường hợp
- Có thể cài trên nhiều nền tảng khác nhau: Linux, Windows, OS X Điểm yếu:
- Tốc độ quét khá chậm
- Chỉ hỗ trợ duy nhất việc tìm lỗ hổng Directory Traversal