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

báo cáo bài tập lớn 2 thực hiện cài đặt dvwa

15 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 đề Thực hiện cài đặt DVWA
Tác giả Võ Thị Hải Yến, Ịp Quý Linh
Trường học Học viện Kỹ thuật Mật
Thể loại Báo cáo bài tập lớn
Định dạng
Số trang 15
Dung lượng 1,8 MB

Nội dung

BAN CƠ YẾU CHÍNH PHỦHỌC VIỆN KỸ THUẬT MẬTCỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập – Tự do – Hạnh phúcBÁO CÁO BÀI TẬP LỚN 2 – THỰC HIỆN CÀI ĐẶT DVWATổng quan: SQL injection là một kỹ thu

Trang 1

BAN CƠ YẾU CHÍNH PHỦ

HỌC VIỆN KỸ THUẬT MẬT

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập – Tự do – Hạnh phúc

BÁO CÁO BÀI TẬP LỚN 2 – THỰC HIỆN CÀI ĐẶT DVWA

Tổng quan:

SQL injection là một kỹ thuật tấn công mạng mà kẻ tấn công chèn các câu lệnh

SQL độc hại vào các trường nhập liệu của ứng dụng web, nhằm mục đích thực thi các hành động không mong muốn trong cơ sở dữ liệu, như truy vấn dữ liệu, thay

đổi dữ liệu hoặc kiểm soát hệ thống

I Thực hành cài đặt DVWA trên công cụ Docker

Trang 2

II Tiến hành tấn công

Sau khi cài đặt thành công DVWA, mở trình duyệt tại địa chỉ http://localhost:4280 Đăng nhập bằng username “admin” và mật khẩu là “password” Sau đó đặt bảo mật DVWA xuống mức LOW

1 Tấn công cơ bản

Trang 3

Tại trường User ID field, nhấn “1” và click “Nộp” Điều đó có nghĩa là sẽ in

ra ID, First_Name và SureName

Ta dễ dàng truy cập được vì cú pháp SQL đang được khai thác

$getid = "SELECT first_name, last_name FROM users WHERE

user_id = '$id'";

Khi kiểm tra thanh URL, dễ dàng thấy tham số chứa ID là 1

Thực hiện thay đổi ID thành 1,2,3,4 để lấy First_Name và Surname của tất

cả các users còn lại

Trang 4

2 Kịch bản tấn công luôn đúng

Một phương pháp nâng cao để trích xuất tất cả Surname và First_Name từ

cơ sở dữ liệu là sử dụng dữ liệu đầu vào: %' or '1'='1'

Trang 5

Trong trường hợp này, ‘%' or '1'='1' là một phần của câu truy vấn SQL, mục đích là làm cho điều kiện luôn đúng (‘1’=’1’ luôn đúng trong SQL), dẫn đến việc trả về tất cả kết quả từ cơ sở dữ liệu, cho phép kẻ tấn công truy xuất dữ liệu mà không cần xác thực

3.Kịch bản tấn công hiển thị phiên bản cơ sở dữ liệu

Thực hiện tấn công bằng câu lệnh: %' or 0=0 union select null, version() #

Trang 6

+ Phần '%' or 0=0 tạo ra một điều kiện luôn đúng, bởi vì mệnh đề 0=0 luôn đúng trong SQL

+ Phần union select null, version() sử dụng lệnh UNION để kết hợp kết quả của truy vấn gốc với kết quả của một truy vấn mới Trong trường hợp này, null được chọn là một cột ảo cho truy vấn mới, và version() được sử dụng để trả về phiên bản của cơ sở dữ liệu Kết quả là kẻ xấu có thể lấy thông tin về phiên bản

Trang 7

dữ liệu đang chạy trên máy chủ, giúp chúng hiểu rõ về môi trường đang tấn công

4.Hiển thị cơ sở dữ liệu người dùng

Để hiển thị Database của người dùng đã thực thi mã PHP cho Database,

nhập câu lệnh: %' or 0=0 union select null, user() #

Phần ‘%’ or 0=0’ là điều kiện luôn đúng Phần ‘union select null, user()’ sử dụng lệnh ‘UNION’ kết hợp kết quả truy vấn gốc và truy vấn mới, ‘null’

Trang 8

được chạy là cột ảo chứa dữ liệu truy vấn mới Kết quả là cung cấp tên người dùng đang sử dụng Database

5 Tấn công hiển thị các bảng trong information_schema

Thực hiện tấn công bằng câu lệnh %' and 1=0 union select null,

table_name from information_schema.tables #

Phần union select null, table_name from information_schema.tables sử dụng lệnh UNION để kết hợp kết quả của truy vấn gốc với kết quả của một truy vấn mới Trong trường hợp này, null được chọn là một cột ảo cho truy vấn mới, và table_name từ bảng information_schema.tables được chọn để trả về tên của các bảng trong cơ sở dữ liệu Kẻ tấn công có thể hiểu rõ hơn về cấu trúc của cơ sở dữ liệu đang được sử dụng

Trang 9

6 Hiển thị tất cả các trường cột trong bảng người dùng

information_schema

Câu lệnh : %' and 1=0 union select null,

concat(table_name,0x0a,column_name) from

information_schema.columns where table_name = 'users' #

Sẽ hiển thị tất cả thông tin trong cột như User_ID, first_name, last_name, user và password

Lệnh UNION trong trường hợp này là sự kết hợp kết quả của truy vấn gốc với kết quả của một truy vấn mới Trong trường hợp này, null được chọn là một cột ảo cho truy vấn mới, và concat(table_name,0x0a,column_name) được sử dụng để kết hợp tên bảng và tên cột từ bảng

