php的文件上传

🎼个人主页:金灰

😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨

专注网络空间安全服务,期待与您的交流分享~

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~

免责声明:本文仅做技术交流与学习...

目录

上传过程

构造 

---发现:

漏洞

例子:双写绕过

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

2 php文件上传的 00截断

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

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

web服务器的解析漏洞绕过

apache(-httpd)

a 多后缀解析漏洞

b ImageMagic组件白名单绕过

nginx

IIS


上传过程

 

构造 

<?php
var_dump($_FILES); //显示上传的信息.
//所有的上传信息都是放到$_FILES超全局变量里面.
<form action="index.php" enctype="multipart/form-data" method="post">
    <input name="file" type="file"/>
    <input type="submit" value="upload"/>
</form>

强制上传---访问

---->返回上传的所有的信息.

<?php
var_dump($_FILES); //显示上传的信息.
//array(1) {
//    ["file"]=>
//  array(5) {
//        ["name"]=>
//    string(5) "1.txt"
//        ["type"]=>
//    string(10) "text/plain"
//        ["tmp_name"]=>
//    string(22) "C:\Windows\phpE5EF.tmp"
//        ["error"]=>
//    int(0)
//    ["size"]=>
//    int(6)
//  }
//}
$file = $_FILES['file'];    //file与html的name属性一致.
//echo $file['name'];

move_uploaded_file($file['tmp_name'],"./upload/".$file['name']);    //核心--移动上传的文件到指定的目录.
//移动文件,从临时目录里移动.(用就拿走,不用就删了)
//成功上传
//上传图片试一下也, 访问/upload/文件名字   -->成功实现图片上传

# 从数组里面拿字段:
//$file['name']; //上传的原始文件名称'
//$file['tmp_name']; //上传后,临时存放文件的路径.   (改不了)
//$file['type'];
echo '<br>';
echo $file['name'];
echo '<br>';
echo $file['tmp_name'];
echo '<br>';
echo $file['type'];

?>

---发现:

我们客户端只有name 和 type 可以改, tmp_name 字段是改不了的.

<form action="index.php" enctype="multipart/form-data" method="post">
    <input name="file" type="file"/>
    <input type="submit" value="upload"/>
</form>

<!--
文件上才能的参数名字 file 是否可以修改?		--可以改呀
$file = $_FILES['file'];
与php文件里的名字一样就行.
(保证两者是一致的就行,默认是file)
-------就是个名字,与前面参数的value值保持一致就行.
-->


漏洞

文件上传---对服务端的一个写操作

例子:双写绕过

一个文件上传按钮

会将php改为空
.php
.php2php
.phpphp
.pphphp		(中间加一个php---双写绕过)

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

1 php的文件上传绕过 黑名单绕过
后缀替换为空时,我们通过提交  1.pphphp 替换php为空后,得到1.php   成功写入木马

php不行时:上传 看看能不能解析.
php3 php5 phps phtml

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

2 php文件上传的 00截断

2 php文件上传的 00截断
(非常古老,需要版本符合)考虑到吗能
  hello world
  hello空格world\n\00     (真实字符)\00为一个字符,表示结束.

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

  00字符截断需要的版本:
  php版本小于5.3.4  而最新的php版本已经达到8.3及以上
  java版本小于7u40,而最新的java版本已经达到20以上

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

3 iconv字符转换异常后造成了字符截断(老版本才适用)
  (函数)
php在文件上传场景下的文件名字符集转换时,可能出现截断问题
utf-8字符集--->  默认的字符编码范围的是 0x00-0x7f
iconv转换的字符不在上面这个范围之内,低版本的php会报异常,报了异常以后,后续字符不再处理,就会造成截断问题.

  123.php%df.jpg   123.php

php版本低于5.4才可以使用 


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

web服务器的解析漏洞绕过

apache(-httpd)

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图片,来实现组件的缺陷导致任意代码执行.

nginx

 基于错误的nginx配置 和 php-fpm配置

 nginx  基于错误的nginx配置 和 php-fpm配置,当我们访问  123.txt/123.php  ,如果是php后缀,就交给php-fpm,
         cgi.fix_pathinfo 默认开启.
         解析123.txt/123.php  ,当123.php不存在时,会找/前面的文件进行php解析,这时候,就成功解析了123.txt为php脚本了
         上传 123.txt ,访问时  /123.txt/123.php 即可.

 


IIS

iis6.0版本

 iis(windows自带--启用或关闭windows功能里)   Windows下使用
         iis6.0版本中,如果解析的目录名字为 xxx.asp
         那么里面的所有文件,都会按照asp来解析 123.txt  WindowsXP  Windows Server 2003
 ---->   (控制一个目录为xxx.asp 就行了)

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值