Lỗ hổng bảo mật xuất hiện khi đầu vào của người dùng không được kiểm tra chính xác trong các ứng dụng web trước khi được gửi đến máy chủ cơ sở dữ liệu phía sau1.. SQL Injection Attack on
Trang 1TRƯNG ĐI HC SƯ PHM K THUÂT TP.HCM KHOA: CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HC: AN TÒAN THÔNG TIN
LAB 5
SQL INJECTION
GVHD: TS.Huỳnh Nguyên Chính Sinh viên thực hiện: Nguyễn Lê Gia Hân MSSV: 21110432
Mã LHP: INSE330380_23_1_09
TP.Hồ Chí Minh, tháng 10 năm 2023
Trang 2Lab 5 SQL Injection
SQL injection là một kỹ thuật chèn mã khai thác các lỗ hổng trong giao diện giữa các ứng dụng web và máy chủ cơ sở dữ liệu Lỗ hổng bảo mật xuất hiện khi đầu vào của người dùng không được kiểm tra chính xác trong các ứng dụng web trước khi được gửi đến máy chủ cơ sở dữ liệu phía sau
1 Get started
#vi /etc/hosts
# vi /etc/ apache2/sites-available/ 000-default.conf
Trang 32 Get Familiar with SQL Statements
mysql -u root -pseedubuntu
Trang 4Xem các database đang có: Show database;
Xem DB User;
Trang 5Use Users;
In ra tất cả các bảng của cơ sở dữ liệu đã chọn: show tables;
Thông tin dữ liệu bảng Credential
Trang 6Xem thông tin của nhân viên có tên Alice:
Trang 73 SQL Injection Attack on SELECT Statement
Đăng nhập vào www.SEEDLabSQLInjection.com
Mã PHP home.php không an toàn, nằm trong thư mục /var /www/SQLInjection, được
sử dụng để tiến hành xác thực người dùng Đoạn mã sau cho biết cách xác thực người dùng
Trong đoạn code này, ta nhận thấy input_ name nhận GET request từ text box mà không thông qua tiền xử lý, hơn nữa, phần check data và data trong câu lệnh SQL là
Trang 8không tách biệt (input name có thể không cần phải là một “input name”) Nhận thấy điều đó, ta có thể chèn một số câu lệnh SQL vào ô text username!
Như ta đã biết, comment trong SQL là #, ta sẽ dùng nó để ngắt dòng kiểm tra password Một vài db sẽ dùng username là ‘admin’ để quản lý nên sẽ dùng nó để tấn công
Nhập : admin ‘ #
Dấu ‘ để close tag ‘ ở phía
trước để có ‘$input_name=admin’ #
Trang 9Kết quả thu được
Trang 10 Đăng nhập thành công với user admin và xem được thông tin trên database
4 SQL Injection Attack from webpage
Sau khi đăng nhập qua username admin, ta biết được username của một vài nhân viên, tiếp tục bằng SQL injection để truy cập vào một account với username ‘Alice’ Code: Alice’ #
Trang 115 SQL Injection Attack on UPDATE Statement
Nếu một lỗ hổng SQL injection xảy ra với câu lệnh UPDATE, thiệt hại sẽ nghiêm trọng hơn, vì những kẻ tấn công có thể sử dụng lỗ hổng này để sửa đổi cơ sở dữ liệu Trong ứng dụng Quản lý nhân viên, có trang Chỉnh sửa hồ sơ cho phép nhân viên cập nhật thông tin hồ sơ của họ, bao gồm username, email, địa chỉ, số điện thoại và mật khẩu
The PHP file is located in the /var/www/SQLInjection directory
Ta cần nhắm đến vị trí của input_nickname, bởi vì đây là vị trí dễ sửa đổi nhất mà không cần quan tâm đến việc update các giá trị khác !
Trang 12Thực hiện theo phương pháp chèn code SQL và them # để bỏ qua đoạn code phía sau !
Nhiệm vụ 5.1:
Điều chỉnh mức lương của chính bạn Như được hiển thị trong trang Chỉnh sửa Hồ
sơ, nhân viên chỉ có thể cập nhật biệt hiệu, email, địa chỉ, số điện thoại và mật khẩu của họ; họ không được phép thay đổi mức lương của họ Giả sử rằng bạn (Alice) là một nhân viên bất mãn, và sếp Boby đã không tăng lương cho bạn trong năm nay Bạn muốn tăng lương của chính mình bằng cách khai thác lỗ hổng SQL injection trong trang Edit-Profile Đăng nhập vào tài khoản Alice và chọn edit profile
Chèn đoạn code: trước ‘, không được chứa kí tự đặc biệt nào để tránh bị hiểu nhầm (không copy code từ một nơi khác vì dấu ‘ dễ bị nhầm lẫn)
‘, salary = 500000 where Name = ‘Alice’ #
Thay đổi lương của Alice lên 500000!
Trang 13Kết quả:
Trang 14Nhiệm vụ 5.2:
Điều chỉnh lương của người khác Sau khi tăng lương, bạn quyết định trừng phạt ông chủ Boby của mình Bạn muốn giảm lương của anh ta xuống 1 đô la Hãy chứng minh cách bạn có thể đạt được điều đó
Code:
‘, salary = 1 where Name = ‘Boby’ #
Kết quả
Trang 15Nhiệm vụ 5.3
Sửa đổi mật khẩu của người khác Sau khi thay đổi mức lương của Boby, bạn vẫn không hài lòng, vì vậy bạn muốn đổi mật khẩu của Boby thành một thứ mà bạn biết, sau đó bạn có thể đăng nhập vào tài khoản của anh ta và gây thiệt hại thêm
Ta thấy rằng mật khẩu bị băm thông qua hàm sha1, trước khi đổi mật khẩu theo ý, ta cần băm mật khẩu ra mã cần thiết
Mật khẩu đặt là 21110432
Mã băm thu được: e55c076438b7b81463b8d4c5fe56d04a99e6d9df
Quy trình: code
‘, Password = ‘e55c076438b7b81463b8d4c5fe56d04a99e6d9df’ where Name =
‘Boby’ #
Trang 16Đăng nhập với tài khoản của Boby và mật khẩu đã đặt !
Tấn công thành công