记一次Windows下突破PHP上传的实验

本地环境:nginx/1.6.2+PHP/5.3.29OS:Windows

实验代码

upfile.html

<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>

upfile.php

<?php
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));
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/'.$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));
}
?>

上传文件,Burp截断数据包

4853754498500176146.png

修改为123.php:jpg后提交数据包,可以即可在本地创建一个php文件了

但此时的php文件是0字节的,即内容为空

6631699984884610887.png

那么下面要做的就是如何把一句话木马写入到这个123.php文件里了

6631828627745063148.png

修改为123.php<<<再提交数据包即可将一句话写入到123.php文件中

1628614215350558028.png

如何理解这个“<<<”:就如同我们在cmd下用echo hello world > E:\hello.txt的道理一样

6631731870721814333.png

这样理解是否好些?

实验代码是基于黑名单验证的,感兴趣的小伙伴可以尝试其他方法来突破上传,有什么奇淫技巧一定要联系我哦~

参考:http://www.binghesec.com/sec-1907.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值