PHP文件上传漏洞原理以及防御姿势

PHP文件上传漏洞

本文用到的代码地址:https://github.com/Levones/PHP_file_upload_vlun,好评请给小星星,谢谢各位大佬!

0x00 漏洞描述

​ 在实际开发过程中文件上传的功能时十分常见的,比如博客系统用户需要文件上传功能来上传自己的头像,写博客时需要上传图片来丰富自己的文章,购物系统在识图搜索时也需要上传图片等,文件上传功能固然重要,但是如果在实现相应功能时没有注意安全保护措施,造成的损失可能十分巨大,为了学习和研究文件上传功能的安全实现方法,我将在下文分析一些常见的文件上传安全措施和一些绕过方法。

​ 我按照最常见的上传功能–上传图片来分析这个漏洞。为了使漏洞的危害性呈现的清晰明了,我将漏洞防御措施划分为几个不同的等级来作比较

0x01 前端HTML页面代码

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>
    file_upload_test
</title>
<body>
<form enctype="multipart/form-data" action="upload_1.php" method="POST" />
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
选择你要上传的图片:
<br />
<input name="uploaded" type="file" /><br />
<br />
<input type="submit" name="Upload" value="上传" />
</form>
</body>
</html>

前端的实现代码均为以上。界面如下图:

Cq0S4e.png

0x01 零防御的PHP上传代码

源代码 upload_0.php

<?php
if (isset($_POST['Upload'])) {
    $target_path = "uploads/";
    $target_path = $target_path . basename( $_FILES['uploaded']['name']);
    if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
        echo '<pre>';
        echo '您的图片上传失败.';
        echo '</pre>';
    } else {
        echo '<pre>';
        echo $target_path . '文件已经成功上传!';
        echo '</pre>';
    }
}
?>

这段PHP代码对上传的文件没有任何的过滤,只是将上传的文件直接存储到了网站uploads文件夹下,此时如果我们上传一个一句话木马并通过浏览器访问加上参数的地址或者使用中国菜刀直接连接,就可以为所欲为了。

//一句话木马
<?php eval($_GET['cmd']);
  • 17
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值