SVTH: Hoàng Minh Tuấn
Chương 3: Demo
3.1 Demo Form Login
3.1.1 Những công cụ sử dụng
Netbeans 6.9.1
Microsoft Access 2003
Lý do chọn 2 công cụ trên:
Tuy Microsoft Access 2003 là cơ sở dữ liệu cũ, và thiếu tính chuyên nghiệp cao, nhưng demo này chỉ mang tính nghiên cứu cơ bản về lỗ hổng SQL Injection, để có cái nhìn trực quan hơn về phương pháp tấn công này, nên ở đây sử dụng những công cụ mang tính chất vừa phải để thực hiện. Những công cụ mới và mang tính chuyên nghiệp hơn như Microsoft SQL Server 2008, hay cơ sở dữ liệu của MySQL tích hợp vào Xampp,… đều đã vá lỗi cơ bản này nên không thực hiện được. Sau đây là phần dựng demo.
3.1.2 Xây dựng kịch bản tấn công
Dùng Netbeans tạo Form đăng nhập như sau:
Cơ chế hoạt động của Form như sau:
Cơ sở dữ liệu dùng trong Demo này sẽ là:
Password sẽ không được mã hóa thành kí tự “*” để tiện cho việc theo dõi kết quả Demo
3.1.3 Source code Form đăng nhập:
// đây là code do chương trình sinh ra
3.1.4 Thực hiện Demo
Đầu tiên, thử đăng nhập đúng với username là admin và password là admin
Sau đó, đăng nhập sai. Đầu tiên là sai username, sau đó sẽ là sai password
Thử tấn công bằng câu lệnh trong phần nghiên cứu lý thuyết trên, nhập vào như sau:
Lỗi sẽ hiện ra:
Vì sao lại như vậy? Bởi vì tuy SQL là một chuẩn, nhưng mỗi cơ sở dữ liệu tuy giống nhau về cú pháp nhưng từng loại lại có một chút đặc trưng riêng khác nhau hoặc ứng dụng cơ sở dữ liệu đã được nhà sản xuất sửa lại theo thời gian.
Tiếp tục, thử nhập vào:
Chương trình sẽ lại tiếp tục báo lỗi:
Tiếp tục, thử bỏ kí tự “;” đi
Sẽ có thông báo:
Từ câu truy vấn bất thường 1, 2 và 3, có thể thấy kí tự “;” và “--“( 2 gạch nối) không thể sử dụng trong truy vấn này. Nhưng cũng từ 3 câu truy vấn trên, có thể suy luận ra được câu truy vấn nên dùng để tiến hành tấn công SQL Injection. Cụ thể như sau:
Hình 3.14. Câu truy vấn bất thường 4 thành công khi chèn câu lệnh SQL vào và vượt qua kiểm tra đăng nhập
Có thể thấy được cú pháp câu lệnh SQL chèn vào sẽ như sau:
Username: [chuỗi bất kì] ‘ OR 1 = 1 OR ‘
Password: [chuỗi bất kì]
Phân tích: ở câu truy vấn 1, có thể thấy được kí tự “--“ không thể dùng được vì câu truy vấn chưa hoàn hảo. Câu truy vấn 2 cho thấy kí tự “;” cũng không dùng được. Tương tự với câu truy vấn 3, nếu để ý sẽ thấy kí tự “ ‘ “ ( dấu nháy) báo hiệu câu querry không hoàn chỉnh. Kết hợp 3 câu truy vấn tấn công không thành công ở trên, có thể tìm ra câu querry cần chèn vào.
Đón xem 3.2 Tấn công demo trên Web
Chương 3: Demo
3.1 Demo Form Login
3.1.1 Những công cụ sử dụng
Netbeans 6.9.1
Microsoft Access 2003
Lý do chọn 2 công cụ trên:
Tuy Microsoft Access 2003 là cơ sở dữ liệu cũ, và thiếu tính chuyên nghiệp cao, nhưng demo này chỉ mang tính nghiên cứu cơ bản về lỗ hổng SQL Injection, để có cái nhìn trực quan hơn về phương pháp tấn công này, nên ở đây sử dụng những công cụ mang tính chất vừa phải để thực hiện. Những công cụ mới và mang tính chuyên nghiệp hơn như Microsoft SQL Server 2008, hay cơ sở dữ liệu của MySQL tích hợp vào Xampp,… đều đã vá lỗi cơ bản này nên không thực hiện được. Sau đây là phần dựng demo.
3.1.2 Xây dựng kịch bản tấn công
Dùng Netbeans tạo Form đăng nhập như sau:
Cơ chế hoạt động của Form như sau:
- Username: nhập ID vào
- Password dùng để nhập password vào
- Khi nhập đúng Username và Password và bấm Login thì sẽ hiện lên thông báo:
- Dang nhap thanh cong!
- Password da dang nhap vao la:
- Dòng “Dang nhap thanh cong!” cho biết là Username và Password đã hợp lệ.
- Dòng “Password da dang nhap vao la:” để tiện kiểm tra lại password đã được nhập vào trong Demo này.
- Khi nhập sai Username và Password và bấm Login thì sẽ hiện lên thông báo:
- Sai user hoac password!
- Password da dang nhap vao la:
- Dòng “Sai user hoac password!” cho biết đã nhập sai một trong 2 giá trị Username hoặc Password
- Dòng “Password da dang nhap vao la:” để kiểm tra lại password đã được nhập vào
- Khi truy vấn, chương trình sẽ nhận username từ khung Username và password từ khung Password; sau đó sẽ dò vào bảng User so sánh 2 kết quả này với cơ sở dữ liệu đã được lưu vào.
Cơ sở dữ liệu dùng trong Demo này sẽ là:
Password sẽ không được mã hóa thành kí tự “*” để tiện cho việc theo dõi kết quả Demo
3.1.3 Source code Form đăng nhập:
/**
* @author Hoang Minh Tuan
*/
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SQL_Injection extends javax.swing.JFrame {
String user="";
String pass="";
static Connection con;
static Statement stm=null;
public SQL_Injection() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
* @author Hoang Minh Tuan
*/
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SQL_Injection extends javax.swing.JFrame {
String user="";
String pass="";
static Connection con;
static Statement stm=null;
public SQL_Injection() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
3.1.4 Thực hiện Demo
Đầu tiên, thử đăng nhập đúng với username là admin và password là admin
Sau đó, đăng nhập sai. Đầu tiên là sai username, sau đó sẽ là sai password
Thử tấn công bằng câu lệnh trong phần nghiên cứu lý thuyết trên, nhập vào như sau:
Lỗi sẽ hiện ra:
Vì sao lại như vậy? Bởi vì tuy SQL là một chuẩn, nhưng mỗi cơ sở dữ liệu tuy giống nhau về cú pháp nhưng từng loại lại có một chút đặc trưng riêng khác nhau hoặc ứng dụng cơ sở dữ liệu đã được nhà sản xuất sửa lại theo thời gian.
Tiếp tục, thử nhập vào:
Chương trình sẽ lại tiếp tục báo lỗi:
Tiếp tục, thử bỏ kí tự “;” đi
Sẽ có thông báo:
Từ câu truy vấn bất thường 1, 2 và 3, có thể thấy kí tự “;” và “--“( 2 gạch nối) không thể sử dụng trong truy vấn này. Nhưng cũng từ 3 câu truy vấn trên, có thể suy luận ra được câu truy vấn nên dùng để tiến hành tấn công SQL Injection. Cụ thể như sau:
Hình 3.14. Câu truy vấn bất thường 4 thành công khi chèn câu lệnh SQL vào và vượt qua kiểm tra đăng nhập
Có thể thấy được cú pháp câu lệnh SQL chèn vào sẽ như sau:
Username: [chuỗi bất kì] ‘ OR 1 = 1 OR ‘
Password: [chuỗi bất kì]
Phân tích: ở câu truy vấn 1, có thể thấy được kí tự “--“ không thể dùng được vì câu truy vấn chưa hoàn hảo. Câu truy vấn 2 cho thấy kí tự “;” cũng không dùng được. Tương tự với câu truy vấn 3, nếu để ý sẽ thấy kí tự “ ‘ “ ( dấu nháy) báo hiệu câu querry không hoàn chỉnh. Kết hợp 3 câu truy vấn tấn công không thành công ở trên, có thể tìm ra câu querry cần chèn vào.
Đón xem 3.2 Tấn công demo trên Web
Comment