当前位置: 首页 > news >正文

文件上传绕过的小点总结(4)

9.末尾点删除处理缺陷

给出源码:

$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空

试分析,源码想要实现文件名末尾删除"."直到最后不是".",但如果"."之前还有空格,此时还是无法限制非法文件上传。于是我们可以试试". ."即点-空格-点的形式,绕过文件限制。

简单思路:开启BP拦截,上传info.php文件,拦截内容后将"info.php"改为"info.php. .",在关闭拦截,此时就可以成功上传文件。(复制图像地址访问时,要删掉. .)

10.重写绕过

源码碰到这样的:

$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);

这里要说明一个函数str_ireplace($deny_ext,"",$file_name);

第一个参数是所有文件名的黑名单,第三个参数是上传的文件名,该函数意为将如果上传的文件名在黑名单中,则全部替换为空,那也就是我们所有的php等后缀都无法生效,但是我们可以利用这一特点,代码执行从左至右,我们可以嵌套php在php里,例如info.pphphp,代码从左至右运行时,会将中间的php置换为空,就剩下info.php了,刚好文件生效。

文件上传成功。

11.截断欺骗(使用%00)

问题:使用%00还是无法上传

解决:PHP5.3后面的版本已经修复了%00的漏洞,只需要修改两个地方即可。

①将php版本改小;(phpstudy的切换版本里面)②php的magic_quotes_gpc设置关闭状态。(phpstudy的其他选项菜单-PHP扩展及设置-参数开关设置,将magic_quotes_gpc关闭即可)

%00是操作系统的底层漏洞,在文件上传时可以用来截断绕过过滤。

简单理解一下:

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

如果源码中存在这句话,说明进行了严格的参数提取,得到的结果就是:(eg)

save_path=../upload/      filename="123.jpg"

这样对于攻击者没有下手的地方,但是如果我们使用%00截断,就可以绕过。

例如:将路径改为../upload/1.php%00   filename依旧是"123.jpg"

那么代码运行时因为存在漏洞,就可以将%00后面的东西全部截断,看似上传图片文件,实则在服务端上传的时1.php文件。

简单思路:开启BP拦截,上传loudong.jpg文件。

#loudong.jpg的代码如下:
<?php
phpinfo();
?>

上传后,BP拦截数据,将../upload/后面加1.php%00即可。filename不用改。

上传成功复制图像地址,直接访问1.php,如图:

 

相关文章:

  • ubuntu22.04 安装Jitsi meet 开源会议系统,代替腾讯会议
  • 用fofa语法搜索漏洞
  • JMeter JSON断言讲解和错误用例
  • JAVA学习*String类
  • SpringBoot集成MQTT客户端
  • 16种二极管综合对比——《器件手册--二极管》
  • 【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程(持续更新)
  • #MySQL数据库深度瘦身优化技术方案
  • linux常用指令(7)
  • 【Infra】理解代理、反向代理和负载均衡器
  • 【Springboot+JPA】存储过程Procedure使用及踩坑记录
  • Spring 源码硬核解析系列专题(三十二):Spring Cloud LoadBalancer 的负载均衡源码解析
  • [杂学笔记]结构体大小的内存对齐规则、继承与组合的区别、New和malloc的区别、define与const的区别、如何保证线程安全、乐观锁与悲观锁
  • 状态空间模型解析 (State-Space Model, SS)
  • Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?
  • 低代码配置式Web组态解析
  • 运维知识:Linux 密码策略:配置、注意事项与实战详解
  • 新手小白 react-useEffect 使用场景
  • Snowflake 算法的实现
  • PHP开发:小区物业管理缴费小程序uniapp在线报修系统、活动报名、在线商城
  • 临沂网站排名/上海搜索引擎推广公司
  • 网站页脚需要放什么用/企业seo整站优化方案
  • 海口专业做网站/东莞seo公司
  • b2c电子商务模式的三大类型/seo是指什么
  • 做招聘求职网站/津seo快速排名
  • 网站图片被盗连怎么办/南宁百度seo排名优化软件