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

【Web】vulhub-httpd apache解析漏洞复现(1)

目录

①CVE-2017-15715

②apache_parsing_vulnerability


①CVE-2017-15715

贴出源码:

<?php
if(isset($_FILES['file'])) {$name = basename($_POST['name']);$ext = pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {exit('bad file');}move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {?><!DOCTYPE html>
<html>
<head><title>Upload</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data"><p><label>file:<input type="file" name="file"></label></p><p><label>filename:<input type="text" name="name" value="evil.php"></label></p><input type="submit">
</form>
</body>
</html><?php
}
?>

意思就是上传文件的后缀不能是php,php3,php4,php5,phtml,pht

我们看一下.htaccess配置文件

<FilesMatch \.php$> SetHandler application/x­httpd­php 
</FilesMatch>

 这段代码的作用是告诉 Apache 如何处理以 .php 结尾的请求,确保这些请求能够被正确地解释和执行 PHP 代码,并将结果返回给客户端。

这个$我们很熟悉,在非多行模式下,$会忽略在句尾的%0a。之前就利用%0a换行绕过了preg_match

举个例子

if (preg_match('/^flag$/', $_GET['a']) && $_GET['a'] !== 'flag') {echo $flag;
}

只要传入?a=flag%0a即可 

这里也是一样的道理

 

 

 绕过过滤,写马成功

访问 ,RCE

②apache_parsing_vulnerability

 

贴出源码:

<?phpif (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {die('Unsupported filetype uploaded.');
}$new_name = __DIR__ . '/uploadfiles/' . $_FILES['file_upload']['name'];
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){die('Error uploading file - check destination is writeable.');
}die('File uploaded successfully: ' . $new_name);else:
?>
<form method="post" enctype="multipart/form-data">File: <input type="file" name="file_upload"><input type="submit">
</form>
<?php
endif;

 原理:

apache通过查看mime.types文件来查看是否能够识别上传文件的文件类型。在/etc/mime.types文件中记录了大量的文件后缀和mime类型。Apache文件解析漏洞涉及一个解析文件的特性:Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别(不在mime.types内),则继续向左识别。

如果在Apache 的 配置文件里有这样一行配置

AddHandler application/x-httpd-php .php

AddHandler不是用正则去匹配后缀的。所以 ,在文件名的任何位置匹配到php后缀,它都会让php_module解析 。

在有多个后缀的情况下,只要一个文件含有`.php`后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞

实操:

改文件后缀,上传,写马成功

 访问,RCE

相关文章:

  • 005、数据类型
  • 油猴脚本开发,之如何添加html和css
  • nodejs+vue+ElementUi农产品团购销售系统zto2c
  • 速盾cdn:cdn加速原理是什么
  • 【23.12.30期--Spring篇】Spring的AOP介绍(详解)
  • 前端axios与python库requests的区别
  • chrome扩展程序开发之在目标页面运行自己的JS
  • python常见报错信息!错误和异常!附带处理方法
  • Spring Cloud - Eureka原理、注册、搭建、应用(全过程详解)
  • flask文件夹列表改进版--Bug追踪
  • 2023年新一代开发者工具 Vue ,正式开源!
  • Power BI - 5分钟学习合并文件
  • 【前端面经】即时设计
  • 通过数字证书对PDF电子文件进行数字签名/盖章
  • 【JavaWeb学习-第四章(1)】Ajax
  • 10个最佳ES6特性 ES7与ES8的特性
  • CentOS7 安装JDK
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JSDuck 与 AngularJS 融合技巧
  • k8s如何管理Pod
  • Linux Process Manage
  • passportjs 源码分析
  • Promise初体验
  • SpringBoot几种定时任务的实现方式
  • swift基础之_对象 实例方法 对象方法。
  • Terraform入门 - 3. 变更基础设施
  • windows下如何用phpstorm同步测试服务器
  • 缓存与缓冲
  • 将回调地狱按在地上摩擦的Promise
  • 解决iview多表头动态更改列元素发生的错误
  • 你真的知道 == 和 equals 的区别吗?
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用 Docker 部署 Spring Boot项目
  • 使用Swoole加速Laravel(正式环境中)
  • 自定义函数
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • "无招胜有招"nbsp;史上最全的互…
  • #单片机(TB6600驱动42步进电机)
  • (二)c52学习之旅-简单了解单片机
  • (一)UDP基本编程步骤
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (正则)提取页面里的img标签
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (轉貼) UML中文FAQ (OO) (UML)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .md即markdown文件的基本常用编写语法
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net 获取url的方法
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net反编译的九款神器
  • .net实现头像缩放截取功能 -----转载自accp教程网