Lab 5. SQL Injection | Tài liệu môn An toàn thông tin Trường đại học sư phạm kỹ thuật TP. Hồ Chí Minh
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. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!
Môn: An toàn thông tin (INSE330380)
Trường: Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Thông tin:
Tác giả:
Preview text:
Lab 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/host
# vi /etc/ apache2/sites-available/ 000-default.conf
2. Get Familiar with SQL Statements mysql -u root -pseedubuntu Xem các database đang có: Show database; Xem DB User; Use 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.
Xem thông tin của nhân viên có tên Alice:
3. 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à
khô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’ # Kết quả thu được
Đăng nhập thành công với user admin và xem được thông tin trên database
4. SQL Injection Attack on UPDATE Statement
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’ #
5. 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 !
Thự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 = 199000 where Name = ‘Alice’ #
Thay đổi lương của Alice lên 199000! Kết quả:
• Nhiệ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ả
• Nhiệ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à 19133045
Mã băm thu được: aad423cd42993ba7c737a6e19059b70ab6dcd489 Quy trình: code
‘, Password = ‘aad423cd42993ba7c737a6e19059b70ab6dcd489’ where Name = ‘Boby’ #
Đă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