pkav之当php懈垢windows通用上传缺陷

文章讲述了在Windows、Nginx和PHP环境中,PHP源码中文件上传功能的实现,发现了一个安全漏洞,即利用特定字符可以进行文件类型欺骗并覆盖其他文件。作者展示了如何利用这个漏洞进行实践操作。

环境:

Windows+nginx+php

一、php源码

<?php
//U-Mail demo ...
if(isset($_POST['submit'])){
    $filename = $_POST['filename'];
    $filename = preg_replace("/[^\w]/i", "", $filename);
    $upfile = $_FILES['file']['name'];
    $upfile = str_replace(';',"",$upfile);
    $upfile = preg_replace("/[^(\w|\:|\$|\.|\<|\>)]/i", "", $upfile);
    $tempfile = $_FILES['file']['tmp_name'];
    $ext = trim(get_extension($upfile)); // null
    if(in_array($ext,array('php','php3','php5'))){
        die('Warning ! File type error..');
    }
    if($ext == 'asp' or $ext == 'asa' or $ext == 'cer' or $ext == 'cdx' or $ext == 'aspx' or $ext == 'htaccess') $ext = 'file';
  //$savefile = 'upload/'.$upfile;
    $savefile = 'upload/'.$filename.".".$ext;
    if(move_uploaded_file($tempfile,$savefile)){
        die('Success upload..path :'.$savefile);
    }else{
        die('Upload failed..');
    }
}
function get_extension($file){
    return strtolower(substr($file, strrpos($file, '.')+1));
}
?>

前端源码:

<html>
 <body>
  <form method="post" action="upfile.php" enctype="multipart/form-data">
   <input type="file" name="file" value=""/>
   <input type="hidden" name="filename" value="file"/>
   <input type="submit" name="submit" value="upload"/>
  </form>
 </body>
</html>

二、分析源码

三、那我先随便上传一个

无法上传:

 

在Windows+php+nginx下有特性:

双引号等于点

大于符号等于问号

小于符号等于星号 

因为我们经常了解的%00截断,在Windows里面还有一个111.php:jpg上传的话从jpg处会截断但是我们的php文件为空,而我们可以利用上面所说的特性对其进行覆盖

理论形成实践开始

很明显上传上来了但是没有值

 那我们就可以利用小于号代表星号,星号又代表所有,上传一个空白的php文件

顺利覆盖掉了

 

*2016.3.21 1、Fuzz模块bug修复及性能优化。(感谢孤狼、NoGod等网友提交的bug和反馈!) 2、将软件临时文件清理修改为软件退出时清理,增强用户体验。 *2016.1.20 1、升级自带的验证码识别引擎。 2、优化部分模块。 *2015.12.2 1、修复两处bug,增强和优化部分功能。 *2015.10.30 1、增加对次世代验证码识别引擎2.6.0.1识别库的支持。 *2015.10.21 1、修复已知bug,发布使用帮助手册。 2、优化HTTP代理服务器功能。 3、增加注销会话功能,解决暴力破解测试时,某些系统只能成功暴破一个用户的问题。 4、增加“数字自增长模式”补零功能,勾选补零后,1-100的格式会修正为001、002....100。 5、增强“变体叠加模式”,允许叠加字符串。 6、变体处理规则增加Unix时间戳转换。 *2015.7.24 1、修复已知bug,增强和优化部分功能。 2、增强验证码识别功能,支持四则运算类型的验证码。 *2015.6.25 1、修复目前已知的所有bug。 2、加入了X-Forwarded-For,Client-IP的指定IP段随机伪造。 3、验证码识别支持自定义HTTP请求头部,再也不怕要Referer才能获取验证码等情况了。 4、可以添加批量代理服务器,Fuzz时轮询使用HTTP代理。 5、自动识别次世代验证码识别库版本,自动更换引擎。 *2015.03.23 修复SSL的bug。 *2015.03.22 更新次时代验证码识别引擎动态链接库 *2015.03.19 1、修复重新设置变体后,“变体条件丢弃”功能“应用于变体”处无法实时更新的bug。感谢1c3z@Wooyun提交此bug。 2、修复GET请求中验证码未替换的bug。感谢-_-!orz@Wooyun提交此bug。更多工具请到http://caidaome.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值