information_schema.columns với một dấu xuống dòng (0x0a) Câu lệnh where table_name = 'users' chỉ trả về thông tin về bảng có tên là 'users'.Kết quả của câu lệnh này có thể là danh sách các cột trong bảng 'users', giúp kẻ tấn công hiểu rõ hơn về cấu trúc và dữ liệu trong bảng 'users'.\

Trang 10

7 Hiển thị nội dung trường Column:

Sử dụng câu lệnh: %' and 1=0 union select null,

concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users

#

Có thể thấy mật khẩu được trả về ở dạng băm Kẻ xấu có thể dễ dàng bẻ khóa nó bằng nhiều trang web Nếu có thể sẽ trích xuất được mật khẩu và tiềm tàng rủi ro bảo mật nghiêm trọng

III Chỉnh mức bảo mật DVWA lên High và tấn công lại:

Trang 11

Tiến hành tấn công

Trang 12

Có thể nhận thấy, mặc dù bật cảnh báo bảo mật trong DVWA lên mức "high" Tuy nhiên điều này chỉ đơn giản là cảnh báo bạn về các lỗ hổng có mức độ nguy hiểm cao hơn, việc bật cảnh báo này không đảm bảo rằng tất cả các lỗ hổng bảo mật đã được khắc phục DVWA vẫn có thể chứa các lỗ hổng bảo mật khác, mà mức độ nguy hiểm của chúng không được đánh giá là "high" theo cài đặt mặc định

IV Thực hiện vá lỗ hổng:

Vào View Source ta có thể thấy lỗ hổng SQL Injection nằm ở dòng sau:

Trong trường hợp này, biến $id được lấy trực tiếp từ dữ liệu người dùng thông qua biến $_GET['id'] mà không có bất kỳ kiểm tra hoặc xử lý nào.

Trang 13

Kẻ tấn công có thể tận dụng điều này bằng cách chèn các câu lệnh SQL độc hại

vào biến $_GET['id'] Ví dụ, bằng cách nhập vào URL một chuỗi như sau: id=1

OR 1=1, câu truy vấn SQL sẽ trở thành:

Với điều kiện 1=1, điều này luôn đúng, và câu truy vấn sẽ trả về tất cả các dòng trong bảng users,gây ra lỗ hổng bảo mật nghiêm trọng

Dùng kỹ thuật Prepared Statements để vá lỗ hổng

Sử dụng hàm intval() để chuyển đổi giá trị của $_GET['id'] thành một số nguyên Điều này đảm bảo rằng giá trị của biến $id là một số nguyên dương.

Trang 14

Sử dụng Prepared Statements để chuẩn bị câu truy vấn SQL với tham số :id Tham

số này sẽ được thay thế bằng giá trị của biến $id trong quá trình thực thi truy vấn,

đảm bảo rằng không có câu lệnh SQL độc hại nào được chèn vào truy vấn

Cuối cùng, thực thi truy vấn và lấy kết quả, nếu có Nếu có kết quả trả về, chúng ta hiển thị thông tin cho người dùng

V.Kết luận:

Khi thực hiện tấn công SQL Injection trên trang web DVWA từ mức độ bảo mật "Low" đến "High", chúng ta có thể rút ra kết luận sau:

1 Đánh giá mức độ nguy cơ: Việc tấn công giúp người dùng hiểu rõ hơn về mức

độ nguy cơ của lỗ hổng SQL Injection ứng với các cấp độ bảo mật khác nhau Các mức độ bảo mật càng cao thường gây ra những hậu quả nghiêm trọng hơn nếu bị tấn công thành công

2 Tìm hiểu cách tấn công: Thực hiện tấn công từ mức độ bảo mật "Low" đến

"High" cho phép người dùng tìm hiểu và hiểu rõ hơn về cách thức tấn công SQL Injection hoạt động ở các cấp độ khác nhau Điều này bao gồm việc hiểu cách thức khai thác lỗ hổng, truy vấn cơ sở dữ liệu và chiếm quyền kiểm soát

3 Hiểu biện pháp phòng tránh: Giúp người dùng nhận ra sự quan trọng của việc triển khai các biện pháp phòng tránh phù hợp Điều này bao gồm việc kiểm tra và

xử lý đầu vào, sử dụng câu lệnh truy vấn tham số hóa, và thực hiện kiểm tra cấp quyền đầy đủ trên cơ sở dữ liệu

4 Nhận ra hậu quả của việc không bảo mật: Thực hiện tấn công cũng cho phép người dùng nhận ra những hậu quả nghiêm trọng mà việc không bảo mật cơ sở dữ liệu có thể gây ra Điều này có thể bao gồm mất dữ liệu quan trọng, lộ thông tin cá nhân, hoặc thậm chí là kiểm soát toàn bộ hệ thống

Trang 15

Tóm lại, tấn công SQL Injection là biện pháp khá phổ biến mà tin tặc có thể khai thác nhằm mục đích phá vỡ tính toàn vẹn của dữ liệu và chiếm quyền kiểm soát như truy xuất, sửa đổi hoặc xóa dữ liệu Qua đó giúp người dùng hiểu rõ hơn về nguy cơ cũng như tăng cường nhiều biện pháp phòng tránh liên quan đến lỗ hổng này như:

+ Sử dụng các câu lệnh truy vấn tham số hóa hoặc các framework ORM (Object-Relational Mapping)

+ Kiểm tra và xử lý đầu vào từ người dùng một cách cẩn thận

+ Hạn chế quyền truy cập của người dùng đối với cơ sở dữ liệu

+ Sử dụng các công cụ bảo mật như Web Application Firewalls (WAFs) để phát hiện và ngăn chặn các cuộc tấn công SQL injection

Ngày đăng: 24/05/2024, 15:00

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

TÀI LIỆU LIÊN QUAN

w