標籤:style blog http io os ar 使用 for sp
在之前的博文中曾介紹過如何對ASP網站進行手工注入,ASP網站大都是採用ACCESS或MSSQL資料庫,因而所謂針對ASP的SQL注入其實也就是根據ACCESS或MSSQL資料庫的特點來構造查詢語句。除此之外,對於PHP網站則大都是採用MySQL資料庫,這裡要進行手工注入時所使用的查詢語句與之前就不相同了,而且相對比較複雜。為了更好地理解,在進行針對PHP網站的注入之前,有必要先瞭解一些MySQL的基本特點和常用動作陳述式。
首先需要搭建一個MySQL的實驗環境,這裡推薦在Linux系統中安裝MySQL服務。
掛載光碟片並設定yum源之後,安裝運行mysql服務。
# yum install mysql 安裝mysql
# service mysqld start 運行mysql
MySQL的預設管理員帳號是root,沒有設定密碼,所以可以執行“mysql –u root”命令,以root使用者身份登入MySQL。不過建議最好先用mysqladmin命令工具為root使用者佈建一個密碼,然後用密碼登入MySQL。
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414800260T1J2.png" height="205" />
登入MySQL之後,可以在帶有提示符“mysql>”的互動式命令環境中進行操作。在該作業環境中,輸入的每一條資料庫管理命令必須以分號“;”表示結束,可以不區分大小寫。
(1) 查看基本資料
執行“select version();”命令查看MySQL版本,可以看到目前的版本為5.0.77。
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.77 |
+-----------+
1 row in set (0.00 sec)
執行“select @@version_compile_os;”命令查看作業系統版本,可以看到當前系統為redhat linux。
mysql> select @@version_compile_os;
+----------------------+
| @@version_compile_os |
+----------------------+
| redhat-linux-gnu |
+----------------------+
1 row in set (0.00 sec)
執行“select user();”命令查看目前使用者,可以看到目前使用者為root。
mysql> select user();
+----------------+
| user() |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.07 sec)
執行“select database();”命令查看當前開啟的資料庫,可以看到當前沒有開啟任何資料庫(NULL)。
mysql> select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.01 sec)
(2) 查看資料庫列表
執行“show databases;”命令可以查看MySQL中共包含了哪些資料庫,預設情況下MySQL中內建了3個資料庫:information_schema、mysql、test。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
(3)切換資料庫
執行“use information_schema;”命令,可以開啟information_schema資料庫。
mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
information_schema是MySQL5以後的版本中預設內建的一個資料庫,它裡面存放了由使用者在MySQL中建立的所有其它資料庫的資訊。因而在進行PHP注入時,主要也就是針對這個資料庫進行操作。
(4)顯示資料庫中的表
開啟資料庫之後,執行“show tables;”命令可以顯示資料庫中所包含的表。在information_schema中共包含了17個表。
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| KEY_COLUMN_USAGE |
| PROFILING |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
+---------------------------------------+
17 rows in set (0.00 sec)
在這些表中比較重要的有:
(5)顯示表中的內容
執行“select * from schemata;”命令可以顯示schemata表中的所有內容:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414800261NlEU.png" height="148" />
從命令顯示的結果中可以看到,當前系統中共包含了3個資料庫,這與之前查看到的結果一致。
(6)利用information_schema資料庫查看其他所有資料庫的內容
在瞭解了上述基礎知識之後,我們就可以通過information_schema資料庫來查看到其他所有資料庫中我們所關心的內容。
為了更好的示範,我們先執行“exit”命令退出MySQL環境,然後再重新登入。
登入之後,我們先不開啟任何資料庫。
假如我們想知道mysql資料庫中都包含了哪些表,可以執行命令:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414800261u4Gm.png" height="380" />
由於當前我們並沒有開啟任何資料庫,因而“information_schema.tables”就表示information_shema資料庫中的tables表,前面介紹過,這個表中存放了其他所有資料庫的表的名字。
“table_name”是tables中用於存放表名的欄位,“tables_schema”是tables中用於存放資料庫名的欄位。
再如我們想知道mysql資料庫的user表中包含哪些欄位,可以執行命令:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414800262UUNb.png" height="257" />
掌握了這些知識之後,接下來我們就可以進行手工PHP注入了。
本文出自 “一壺濁酒” 部落格,轉載請與作者聯絡!
網路安全系列之十八 MySQL基本操作(PHP注入基礎)