1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo đồ án nhập môn đảm bảo an toàn và an tòan thông tin chương trình webgoat

141 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương trình WebGoat
Tác giả Huỳnh Việt Nhật, Nguyễn Minh Nhựt, Trần Phú, Đào Trung Quân, Hà Thanh Tùng, Lê Đình Vũ
Người hướng dẫn ThS. Nguyễn Tấn Cầm
Trường học Đại học Quốc gia Thành phố Hồ Chí Minh
Chuyên ngành Nhập môn đảm bảo an toàn và an toàn thông tin
Thể loại Báo cáo đồ án
Năm xuất bản 2020
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 141
Dung lượng 10,08 MB

Nội dung

+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 2

CHƯƠ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 3

CHƯƠ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 5

CHƯƠ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 7

b 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 8

Và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 12

audit_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 13

Chú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 14

Kế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 17

https://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 18

Sử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 19

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

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 20

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 21

webgoat-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 22

Chú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 23

Kí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 24

Tắ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 25

Click 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 26

Sau 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 27

Tươ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 30

PreparedStatement 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 31

exec 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 32

e Truy vấn được tham số hóa - NET

f Yêu cầu xác thực đầu vào?

Trang 33

Cá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 35

Và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 36

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:

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 37

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:

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 38

webgoat-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 39

Chú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 40

i Đặ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

Ngày đăng: 22/07/2024, 17:18

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w