PHP文件上传

php的文件上传

/tmp/php??????

1 php的文件上传绕过 黑名单绕过

后缀替换为空时,我们通过提交 1.pphphp 替换php为空后,得到1.php 成功写入木马

php3 php5 phps phtml

php后缀替换为txt时,我们无法双写绕过,1.pphphp 1.ptxthp

2 php文件上传的00截断(古老漏洞)

  • hello world
  • hello空格world\n\00
  • 123.php 明显不让直接上传
  • 123.php%00.jpg 那么后台判断的时候,取最后一个点后面的字符作为后缀 jpg 看起来是合法的文件名称
./upload/123.php%00.jpg   ->  ./upload/123.php

00字符截断需要的版本

  • php版本小于5.3.4 而最新的php版本已经达到8.1
  • java版本小于7u40,而最新的java版本已经达到20以上

例题web43

3 iconv字符转换异常后造成了字符截断

php在文件上传场景下的文件名字符集转换时,可能出现截断问题

utf-8字符集 默认的字符编码范围的是0x00-0x7f

iconv转换的字符不在上面这个范围之内,低版本的php会报异常,报了异常以后,后续字符不再处理

就会造成截断问题

 123.php%df.jpg   123.php

php版本低于5.4才可以使用

4 文件后缀是白名单的时候的绕过

  • 白名单:只准上传这几个后缀 因为匹配的内容少 所以限制的范围就大
  • 黑名单:不准上传这几个后缀 因为匹配的内容多 所以限制的范围就小 仅限于自己制定的几个,除了这几个,其他都行

web服务器的解析漏洞绕过

1. apache

a 多后缀解析漏洞 当我们上传apache不认识的后缀时,apahce会继续往前找后缀,找到认识的就解析执行

123.txt.ctfshow 123.txt 文本文档形式解析

123.php.ctfshow 123.php 就交给中间件处理php脚本

b ImageMagic 组件白名单绕过

目标主机按照了这个漏洞版本的ImageMagic插件 <=3.3.0
在php.ini中启用了这个插件
通过了php new Imageick 对象的方式来处理图片
且 php版本大于 5.4时才可以使用,上传特定的svg图片,来实现组件的缺陷导致任意代码执行

2. nginx 基于错误的nginx配置 和 php-fpm配置,当我们访问 123.txt/123.php

cgi.fix_pathinfo 默认开启 123.txt/123.php123.php不存在时,会找/前面的文件进行php解析,这时候,就成功解析了123.txt为php脚本了

3. iis Windows下使用 iis6.0版本中,如果解析的目录名字为 xxx.asp 那么里面的所有文件,都会按照asp来解析 123.txt WindowsXP Windows Server 2003

高级文件绕过

1 .htaccess nginx.htaccess

php.ini //最大配置文件

虚拟主机时代 一个物理服务器,里面可能存放几十上百个网站 每个网站,一个目录

  • A 网站 需要这样的php.ini配置
  • B 网站 却需要那样的php.ini配置
  • C 网站 又需要另外的php.ini配置

总的php.ini不动,A B C 3个网站分别在自己目录定义自己的配置,作用域也仅限于自己目录

自定义配置文件 .htaccess nginx.htaccess

nginx下,默认使用.user.ini 配置文件来进行php的配置

使用auto_append_file=123.txt 来让任意的php文件包含123.txt,执行里面的php代码

疑问:为什么使用.user.ini来自动附加文件的时候,需要一个php文件呢

利用[例题web44][2]    

2 服务端内容检测

不局限检测文件名,还会检测文件的后缀 文件的内容,更加严格了

<?php system eval $_POST

二分法确定出被检
利用例题web45

3 配合伪协议来绕过

利用例题web46
利用例题web47

4 配置日志包含绕过

5 上传html来xss 执行跨站脚本

6 getimagesize函数绕过,测大小

getimagesize函数来检测是不是图片,而不采取其他措施的情况下,如果一旦绕过getimagesize函数,就可以实现任意文件上传

XBM 格式图片
#define %s %d 这种形式,就认为时XBM图片的高或者宽,伪装
利用例题web48
利用例题web49

7 png二次渲染绕过

正常做法:move_uploaded_file 方式移动我们上传的临时文件到上传目录去

二次渲染做法:通过imagepng方法来,来动态依据我们上传的图片的二次生成一个png图片 里面的php代码就会被清洗掉

所以,我们需要使用特殊的方式,来构造我们的图片
利用例题web50

8 jpg二次渲染绕过

使用专用图来生成jpg木马,实现经过二次渲染后,我们的恶意代码,依然能够保留在图片中,通过文件包含,执行里面的php代码

9 phar文件上传绕过

本文链接:

https://youngking.xyz/index.php/archives/707/