TÌM HIỂU TẤN CÔNG SQL INJECTION TRONG ORACLE - Tài Liệu Text

Tải bản đầy đủ (.docx) (19 trang)
  1. Trang chủ
  2. >>
  3. Công Nghệ Thông Tin
  4. >>
  5. Cơ sở dữ liệu
TÌM HIỂU TẤN CÔNG SQL INJECTION TRONG ORACLE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (735.58 KB, 19 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃKHOA AN TOÀN THÔNG TINĐỀ TÀITÌM HIỂU TẤN CÔNGSQL INJECTION TRONG ORACLEGiáo viên hướng dẫn: Trần Thị LượngSinh viên thực hiện : Lớp : AT8BHà Nội, tháng 3 năm 2015Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleMỤC LỤC2Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleDANH MỤC HÌNH ẢNHHình 1. Form đăng nhập……………………………………………………….Hình 2. Trang web có nguy cơ bị tấn công …………………………………….Hình 3: Trang web bị lỗi sau khi thực hiện câu lệnh ………………………….Hình 4: Mẫu đăng ký tài khoản ……………………………………………… Hình 5: Trang web trước khi chèn ký tự vào cuối URL ……………………… Hình 6: Trang web sau khi chèn ký tự vào cuối URL ………………………….68101114143Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleLỜI NÓI ĐẦUNgày nay, với sự phát triển mạnh mẽ của internet và công nghệ thông tin, ngày càng xuất hiện nhiều những loại tấn công vào cơ sở dữ liệu của chúng ta. Một trong những hình thức tấn công phổ biến và dễ dàng nhất là tấn công SQL Injection. Với mục đích tìm hiểu về cách tấn công, tác hại, các kỹ thuật tấn công của SQL Injection, nhóm em đã chọn đề tài: tìm hiểu về tấn công SQL Injection trên Oracle 10g (hoặc 11g) để có thể tìm hiểu và đưa ra các biện pháp phòng chống loại tấn công nguy hiểm này.4Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleChương I: Giới thiệu về SQL Injecton1.1. SQL Injection là gì?SQL Injection (còn gọi là SQL Insertion) là một hình thức tấn công trong đó truy vấn SQL của ứng dụng đã bị chèn thêm các tham số đầu vào không an toàn do người dùng nhập vào, từ đó mã lệnh được gửi tới máy chủ chứa cơ sở dữ liệu để phân tích cú pháp và thực thi.Hình thái chính của SQL Injection bao gồm việc chèm trực tiếp mã vào các tham số mà sẽ được ghép vào các câu lệnh SQL (quá trình này gọi là sinh truy vấn SQL động) để tạo thành truy vấn của ứng dụng gửi tới máy chủ cơ sở dữ liệu. Một cách tấn công khác ít trực tiếp hơn, đó là chèn mã độc vào các xâu mà đích đến là việc lưu trữ trong các bảng hoặc từ điển dữ liệu (metadata). Khi các chuỗi đó được ghép vào các câu lệnh SQL thì đoạn mã đó sẽ được chạy.Khi ứng dụng web thất bại trong việc đọc tham số đầu vào (được dùng làm nguyên liệu trong quá trình sinh SQL động), ngay cả khi dùng hình thức tham số hóa thì kẻ tấn công có thể dễ dàng điều chỉnh quá trình xây dựng truy vấn SQL. Một khi kẻ tấn công có thể sửa câu truy vấn SQL thì những truy vấn SQL anh ta muốn sẽ được thực thi với quyền của người sở hữu ứng dụng, và thiệt hại anh ta có thể gây ra tùy theo quyền hạn được cấp.SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao tác người tấn công cần được thực hiện với một trình duyệt web, có thể kèm theo một ứng dụng proxy server. Chính vì đơn giản như vậy cho nên bất cứ ai cũng có thể học cách tiến hành một cuộc tấn công. Lỗi bắt nguồn từ mã nguồn của ứng dụng web chứ không phải từ phía database, chính vì thế bất kỳ thành phần nào của ứng dụng mà người dùng có thể tương tác được để điều khiển nội dung đề có thể được sử dụng để tiến hành chèm truy vấn có hại.SQL Injection thường xảy ra trên các ứng dụng web có cơ sở dữ liệu được quản trị bằng các hệ quản trị như SQL Server, MySQL, Oracle, DB2, Sysbase…1.2. Mục đích của tấn công SQL Injection.- Đánh cắp dữ liệu từ cơ sở dữ liệu.- Thay đổi dữ liệu trong cơ sở dữ liệu.- Đánh sập một website .5Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle1.3. Các dạng tấn công SQL Injection.1.3.1. Dạng tấn công vượt qua kiểm tra đăng nhập.Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web.Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Trong trường hợp này, trang web thường được thiết kế như sau.Mẫu form yêu cầu người dùng nhập tên đăng nhập và mật khẩu:Hình 1. Form đăng nhập.Code xử lí yêu cầu đăng nhập của người dùng:cnn.Open();SqlCommand cmdangnhap = new SqlCommand(); cmdangnhap.Connection = cnn;cmdangnhap.CommandText = "Select * from Users where (Tendangnhap = '" + tendn.Value.ToString() + "') and (Matkhau = '" + Password.Value.ToString() + "')";temp = cmdangnhap.ExecuteReader();if (temp.Read() == true) { Session["dadangnhap"] = 1; Session["tendn"] = temp[0].ToString(); Session["hoten"] = temp[2].ToString(); Session["landangnhap"] = (int)temp[9] + 1; Session["role"] = temp[10].ToString();6Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle temp.Close(); //Tăng số lần đăng nhập thêm 1; SqlCommand cmlandangnhap = new SqlCommand("solandangnhap"); cmlandangnhap.Connection = cnn; cmlandangnhap.CommandType = CommandType.StoredProcedure; cmlandangnhap.Parameters.Add(new SqlParameter("@tendn", SqlDbType.VarChar)).Value = tendn.Value.ToString(); cmlandangnhap.ExecuteNonQuery(); Response.Redirect("index.aspx"); } else { Response.Write("<Script Language='javascript'>"); Response.Write("alert('Tên đăng nhập hoặc mật khẩu không chính xác!')"); Response.Write("</script>"); } }Đoạn code xử lí trên có vẻ như không chứa bất cứ một lỗ hổng về an toàn nào. Người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một lỗi SQL injection. Chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện. Nếu người dùng nhập vào ô tên đăng nhập và mật khẩu là: 'OR '' =’ . Lúc này, câu truy vấn sẽ được gọi thực hiện là:SELECT * FROM USERS WHERE TENDANGNHAP ='' OR ''='' ANDMATKHAU = '' OR ''=''Kết quả là câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của bảng USERS và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.1.3.2. Dạng tấn công sử dụng câu lệnh SELECT.Để sử dụng dạng tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công.Lấy ví dụ một trang web bán sản phẩm. Thông thường sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của ID có tin này.7Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleHình 2. Trang web có nguy cơ bị tấn công.Code xử lý chức năng hiển thị thông tin của sản phẩm thường được viết theo dạng: masp = Request.QueryString.Get("masp"); if (masp != null) { cm.CommandText = "select * from sanpham inner join loaisp on sanpham.maloai = loaisp.maloai where sanpham.masp='" + masp + "'"; cm.Connection = cnn; float lanxem = 0; if (cnn.State.ToString() == "Closed") { cnn.Open(); } dr = cm.ExecuteReader(); dr.Read(); try { gia = float.Parse(dr.GetValue(4).ToString()); luotxem = float.Parse(dr.GetValue(8).ToString()); hinh = dr.GetString(5); tensp = dr.GetString(1); thongtin = dr.GetString(2); keyword = dr.GetString(9);8Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle description = dr.GetString(10); tenloai = " | " + dr.GetString(12); lanxem = float.Parse(dr.GetValue(8).ToString()) + 1; cm.CommandText = "update sanpham set solanxem=" + lanxem + " where masp ='" + dr.GetValue(0).ToString() + "'"; dr.Close(); cm.ExecuteNonQuery(); } catch { } } else { Response.Redirect("index.aspx"); }Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có masp trùng với masp đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một masp hợp lệ bằng cách gán masp cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp, ví dụ như: HRBD’ ORDER BY 16—Lúc này câu truy vấn sẽ trở thành:SELECT * FROM SanPham WHERE Masp = ‘HRBD’ ORDER BY 16 ‘Dấu “ “ trong SQL có nghĩa là chú thích.Mục đích là dùng để loại bỏ các lệnh SQL nằm phía sau dấu “ “.Bằng cách này hacker có thể chèn bất cứ câu lệnh sql nào vào để website thực hiện bằng cách thêm dấu “ ‘ “ và các câu lệnh SQL muốn thực hiện sau địa chỉ url của website.* Ví dụ: để xem thông tin về phiên bản của hệ quản trị CSDL mà website đang dùng ta chèn thêm vào url chuỗi giá trị như sau:'UNION ALL SELECT '1',@@version,'3','4',5,'6',7,'8','9','10','11','12','13','14','15','16-Lúc này câu lệnh truy vấn ban đầu không thành công (vì masp lúc này sẽ là “HRBD-“ mã sản phẩm này không tồn tại) chương trình sẽ thực hiện thêm câu lệnh SELECT phía sau từ khóa UNION (từ khóa này dùng để hợp kết quả của 2 câu lệnh SELECT thành 1).Dưới đây là kết quả khi thực hiện yêu cầu tới địa chỉ: UNION ALL SELECT '1',@@version,'3','4',5,'6',7,'8','9','10','11','12','13','14','15','16' 9Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleHình 3: Trang web bị lỗi sau khi thực hiện câu lệnh.1.3.3. Dạng tấn công sử dụng câu lệnh INSERT.Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin của mình. SQL Injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào.10Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle* Ví dụ: Mẫu dùng để đăng ký tài khoản như sau:Hình 4: Mẫu đăng ký tài khoản.Nếu code xử lí lúc đăng kí có dạng:cnn.Open(); cmdangki.CommandText = "insert into Users(HoTen, Tendangnhap, Matkhau, Email, Gioitinh, NgayDangKi, Solandangnhap) values ('" + hoten.Value.ToString() + "', '" + tentruycap.Value.ToString() + "', '" + matkhau.Value.ToString() + "','" + email.Value.ToString() + "',0 ,1/1/2012, 0)"; cmdangki.Connection = cnn; try { cmdangki.ExecuteNonQuery(); Session["dadangnhap"] = 1; Session["tendn"] = tentruycap.Value.ToString(); Session["hoten"] = hoten.Value.ToString(); Response.Write("<Script Language='javascript'>"); Response.Write("alert('Quá trình đăng kí thành công!');"); Response.Write("window.location= 'index.aspx';"); Response.Write("</script>"); }11Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle catch { Response.Write("<Script Language='javascript'>"); Response.Write("alert('loi');"); Response.Write("</script>"); }Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì nếu ta nhập vào trường thứ nhất ví dụ như: ' + (SELECT TOP 1 Tendn FROM Users) + '. Lúc này câu truy vấn sẽ là: INSERT INTO Users VALUES(' ' + (SELECT TOP 1 Tendn FROM Users) + ' ', 'abc'). Khi đó, lúc thực hiện lệnh INSERT, xem như bạn đã yêu cầu thực hiện thêm một lệnh nữa đó là: SELECT TOP 1 Tendn FROM Users.1.3.4. Dạng tấn công sử dụng stored – procedures.Trong SQL Sever có các database master và trong các database này có các store procude system được lập trình sẵn để thực hiện các công việc cụ thể nào đó. Nếu như hacker chiếm được quyền điều khiển hệ quản trị này và thực hiện truy vấn đến các store này hoặc nguy hiểm hơn là xóa đi database master thì toàn bộ database sẽ bị ảnh hưởng và không hoạt động được.Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống 'sa'. * Ví dụ: nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: '. Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server. Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe. Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền SYSTEM, tương đương mức truy cập ở Windows.Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân: Xp_availablemedia: Hiển thị những ổ đĩa hiện hành trên máy Xp_dirtree: Hiển thị tất cả các thư mục kể cả thư mục con Xp_loginconfig: Lấy thông tin về chế độ bảo mật trên server Xp_makecab: Cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứ tập tin nào mà server có thể truy xuất Xp_ntsec_enumdomain: liệt kê những domain mà server có thể truy vấn.12Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleChương II: Kỹ thuật tấn công SQL Injection và cách phòng chống.2.1. Kỹ thuật tấn công SQL Injection.2.1.1. Tìm kiếm mục tiêu.Có thể dùng các bất kỳ một search-engine nào trên mạng như các trang login, search, feedback…Có thể “custome Search Engine” lại cho phù hợp với yêu cầu của bạn.Một số trang web chuyển tham số qua các field ẩn, phải xem mã html mớithấy rõ.<FORM action= Search/search.asp method= post><input type=hidden name=A value=c></FORM> Một số từ khóa tìm kiếm website bị lỗi có thể tấn công SQL Injection: inurl:php?id=  inurl: product_detail php?id=2.1.2. Kiểm tra chỗ yếu của trang web.Có thể điền thêm một số lệnh trên url, hoặc trên các from login, search,hoặc search để phát hiện lỗi.13Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle* Ví dụ: ta có website có địa chỉ như sau: />Hình 5: Trang web trước khi chèn ký tự vào cuối URL.Sau khi thêm dấu “ ’ ” cuối URL của website:14Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleHình 6: Trang web sau khi chèn ký tự vào cuối URL.Dòng thông báo trong khung chính là điểm nhận biết rằng website này có thể bị tấn công bằng SQL Injection.2.1.3. Nhận dữ liệu qua “database using ODBC error message”.Đây là bước quan trọng nhất và đòi hỏi nhiều kĩ thuật lẫn sự am hiểu về cơ sở dữ liệu.Ta có thể khai thác rất nhiều thông tin của cơ sở dữ liệu ở bước này. * Ví dụ sử dụng câu lệnh:“UNION SELECT 1,2,unhex(hex(group_concat(table_name))),4,5,6,7 FROM INFORMATION_SCHEMA.TABLE WHERE TABLE_SCHEMA=database() “Ta sẽ lấy được tất cả tên của các bảng có trong cơ sở dữ liệu.2.1.4. Thu thập các dữ liệu quan trọng.Từ những dữ liệu tìm được ở bước trên, ta lọc ra các bảng, cột có chứa những dữ liệu quan trọng như tài khoản đăng nhập, mật khẩu,…* Ví dụ sử dụng câu lệnh:“UNION SELECT 1,2,unhex(hex(group_concat(id,0x3a,password))),4,5,6,7 FROM tbl_user”Ta sẽ có id và mật khẩu của tất cả user có trong bảng user.2.1.5. Xử lý kết quả tìm được.Sau khi đã có được các thông tin quan trọng như tài khoản và mật khẩu, tên bảng, tên cột ta có thể tiến hành đăng nhập, thay đổi thông tin bằng câu lệnh UPDATE hoặc thêm một bản ghi mới vào bảng bằng câu lệnh INSERT.2.2. Cách phòng chống tấn công SQL Injection.- Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tàikhoản người dùng mà ứng dụng web đang sử dụng.- Các ứng dụng thông thường nên tránh dùng đến các quyền như “dbo” hay“sa”. Quyền càng bị hạn chế, thiệt hại càng ít. - Loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuốngcho người dùng khi ứng dụng có lỗi.- Kiểm tra chặt chẽ các kí tự nhập vào trước khi thực hiện các lệnh truy vẫn SQL. Viết các hàm xóa bỏ các kí tự đặc biệt từ chuỗi nhập vào như: ‘, “”, , @@, SELECT, UNION, DROP, INSERT, xp_ 15Đề tài 10 – Tìm hiểu tấn công SQL Injection trong Oracle- Tắt thông báo lỗi từ hệ quản trị CSDL. Điều này hạn chế việc tấn công của hacker tuy nhiên website chúng ta vẫn bị lỗi việc này không giúp chúng ta chống lại hoàn toàn sự tấn công.16Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleChương III: Demo tấn công SQL Injection3.1. Công cụ tấn công.- Trình duyệt: Mozilla Firefox.- HackBar phiên bản 1.6.3.3.2. Mục tiêu.- Website: kentshop.com.vn.- Tấn công lấy tài khoản và mật khẩu của các member của trang web này.17Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleKẾT LUẬNVới sự phát triển mạnh mẽ của công nghệ thông tin hiện nay, ngày càng xuất hiện nhiều các loại hình tấn công có chủ đích nhằm vào nơi lưu trữ thông tin, các cơ sở dữ liệu. Thông qua bài báo cáo trên em mong rằng mọi người sẽ có được cái nhìn tổng quan về tấn công SQL Injection, mối nguy hiểm của nó cũng như các cách phòng chống để từ đó phát triển mở rộng tìm hiểu nghiên cứu chuyên sâu hơn. Trong quá trình thực hiện báo cáo còn có những vấn đề chưa được hoàn chỉnh mong thầy cô, bạn bè góp ý để nhóm em hoàn thiện hơn. Qua bài báo cáo trên nhóm đạt được một số kết quả sau: Tìm hiểu khái niệm tấn công SQL Injection và các dạng tấn công của nó. Các bước tiến hành một cuộc tấn công bằng SQL Injection và cách phòng chống.18Đề tài 10 – Tìm hiểu tấn công SQL Injection trong OracleTÀI LIỆU THAM KHẢO1. />19

Tài liệu liên quan

  • Đề tài tìm hiểu tấn công từ DDOS Đề tài tìm hiểu tấn công từ DDOS
    • 30
    • 1
    • 11
  • Sáng tạo trong thuật toán và lập trình trong pascal và C - Lời nói đầu Sáng tạo trong thuật toán và lập trình trong pascal và C - Lời nói đầu
    • 2
    • 697
    • 5
  • Tìm hiểu tấn công Null Session Tìm hiểu tấn công Null Session
    • 8
    • 430
    • 0
  • CHƯƠNG I GIỚI THIỆU VỀ SỰ BIÊN DỊCH CHƯƠNG I GIỚI THIỆU VỀ SỰ BIÊN DỊCH
    • 10
    • 265
    • 0
  • Luận văn Tìm hiểu tấn công DOS - DDOS Luận văn Tìm hiểu tấn công DOS - DDOS
    • 36
    • 809
    • 5
  • đề tài firewall  tìm hiểu tấn công từ chối dịch vụ(dos và ddos) và các chính sách an ninh fw chống tấn công này đề tài firewall tìm hiểu tấn công từ chối dịch vụ(dos và ddos) và các chính sách an ninh fw chống tấn công này
    • 29
    • 1
    • 0
  • Tìm hiểu tấn công Null Session pot Tìm hiểu tấn công Null Session pot
    • 14
    • 459
    • 0
  • Chương I: GIỚI THIỆU VỀ CÔNG NGHỆ THÔNG TIN VÀ CẤU TRÚC MÁY TÍNH pps Chương I: GIỚI THIỆU VỀ CÔNG NGHỆ THÔNG TIN VÀ CẤU TRÚC MÁY TÍNH pps
    • 21
    • 739
    • 1
  • Giáo trình hướng dẫn tìm hiểu cách đưa hình ảnh trong photoshop hay và bổ ích phần 4 ppt Giáo trình hướng dẫn tìm hiểu cách đưa hình ảnh trong photoshop hay và bổ ích phần 4 ppt
    • 13
    • 416
    • 0
  • Chương I: Giới thiệu về cấu trúc của IPv6 pdf Chương I: Giới thiệu về cấu trúc của IPv6 pdf
    • 34
    • 585
    • 0

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

(1.13 MB - 19 trang) - TÌM HIỂU TẤN CÔNG SQL INJECTION TRONG ORACLE Tải bản đầy đủ ngay ×

Từ khóa » Tìm Kiếm Có Dấu Trong Oracle