+Giải thích lỗ hổng: Thay vì ''''chỉ hack'''', WebGoat đề cao việc giảng dạy, tập trung vào việc giải thích ngay từ đầu.+Học bằng cách tự làm: Trong quá trình giải thích về lỗ hổng, WebGoat xâ
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
- -BÁO CÁO ĐỒ ÁN NHẬP MÔN ĐẢM BẢO AN TOÀN VÀ AN TÒAN
4.Đào Trung Quân – 18521282
Trang 2CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI 1
CHƯƠNG II: LỢI ÍCH CỦA WEBGOAT MANG LẠI 2
CHƯƠNG III: HƯỚNG DẪN CÀI ĐẶT WEBGOAT 2
CHƯƠNG IV: CÁC BÀI HỌC TẤN CÔNG MẠNG VÀ PHƯƠNG PHÁP ĐỂ NGĂN CHẶN TRÊN WEBGOAT 3
1.Geneal 3
2.Injection Flaws 7
3.Authentication Flaws 45
4.Cross-Site Scripting (XSS) 62
5.Access Control Flaws 72
6.Insecure Communication 113
7.Insecure Deserialization 115
8.Request Forgeries 118
9.Vulnerable Components 130
10.Client side 131
CHƯƠNG V: TỔNG KẾT 141
CHƯƠNG VI: TÀI LIỆU THAM KHẢO 141
Trang 3CHƯƠNG I : TỔNG QUAN ĐỀ TÀI
Với sự phát triển nhanh chóng của công nghệ thông tin, thì thông tin
cá nhân và các thông tin của công việc cần được bảo mật đang là thứ rất đượccoi trọng Mọi thông tin quan trọng của một tổ chức công ty có thể đáng giáhàng nghìn đô, cũng vì vậy sự ra đời của các tin tặc hay còn gọi là hacker nhằmkiếm được món lợi nhuận khổng lồ từ thông tin của tổ chức công ty khác nhằmbán lại luôn là mục đích của nhóm người này Từ đó đòi hỏi cần sự bảo vệthông tin cần phải phát triển hơn nữa để ngăn chặn từ đó WebGoat, 1 chươngtrình được làm ra để đào tạo và phát triển nhân lực trẻ để tìm hiểu hướng tấncông của các tin tặc để ngăn chặn WebGoat chính là một server application
được cố tình lập trình có rất nhiều lỗi bảo mật Thông qua đó, nó hướng dẫn người dùng thực hành những kỹ thuật tấn công ở trên để hiểu rõ hơn bản chất về lỗ hổng mà web applications thường gặp OWASP là nhà thành lập, phát triển và kiểm tra chức năng mới sử dụng thử nghiệm thâm nhập của WebGoat được thành lập vào năm 2001 bởi Mark Curphey và cho đến nay thì Matt Konda là người lãnh đạo của tổ chức này.
WebGoat dựa vào hướng tiếp cận của một hacker để biết họ sẽ làm gì để đưa ra giải pháp ngăn chặn những cuộc tấn công an ninh mạng này khiến cho những hacker này không thể xâm nhập vào thiết bị hay hệ thống thông tin của người dùng WebGoat được thiết kế với 8 bài học chính và người học phải hoàn thành các tiến trình nhỏ để hoàn thành các bài học Mỗi bài học là một hướng khác nhau và WebGoat vẫn đang cập nhật các loại tấn công phổ biến mới của các hacker hiện nay Mục tiêu chính của WebGoat là tạo ra một môi trường giảng dạy tương tác trên thực tế để bảo mật ứng dụng web, và trong tương lai WebGoat định
Trang 4+Giải thích lỗ hổng: Thay vì 'chỉ hack', WebGoat đề cao việc giảng
dạy, tập trung vào việc giải thích ngay từ đầu.
+Học bằng cách tự làm: Trong quá trình giải thích về lỗ hổng,
WebGoat xây dựng các bài tập sẽ giúp bạn hiểu cách hoạt động của các lỗ hổng này.
+Giải thích giảm thiểu: Cuối mỗi bài học, bạn sẽ nhận được một cái nhìn tổng quan về các biện pháp giảm thiểu có thể sẽ giúp bạn trong quá trình phát triển.
Bạn có thể thực hành các loại tấn công khác nhau và WebGoat sẽhướng dẫn bạn cách thực hiện cuộc tấn công và dẫn bạn theo conđường thực hiện khám phá và thử nghiệm
CHƯƠNG III : HƯỚNG DẪN CÀI ĐẶT WEBGOAT
Bước 1:Cài đặt WebGoat tại : https://github.com/ WebGoat/WebGoat vàcài đặt Java để chạy được WebGoat
Bước 2:Chạy file jar vừa tải về (đối với window), đối với linux thì chạyqua cmd.Mở thư mục chứa file.jar rồi chạy lệnh: java -jar [Tên tệp jar]
Bước 3:Mở browser, truy cập http://localhost:8080/WebGoat Sau đó tạotài khoản để đăng nhập WebGoat
Trang 5CHƯƠNG IV : CÁC BÀI HỌC TẤN CÔNG MẠNG TRÊN WEBGOAT
Khách hàng bắt đầu một giao dịch như sau:
Máy khách liên hệ với máy chủ và gửi yêu cầu tài liệu Yêu cầu GET có thể có
các tham số url và các tham số đó sẽ có sẵn trong nhật ký truy cập web.
o NHẬN /index.html?param=value HTTP / 1.0
Tiếp theo, máy khách gửi thông tin tiêu đề tùy chọn để thông báo cho máy chủ về
cấu hình của nó và các định dạng tài liệu mà nó sẽ chấp nhận.
o Tác nhân người dùng: Mozilla / 4.06 Chấp nhận: image / gif, image /
jpeg, /
Trong yêu cầu ĐĂNG, dữ liệu do người dùng cung cấp sẽ tuân theo các tiêu đề
tùy chọn và không phải là một phần của dữ liệu có trong URL ĐĂNG.
1.1 Bài học số 2
Nhập tên của bạn vào trường nhập bên dưới và nhấn "Bắt đầu!" để nộp Máy chủ sẽ chấp nhận yêu cầu, đảo ngược đầu vào và hiển thị lại cho người dùng, minh họa những điều cơ bản về xử lý một yêu cầu HTTP.
Nhập hello -> Máy chủ sẽ chấp nhận yêu cầu, đảo ngược đầu vào và hiển thị lại chongười dung thành olleH như hình dưới.
Trang 7b HTTP Proxy
Tổng quan về proxy HTTP
Nhiều khi proxy được sử dụng như một cách để truy cập nội dung bị chặn Người dùng có thể kết nối với máy chủ A, máy chủ này chuyển tiếp nội dung từ máy chủ B… Vì Máy chủ B bị chặn trong mạng của người dùng Đó không phải là trường hợp sử dụng mà chúng ta sẽ giải quyết ở đây, nhưng khái niệm thì giống nhau HTTP Proxy nhận yêu cầu từ máy khách và chuyển tiếp chúng Họ cũng thường ghi lại chúng Chúng hoạt động như một người trung gian (hãy ghi nhớ điều đó nếu bạn quyết định
sử dụng máy chủ proxy để kết nối với một số hệ thống bị chặn khác) Chúng tôi sẽ chưa đi sâu vào HTTP và HTTPS, nhưng đó là một chủ đề quan trọng trong mối quan hệ với proxy.
Khả năng proxy
Các proxy nằm giữa máy khách của bạn và máy chủ mà máy khách đang nói chuyện Bạn có thể ghi lại và phân tích các yêu cầu và phản hồi Bạn cũng có thể sử dụng proxy để sửa đổi (giả mạo) các yêu cầu và phản hồi Proxy cũng có các chức năng tự động hoặc bán tự động cho phép bạn đạt được hiệu quả trong việc kiểm tra và phân tích tính bảo mật của trang web.
Các sử dụng khác cho proxy
Đặc biệt ZAP cũng có thể được sử dụng trong quá trình phát triển trong
CI / CD, DevOps hoặc môi trường xây dựng / thử nghiệm tự động khác Bài học này hiện không có bất kỳ chi tiết nào về điều đó, nhưng nó
là đáng nói Có một số ví dụ trên internet về việc nó được tích hợp vào CI / CD với Jenkins, maven hoặc các quy trình xây dựng khác.
Trang 8Vào header đổi method post thành get
Thêm vào header x-request-intercepted:true
Thay đổi giá trị đầu vào thành Request are tampered easily
Trang 9- Người dùng nên có hiểu biết cơ bản về cách hoạt động của SQL và nóđược sử dụng để làm gì.
- Người dùng sẽ hiểu được các phương pháp tốt nhất để bảo vệ khỏi cáccuộc tấn công SQL Injection
- Người dùng sẽ chứng minh kiến thức về String SQL Injection vàNumeric SQL Injection
b SQL là gì?
Ngôn ngữ truy vấn có cấu trúc - Structured Query Language (SQL) làmột cách để tương tác với cơ sở dữ liệu và được thông dịch bởi cơ sở dữ liệu
Một số lưu ý:
- SQL không phải viết tắt của Standard Query Language
- Có nhiều phiên bản SQL, hầu hết các cơ sở dữ liệu có một số chức năngtùy chỉnh
- Hầu hết các nhà cung cấp đều có phần mở rộng độc quyền
** Ngôn ngữ thao tác dữ liệu - Data Manipulation Language (DML)
Cho phép thực thi các câu truy vấn bao gồm cú pháp để chọn(SELECT), cập nhật (UPDATE), chèn (INSERT), xóa (DELETE)
**Ngôn ngữ định nghĩa dữ liệu - Data Definition Language (DDL)
Dùng để định nghĩa cấu trúc của cơ sở dữ liệu bao gồm định nghĩa cáchàng, các cột, các bảng dữ liệu,…ví dụ như CREATE, ALTER, DROP,TRUNCATE
** Ngôn ngữ điều khiển dữ liệu - Data Control Language (DCL)
Sử dụng để phân quyền người dùng bao gồm các lệnh GRANT (trao mộtquyền cho người dùng) và REVOKE (thu hồi quyền đã trao cho người dùng)
Trang 10 Thêm người dùng.
- Khôi phục nội dung của một tệp nhất định có trên hệ thống tệp DBMS
- Đưa ra các lệnh cho hệ điều hành
d Hậu quả của SQL Injection
Các cuộc tấn công SQL Injection cho phép những kẻ tấn công:
- Giả mạo danh tính
- Giả mạo dữ liệu hiện có
- Gây ra các vấn đề từ chối như vô hiệu hóa các giao dịch hoặc thay đổi
số dư
- Cho phép tiết lộ toàn bộ dữ liệu trên hệ thống
- Hủy dữ liệu hoặc làm cho dữ liệu đó không khả dụng
- Trở thành quản trị viên của máy chủ cơ sở dữ liệu
SQL Injection phổ biến hơn trong PHP, Classic ASP, Cold Fusion và cácngôn ngữ cũ hơn:
- Các ngôn ngữ không cung cấp hỗ trợ truy vấn được tham số hóa
- Các truy vấn được tham số hóa đã được thêm vào các phiên bản mớihơn
- Những người sớm áp dụng công nghệ web (tức là Old Code)
e Mức độ nghiêm trọng của SQL Injection
Mức độ nghiêm trọng của các cuộc tấn công SQL Injection được giớihạn bởi:
- Kỹ năng và trí tưởng tượng của người tấn công
Trang 11- Các biện pháp phòng thủ theo chiều sâu để đối phó: xác thực đầu vào vàđặc quyền ít nhất.
- Công nghệ của cơ sở dữ liệu
Không phải tất cả các cơ sở dữ liệu đều hỗ trợ chuỗi lệnh:
- Microsoft Access
- MySQL Connector/J and C
- Oracle
Không phải tất cả các cơ sở dữ liệu đều như nhau (SQL Server)
- Lệnh shell: master.dbo.xp_cmdshell 'cmd.exe dir c:'
- Các lệnh đăng ký: xp_regread, xp_regdeletekey, …
f Ví dụ về SQL Injection
Truy vấn động trong ứng dụng
- Potential String Injection (Tiêm chuỗi tiềm năng)
"select * from users where name = ' " + userName + " ' ";
- Potential Numeric Injection (Tiêm số tiềm năng)
"select * from users where employee_id = " + userID;
Kẻ tấn công cung cấp văn bản bất ngờ
Trang 12audit_log; = ' " + userName + " ' ";
Nhập Smith' or 1=1 vào Account Name:
Chúng ta đã thành công trong việc lấy toàn bộ dữ liệu từ bảng users:
h
Đây là câu truy vấn sẽ được thực thi: "select * from users where USERID = "
+ userID;
Nhập '101' or 1=1 vào Name:
Trang 13Chúng ta đã thành công trong việc lấy toàn bộ dữ liệu từ bảng users:
#Advanced (Nâng cao)
/* */ dùng để inline comments (comment nội tuyến)
, # dùng để line comments (comment trên 1 dòng)
Trang 14Kết hợp sử dụng char() - loại chuỗi không có dấu ngoặc kép
VD: SELECT * FROM users WHERE name = '+char(27) OR 1=1
!! Các Statement đặc biệt
- Sử dụng UNION: kết hợp kết quả của hai hoặc nhiều lệnh SELECT, mỗilệnh SELECT phải có cùng số cột đã chọn, số biểu thức của các cột,kiểu dữ liệu, thứ tự
VD: SELECT first_name FROM user_system_data UNION SELECTlogin_count FROM user_data;
- Sử dụng JOINS: kết hợp các cột từ hai hoặc nhiều bảng dựa trên cột liênquan
VD: SELECT * FROM user_data INNER JOIN user_data_tan ONuser_data.userid = user_data_tan.userid;
B1
Một bảng trong cơ sở dữ liệu của WebGoat:
CREATE TABLE user_system_data (userid int not null primary key,
user_name varchar(12), password varchar(10), cookie varchar(30));
!! Lấy toàn bộ dữ liệu của bảng
Nhập '; SELECT * FROM user_system_data vào Name
Trang 16được hiển thị, bạn sẽ cần phải bắt đầu đặt câu hỏi cho cơ sở dữ liệu dựa trênmột tuyên bố đúng hoặc sai Đó là lý do tại sao một Blind SQL Injection khókhai thác hơn nhiều.
Một số kiểu Blind SQL Injection: dựa trên nội dung và dựa trên thờigian
VD:
Chúng ta đang cố gắng hỏi cơ sở dữ liệu một câu hỏi boolean dựa trên ví dụ
về unique id Giả sử chúng ta có url sau: url: https://my-shop.com?article=4
Ở phía máy chủ, truy vấn này sẽ được dịch như sau:
SELECT * FROM articles WHERE article_id = 4
Chúng ta sẽ khai thác điều này bằng cách thêm AND 1 = 1 vào sau url:
https://my-shop.com?article=4 AND 1=1 Truy vấn lúc này sẽ là:
SELECT * FROM articles WHERE article_id = 4 AND 1 = 1
Nếu trình duyệt sẽ trả về cùng một trang như trước đây khi sử dụnghttps://my-shop.com?article=4, bạn biết rằng trang web này dễ bị tấn công bởiBlind SQL Injection Nếu trình duyệt phản hồi với một trang không được tìmthấy hoặc một cái gì đó khác thì bạn biết rằng Blind SQL Injection không hoạtđộng Bây giờ bạn có thể thay đổi truy vấn SQL và kiểm tra, ví dụ: https://my-shop.com?article=4 AND 1=2 nó sẽ không trả về bất kỳ thứ gì vì truy vấn trả
về giá trị false Ở mức độ cao hơn, bạn có thể sử dụng url sau: shop.com?article=4 AND substring(database_version(),1,1) = 2
Trang 17https://my-Hầu hết thời gian bạn bắt đầu bằng cách tìm loại cơ sở dữ liệu nào được sửdụng, dựa trên loại cơ sở dữ liệu, bạn có thể tìm thấy các bảng hệ thống của cơ
sở dữ liệu mà bạn có thể liệt kê tất cả các bảng có trong cơ sở dữ liệu Vớithông tin này, bạn có thể bắt đầu lấy thông tin từ tất cả các bảng và bạn có thểkết xuất cơ sở dữ liệu Lưu ý rằng cách tiếp cận này có thể không hoạt độngnếu các đặc quyền của cơ sở dữ liệu được thiết lập chính xác (nghĩa là khôngthể truy vấn bảng hệ thống với người dùng sử dụng kết nối từ ứng dụng webđến cơ sở dữ liệu)
Một cách khác được gọi là SQL Injection dựa trên thời gian, trong trường hợpnày bạn sẽ yêu cầu cơ sở dữ liệu chờ trước khi trả về kết quả Bạn có thể cầnphải sử dụng điều này nếu bạn hoàn toàn mù, vì vậy không có sự khác biệt giữaphản hồi mà bạn có thể sử dụng, ví dụ:
article = 4; sleep(10) Tài liệu tham khảo: https://pvxs.medium.com/webgoat-sql-injection-mitigation-lesson-12-67ec663f6aff
Kích hoạt FoxyProxy BURP đã cài đặt trên trình duyệt, sau đó sắp xếp cácserver theo ID:
Trang 18Sửa “ ip ” thành “ ip’ ” rồi chọn Send:
Với câu truy vấn lỗi này, ở phần Response ta sẽ nhận được toàn bộ câu lệnhtruy vấn với tên bảng và cột:
Trang 19Mệnh đề ORDER BY ở bài này được sử dụng như sau:
- Nếu tồn tại webgoat-prd thì danh sách sẽ được sắp xếp theo id
- Nếu không tồn tại webgoat-prd thì danh sách sẽ được sắp xếp theo trạngthái
Ta thực hiện một câu lệnh truy vấn đúng và nhận thấy rằng danh sách đượcsắp xếp theo id như hình phía dưới chứng tỏ có máy chủ webgoat-prd:
Trang 20Chúng ta đoán địa chỉ IP của webgoat-prd bằng câu lệnh sau:
Ở câu lệnh này, chúng ta thử xem vị trí đầu tiên trong địa chỉ IP của prd có phải số 1 hay không Sau khi click Send, ta nhận được danh sách đượcsắp xếp theo id Điều này chứng tỏ vị trí đầu tiên trong địa chỉ IP của webgoat-prd là số 1
Trang 21webgoat-Tiếp đến ta đoán số nằm ở vị trí thứ 2 trong địa chỉ IP của webgoat-prd cóphải là số 0 hay không với câu lệnh:
Click Send, ta nhận được danh sách được sắp xếp theo id, chứng tỏ vị trí thứ 2trong địa chỉ IP của webgoat-prd là số 0
Trang 22Chúng ta lần lượt đoán các số ở các vị trí còn lại trong địa chỉ IP của prd bằng cách thử từ số 0 đến 9, số nào trả về danh sách server sắp xếp theo idthì đúng, ngược lại là sai và tiến hành thử số khác.
webgoat-Kết quả chúng ta tìm được IP của webgoat-prd là 104.130.219.202:
Kiểm tra kết quả thành công:
Trang 23Kích hoạt FoxyProxy BURP đã cài đặt trên trình duyệt, sau đó tạo tài khoảnvới bằng cách đăng ký như hình phía dưới:
Vào Burp chọn Proxy => Intercept, chọn Forward liên tục cho đến khi cóPUT xuất hiện ở dòng đầu tiên:
Trang 24Tắt FoxyProxy BURP trên trình duyệt, chọn HTTP history trên Burp, tìmdòng có giao thức là PUT và nhấp chuột phải vào nó rồi chọn Send to Intruder:
Click vào Intruder => Positions => button Clear Sau đó thay “t” bằng
“pass_char”:
Trang 25Click button Add và thu được kết quả sau:
Vào Payloads và điều chỉnh Payload type, Min length, Max length như hìnhbên dưới rồi chọn Start attack:
Trang 26Sau khi Finish chọn Length sắp xếp theo thứ tự giảm dần, payload “t” cólength lớn nhất => Ký tự đầu tiên của mật khẩu là “t”:
Trở về Positions thay 1 thành 2 và clhọn Start attack một lần nữa:
Trang 27Tương tự như đã làm ở trên, ta có được ký tự thứ 2 trong mật khẩu là “h”:
Trang 28Đăng nhập thành công:
Trang 29#Mitigations (Giảm thiểu, ngăn chặn)
a Truy vấn bất biến (Immutable Queries)
Đây là cách bảo vệ tốt nhất chống lại SQL Injection Chúng hoặc không
có dữ liệu có thể được diễn giải hoặc chúng coi dữ liệu như một thực thể duynhất được liên kết với một cột mà không cần diễn giải
Trang 30PreparedStatement statement =connection.prepareStatement(query);
statement.setString(1, accountName);
ResultSet results = statement.executeQuery();
- Thủ tục lưu trữ: Chỉ khi thủ tục được lưu trữ không tạo ra SQL động
b Thủ tục lưu trữ
- Safe Stored Procedure (Microsoft SQL Server)
CREATE PROCEDURE ListCustomers(@Countrynvarchar(30))
ASSELECT City, COUNT(*)FROM Customers
WHERE Country LIKE @Country GROUP BY CityEXEC ListCustomers 'USA'
- Injectable Stored Procedure (Microsoft SQL Server)
CREATE PROEDURE getUser(@lastName nvarchar(25))AS
declare @sql nvarchar(255)set @sql = 'select * from users where LastName = + @LastName + '
Trang 31exec sp_executesql @sql
c Truy vấn được tham số hóa - Đoạn mã Java
d Truy vấn được tham số hóa - Ví dụ Java
Trang 32e Truy vấn được tham số hóa - NET
f Yêu cầu xác thực đầu vào?
Trang 33Các truy vấn của chúng ta không còn có thể tiêm được nữa, chúng ta vẫncần xác thực thông tin đầu vào của mình.
Ngăn chặn các loại tấn công khác được lưu trữ trong cơ sở dữ liệu:
Một prepared statement không ngăn chặn chống lại SQL Injection
Với câu lệnh truy vấn sau:
select * from users order by lastname;
Nếu chúng ta xem xét đặc tả của ngữ pháp SQL thì nó được định nghĩa nhưsau:
SELECT
FROM tableList[WHERE Expression]
[ORDER BY orderExpression [, ]]
orderExpression:
{ columnNr | columnAlias | selectExpression } [ASC | DESC]
Trang 34} ([ALL | DISTINCT][2]] Expression) } [[AS] label]
Based on HSQLDB
Điều này có nghĩa là một orderExpression có thể là một selectExpressioncũng có thể là một hàm Ví dụ với câu lệnh case, chúng ta có thể hỏi cơ sở dữliệu một số câu hỏi như:
select * from users order by (case when (true) then lastname else firstname)
Vì vậy, chúng ta có thể thay thế bất kỳ loại hoạt động boolean nào trong phầnwhen (….) Câu lệnh sẽ chỉ hoạt động bởi vì nó là một truy vấn hợp lệ cho dùbạn sử dụng một prepared statement hay không order by clause có thể chứamột biểu thức theo định nghĩa
Giảm nhẹ
Nếu bạn cần cung cấp một cột sắp xếp trong ứng dụng web của mình, bạn nêntriển khai một danh sách trắng để xác thực giá trị của câu lệnh order by, nó phảiluôn được giới hạn ở những thứ như 'firstname' hoặc 'lastname'
h Demo cho SQL injection miligation
Tài liệu tham khảo: https://pvxs.medium.com/webgoat-sql-injection-mitigation-lesson-12-67ec663f6aff
Kích hoạt FoxyProxy BURP đã cài đặt trên trình duyệt, sau đó sắp xếp cácserver theo ID:
Trang 35Vào Burp chọn Proxy => HTTP history Sau đó tìm url/WebGoat/SqlInjection/servers?column=ip Click chuột phải và chọn Send toRepeater:
Sửa “ ip ” thành “ ip’ ” rồi chọn Send:
Trang 36Với câu truy vấn lỗi này, ở phần Response ta sẽ nhận được toàn bộ câu lệnhtruy vấn với tên bảng và cột:
Mệnh đề ORDER BY ở bài này được sử dụng như sau:
- Nếu tồn tại webgoat-prd thì danh sách sẽ được sắp xếp theo id
- Nếu không tồn tại webgoat-prd thì danh sách sẽ được sắp xếp theo trạngthái
Trang 37Ta thực hiện một câu lệnh truy vấn đúng và nhận thấy rằng danh sách đượcsắp xếp theo id như hình phía dưới chứng tỏ có máy chủ webgoat-prd:
Chúng ta đoán địa chỉ IP của webgoat-prd bằng câu lệnh sau:
Ở câu lệnh này, chúng ta thử xem vị trí đầu tiên trong địa chỉ IP của prd có phải số 1 hay không Sau khi click Send, ta nhận được danh sách đượcsắp xếp theo id Điều này chứng tỏ vị trí đầu tiên trong địa chỉ IP của webgoat-prd là số 1
Trang 38webgoat-Tiếp đến ta đoán số nằm ở vị trí thứ 2 trong địa chỉ IP của webgoat-prd cóphải là số 0 hay không với câu lệnh:
Click Send, ta nhận được danh sách được sắp xếp theo id, chứng tỏ vị trí thứ 2trong địa chỉ IP của webgoat-prd là số 0
Trang 39Chúng ta lần lượt đoán các số ở các vị trí còn lại trong địa chỉ IP của prd bằng cách thử từ số 0 đến 9, số nào trả về danh sách server sắp xếp theo idthì đúng, ngược lại là sai và tiến hành thử số khác.
webgoat-Kết quả chúng ta tìm được IP của webgoat-prd là 104.130.219.202:
Kiểm tra kết quả thành công:
Trang 40i Đặc quyền ít nhất
- Kết nối với một bộ đặc quyền tối thiểu:
+ Ứng dụng phải kết nối với cơ sở dữ liệu bằng các thông tin đăng nhậpkhác nhau cho mọi phân biệt tin cậy
+Các ứng dụng hiếm khi cần quyền xóa đối với bảng hoặc cơ sở dữ liệu.-Tài khoản cơ sở dữ liệu nên hạn chế quyền truy cập schema
-Xác định các tài khoản cơ sở dữ liệu có quyền truy cập để đọc và đọc / ghi.-Nhiều nhóm kết nối dựa trên quyền truy cập:
+Sử dụng quyền truy cập chỉ đọc cho truy vấn xác thực
+Sử dụng quyền truy cập đọc / ghi cho các truy vấn sửa đổi dữ liệu
+Sử dụng thực thi để truy cập vào các lệnh gọi thủ tục được lưu trữ
B XXE
XXE (XML external entity) injection là một lỗ hổng đã có từ lâu và hiện
tại độ phủ sóng của XML trên các Web Application cũng đã giảm đi đôi chút
Dù vậy, đây là một lỗ hổng một khi đã xuất hiện thì đều được đánh giá ở
mức độ nghiêm trọng
a Về XML:
XML là ngôn ngữ đánh dấu mở rộng, có chắc năng lưu trữ, truyền dữ liệu
và mô tả nhiều loại dữ liệu khác nhau