banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận thâm nhập MySQL không cho thực thi hơn 1 truy vấn?  XML
  [Question]   MySQL không cho thực thi hơn 1 truy vấn? 04/06/2008 01:09:00 (+0700) | #1 | 134006
[Avatar]
lovestormknx
Member

[Minus]    0    [Plus]
Joined: 31/12/2006 16:39:16
Messages: 44
Offline
[Profile] [PM] [WWW]
Mình giả lập 1 lỗi SQL injection đơn giản nhất trên website của mình để thử khai thác lỗi này (viết bằng PHP, dùng MySQL) nhưng hình như MySQL không cho truy vấn >1 câu query? Mình xuất câu truy vấn sau khi đã chèn mã tấn công vào, copy vào phpMyadmin thì chạy được nhưng chạy trên trình duyệt thì không.

Vậy mình không thể khai thác lỗi SQL injection trên CSDL dùng MySQL?
[Up] [Print Copy]
  [Question]   Re: MySQL không cho thực thi hơn 1 truy vấn? 04/06/2008 10:46:31 (+0700) | #2 | 134070
lamer
Elite Member

[Minus]    0    [Plus]
Joined: 26/02/2008 13:28:49
Messages: 215
Offline
[Profile] [PM]
MySQL cho phép chạy nhiều truy vấn bằng cách nối các câu truy vấn đó với nhau qua dấu chấm phẩy (smilie.

Ví dụ:

use test; show tables;

Đó là 2 câu truy vấn và khi bạn dùng mysql_query('...') thì hai câu truy vấn này sẽ được thực thi ngay.
[Up] [Print Copy]
  [Question]   Re: MySQL không cho thực thi hơn 1 truy vấn? 04/06/2008 12:56:15 (+0700) | #3 | 134088
[Avatar]
lovestormknx
Member

[Minus]    0    [Plus]
Joined: 31/12/2006 16:39:16
Messages: 44
Offline
[Profile] [PM] [WWW]
Mình có câu query:

Code:
$sql = "select * from customers where id =".$_GET['id'];


Mình chạy link sau tới trang test

http://localhost:8080/test/test1.php?id=134

Rõ ràng là có lỗi Sql Injection ở đây, mình sửa lại link trên thành:

http://localhost:8080/test/test1.php?id=134; delete from customers where id=134--

Lỗi:

Can't use foo : 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 '; delete from customers where id = 134--' at line 1

Xuất câu truy vấn ra:

select * from customers where id =134; delete from customers where id = 134--

Copy vào phpMyadmin thì chạy được!

Mình tìm hiểu thì biết MySQL nó chống SQL Injection nên không cho thực thi câu query kép như trên. Vấn đề của mình là thế, vậy Injection với MySQL như thế nào đây?


[Up] [Print Copy]
  [Question]   Re: MySQL không cho thực thi hơn 1 truy vấn? 04/06/2008 20:00:48 (+0700) | #4 | 134097
lamer
Elite Member

[Minus]    0    [Plus]
Joined: 26/02/2008 13:28:49
Messages: 215
Offline
[Profile] [PM]
Đây là hạn chế của PHP mysql_query(). Nếu bạn muốn thực thi nhiều lệnh trực tiếp thì phải dùng mysqli_multi_query().
[Up] [Print Copy]
  [Question]   Re: MySQL không cho thực thi hơn 1 truy vấn? 05/06/2008 00:43:20 (+0700) | #5 | 134126
[Avatar]
lovestormknx
Member

[Minus]    0    [Plus]
Joined: 31/12/2006 16:39:16
Messages: 44
Offline
[Profile] [PM] [WWW]
Vậy Injection với MySQL như thế nào đây?
[Up] [Print Copy]
  [Question]   Re: MySQL không cho thực thi hơn 1 truy vấn? 05/06/2008 00:49:34 (+0700) | #6 | 134127
lamer
Elite Member

[Minus]    0    [Plus]
Joined: 26/02/2008 13:28:49
Messages: 215
Offline
[Profile] [PM]
Câu hỏi của bạn đơn giản, nhưng câu trả lời sẽ rất là dài. Nếu bạn có thời gian thì xin đọc qua The Web Application Hacker's Handbook của nhà xuất bản Wiley. Cuốn sách này có nhiều kỹ thuật rất hay.

Để trả lời trực tiếp câu hỏi "làm sao thực hiện hai lệnh mysql qua PHP mysql_query" thì không có cách. Tuy nhiên, với trí tưởng tượng của mình, bạn có thể thực hiện được vài lệnh ghép ví dụ như UNION SELECT, truy vấn con, v.v...
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|