常见的一些文件类的危险函数

文件包含

  • include
  • require
  • include_once
  • require_once
  • sql_autoload

文件读取

  • file_get_contents

php://filter 绕过死亡file_put_content() base64 的编码小trick

  • fread
  • readfile
  • file
  • highlight_file()(这玩意虽然是高亮显示代码,但是真的可以文件包含,参考basectf的

ez_php_jail)https://blog.csdn.net/2301_76362117/article/details/142261280

  • show_source

文件写入

  • file_put_contents
  • fwrite
  • mkdir
  • fputs

文件删除

  • unlink
  • rmdir

文件上传

  • move_uploaded_file
  • copy
  • rename

文件上传漏洞

文件上传流程

  • 检查文件大小,后缀,类型
  • 检查文件内容
  • 提取文件后缀
  • 生成新文件名
  • 将上传临时文件拷贝到新文件名位置

文件上传逻辑常见错误

  • 只检查文件类型,不检查文件尾缀
  • 文件后缀黑名单导致遗漏
  • 使用原始文件名,导致\0截断等漏洞

文件上传,什么都没过滤的情况

例子:泛微eoffice三处任意文件上传getshell

特点:常见于路由设备,内部平台等

可使用扫描器批量发现

文件上传,前端验证情况

例子:泛微eoffice三处任意文件上传getshell

JavaScript进行文件名处理,无任何意义

可使用扫描器批量发现

1
2
3
4
<?php
var_dump($_FILES);
move_uploaded_file($_FILES['f']['tnp_nane'], destination './' . $_FILES['f']['nane']);#最简单的文件上传,简单流程就是将上传数据包保存到临时文件,再将文文件保存到本地
?>

文件上传,MineType检查绕过

例子:建站之心任意文件上传漏洞

特点:上传时检查mine-type,不检查文件尾缀

用mine-type生成文件尾缀

利用:修改数据包中的mine-type

可使用扫描器批量发现

(就是改这玩意)

文件上传,没有重命名文件后果(php5.3.4后彻底修复,move_uploaded_file是php5.4.7后修复的)

特点:从post变量中获取文件名(目录名)

服务端语言不检查\0

不重命名文件,导致\0进入系统

截断文件名,留下xxx.php

(就类似这种)

文件上传,.htaccess与.user.ini文件将图片转义成php

看中间件,如果找到上传点而且上传点没有任何文件尾缀限制,那么就可以用

文件包含漏洞

文件包含漏洞 !=文件读取漏洞

php文件包含漏洞危害

文件读取

代码执行

常见位置

模板文件名(切换模板)

语言文件名(切换语言)

文件包含漏洞限制

寻找可包含文件:上传文件,临时文件,session文件,日志文件

后缀无法控制的情况下

攻击思路

(1)配合文件上传进行getshell,上传带有后门代码的图片,触发脚本

(2)配合日志文件进行getshell,日志会记录访问ua信息,访问修改ua信息为后门代码,包含即执行后门代码

(3)配合会话文件进行getshell,伪协议没有上传文件也能进行php代码执行,读文件,写文件(算法的转换),session文件写入

什么过滤也没有的文件包含漏洞

例子:thinksns任意文件包含漏洞

https://qkl.seebug.org/vuldb/ssvid-94293

特点:使用thinkphp框架

可包含任意文件

效果:

包含上传的图片->执行命令

需要/0截断的任意文件包含

点:使用thinkphp框架

没有全局转义

/0不受过滤函数影响

/0截断导致任意文件包含漏洞

限制:

php 5.3.4+对包含\0的文件操作函数进行限制

突破:也有一些疏忽(cve-2015-2348)

可以控制协议的任意文件包含漏洞

例子:Metinfo5.3.10版本getshell漏洞

特点:

可控部分:include $file.’.php’;

http协议利用:http://a.com/1.php

php协议利用:zip/phar

制作包含2.php的压缩包

压缩包利用:zip:///var/www/upload/head/2.jpg#2.php

文件删除漏洞

例子:Discuz!x<3.4任意文件删除漏洞

https://www.cnblogs.com/rabbittt/p/13891301.html

危害:

删除服务器任意文件,dos服务器

删除安装锁定文件,导致环境重置(这也是一般cms判定你有没有将cms部署成功的校验方式,只要把锁定文件删了就可以重置环境)

重新安装,数据库写shell。重置管理员账号密码