I Tìm hiểu lý thuyếtKhái niệm SQL Injection: SQL injection là kỹ thuật tấn công bằng cách thêm mã độc vào các truy vấn SQL thông qua đầu vào của người dùng.. Nếu ứng dụng web không kiểm
Trang 1BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-o0o -CƠ SỞ AN TOÀN THÔNG TIN Báo cáo thực hành: SQL-Inject Sinh viên: Trần Văn Hoàng
Mã sinh viên: B22DCAT129
Lớp: E22CQCN05-B
Trang 2Danh mục và hình ảnh 3
I) Tìm hiểu lý thuyết 4
II) Thực hành chi tiết 4
1) Khởi động bài lab 4
2) Nhiệm vụ 1: MySQL console 5
3) Nhiệm vụ 2: Sử dụng câu lệnh SELECT thực hiện tấn công SQL Injection 6
a) Tấn công từ trang web 6
b) Tấn công SQL-injection từ dòng lệnh: 7
4) Nhiệm vụ 3: Tấn công SQL injection bằng câu lệnh UPDATE 7
a) Tấn công SQL injection bằng câu lệnh UPDATE – chỉnh sửa password của người khác 7
b) Tấn công SQL injection bằng câu lệnh UPDATE – chỉnh sửa password của người khác 9
5) Stoplab 10
III) Kết luận 11
Trang 3DANH MỤC VÀ HÌNH ẢNH
HÌNH 1: KHỞI ĐỘNG VÀ CHECKWORK 4
HÌNH 2: MÃ HÓA TỆP VĂN BẢN 5
HÌNH 3: DỮ LIỆU TRONG DATABASE 5
HÌNH 4: CÚ PHÁP TẤN CÔNG SQL-INJECTION TỪ TRANG WEB 6
HÌNH 5: ĐĂNG NHẬP THÀNH CÔNG VÀO TÀI KHOẢN ADMIN 6
HÌNH 6: TẤN CÔNG SQL-INJECTION BẰNG DÒNG LỆNH 7
HÌNH 7: KẾT QUẢ TRẢ VỀ KHI CỐ THAY ĐỔI THÔNG TIN TRONG CƠ SỞ DỮ LIỆU 7
HÌNH 8: THÔNG TIN GÔC CỦA 'ALICE ' 8
HÌNH 9: TĂNG LƯƠNG CHO ALICE 8
HÌNH 10: TẠO TỪ MÃ SHA1 CHO MẬT KHẨU MỚI 9
HÌNH 11: THAY ĐỔI MẬT KHẨU CỦA BOBY 9
HÌNH 12: ĐĂNG NHẬP VÀO NGƯỜI DÙNG BOBY VỚI MẬT KHẨU ĐÃ ĐƯỢC THAY ĐỔI 10
HÌNH 13: THÔNG TIN CỦA NGƯỜI DÙNG BOBY 10
HÌNH 14: CHECKWORK LẠI KẾT QUẢ ĐÃ CHẠY 11
Trang 4I) Tìm hiểu lý thuyết
Khái niệm SQL Injection: SQL injection là kỹ thuật tấn công bằng cách thêm mã độc vào các truy vấn SQL thông qua đầu vào của người dùng Nếu ứng dụng web không kiểm tra kỹ dữ liệu đầu vào, kẻ tấn công có thể đưa mã SQL độc hại vào các truy vấn, từ
đó kiểm soát truy vấn và thao tác với cơ sở dữ liệu
SQL Injection từ Ứng Dụng Web: Mục tiêu của SQL injection từ trang web là kiểm tra tính an toàn của hệ thống xác thực người dùng bằng cách truy cập trái phép với vai trò quản trị viên mà không cần biết ID hay mật khẩu
SQL Injection từ Dòng Lệnh (Terminal): Ngoài tấn công qua giao diện web, sinh viên còn được học cách thực hiện tấn công SQL injection từ dòng lệnh bằng công cụ curl
để gửi các yêu cầu HTTP, giúp hiểu rõ cách yêu cầu HTTP có thể bị lợi dụng để tấn công
hệ thống
Nối Câu Lệnh SQL: Kỹ thuật nối câu lệnh SQL giúp kẻ tấn công thực hiện thêm các thao tác khác ngoài truy vấn ban đầu, ví dụ như thêm, sửa, hoặc xóa dữ liệu trong cơ sở
dữ liệu Điều này giúp sinh viên hiểu rõ hơn về mức độ nguy hiểm của việc không kiểm tra kỹ dữ liệu đầu vào
Phòng Chống SQL Injection bằng Câu Lệnh Prepared Statements: Một biện pháp phòng chống hiệu quả là sử dụng các câu lệnh prepare trong PHP để phân tách rõ ràng giữa mã và dữ liệu Câu lệnh prepare cho phép tạo truy vấn SQL an toàn bằng cách giữ nguyên cấu trúc truy vấn mà không thay đổi ý nghĩa của dữ liệu đầu vào, giúp ngăn ngừa nguy cơ SQL injection
II) Thực hành chi tiết
1) Khởi động bài lab
Tiến hành khởi động bài lab thông qua lệnh “labtainer sql-inject” sau khi khởi động
sử dụng lệnh “checkwork” để kiểm tra xem bài thực hành đã chạy chưa.
Hình 1: khởi động và checkwork
Trang 52) Nhiệm vụ 1: MySQL console
Hình 2: mã hóa tệp văn bản
Hình 3: Dữ liệu trong database
Trang 63) Nhiệm vụ 2: Sử dụng câu lệnh SELECT thực hiện tấn công SQL Injection a) Tấn công từ trang web
Đăng nhập vào trang web với tư cách quản trị viên theo phương thức SQL-injection
Hình 4: cú pháp tấn công sql-injection từ trang web
Sau khi đăng nhập vào tài khoản Admin thì kết quả trả về sẽ ở bên dưới
Hình 5: Đăng nhập thành công vào tài khoản Admin
Trang 7b) Tấn công SQL-injection từ dòng lệnh:
Trong terminal client sử dụng lệnh như trong hình để truy cập vào người dùng admin, kết quả trả về bên dưới
Hình 6: tấn công sql-injection bằng dòng lệnh
Thử thay đổi dữ liệu trong database bằng câu lệnh nối
Hình 7: kết quả trả về khi cố thay đổi thông tin trong cơ sở dữ liệu
Từ kết quả trả về sinh viên nhận thấy:
- Tuy chúng ta không thể thay đổi dữ liệu của database nhưng mật khẩu của người dùng(phần được bôi đen trong ảnh) đã bị lộ ra, từ đây chúng ta có thể đăng nhập vào và sửa đổi, thậm chí là xóa dữ liệu nếu được phép
- Không thể sử dụng câu lệnh nối trong trường hợp này
4) Nhiệm vụ 3: Tấn công SQL injection bằng câu lệnh UPDATE
a) Tấn công SQL injection bằng câu lệnh UPDATE – chỉnh sửa password của người khác
Trang 8Hình 8: Thông tin gôc của 'Alice '
Tiến hành thay đổi thông tin của Alice bằng câu lệnh sau:
', Salary = 999999 where EID = 100000;#
Nhập vào trường name
Trang 9b) Tấn công SQL injection bằng câu lệnh UPDATE – chỉnh sửa password của người khác
Tạo từ mã SHAđể tạo mật khẩu mới, do mật khẩu được lưu dưới dạng 1 từ mã SHA Mật khẩu mới sẽ là “123456789”
Hình 10: tạo từ mã SHA1 cho mật khẩu mới
Từ người dùng Alice tiến hành thay đổi mật khẩu của người dùng có EID là 20000 là Boby Thông qua lệnh sau:
', Password='f7c3bc1d808e04732adf679965ccc34ca7ae3441' where EID = 20000;#
Hình 11: Thay đổi mật khẩu của Boby
Trang 10Hình 12: Đăng nhập vào người dùng Boby với mật khẩu đã được thay đổi
Hình 13: Thông tin của người dùng Boby
5) Stoplab
Trước khi dừng bài thực hành tiến hành kiểm tra lại tiến trình hoàn thành bài tập Nếu mục curl_count >= 1 và selected_alice = Y tức là các nhiệm vụ đã hoàn thành
Trang 11Hình 14: checkwork lại kết quả đã chạy
III) Kết luận
Bài thực hành này giúp sinh viên nhận thức rõ về mức độ nguy hiểm của lỗ hổng SQL Injection và những hậu quả nghiêm trọng có thể xảy ra khi bảo mật dữ liệu không được bảo vệ đầy đủ Thông qua các nhiệm vụ, sinh viên đã hiểu cách thức tấn công SQL Injection hoạt động và thấy rõ ràng rằng việc kiểm tra và làm sạch đầu vào là rất quan trọng để tránh những lỗ hổng này Bằng cách thử nghiệm các cuộc tấn công trên trang web giả lập, sinh viên có thể thấy cách dữ liệu nhạy cảm của người dùng dễ dàng bị đánh cắp hoặc sửa đổi nếu không có các biện pháp bảo vệ hiệu quả Phần cuối cùng của bài tập cũng nhấn mạnh tầm quan trọng của câu lệnh chuẩn bị (prepared statements) trong việc tăng cường bảo mật, nhờ khả năng ngăn chặn hiệu quả các đoạn mã độc SQL từ đầu vào của người dùng