zoukankan      html  css  js  c++  java
  • OWASP Top 10之文件上传漏洞简析(二)

    0x01.

    在问题一(详见上文)中,获取文件后缀名$file_type = $_FIELS['file']['type'],通过和白名单比较,假如相同,则取上传文件的后缀名。上文说过,MIME头欺骗问题(这里不考虑重命名文件名问题),如果上传数据包修改Content-type的类型,$file_type就获取修改后文件类型。

    如:上传1.php=>burpsuite拦截修改数据包中的Content-Type为:image/jpg=>$file_type="image/jpg",$file_name="1.php"。

    1.GIF89a文件头绕过,程序规定只能上传gif文件,由于获取文件类型也是通过$file_type获取,程序判断上传文件头部信息是否符合白名单类型。

    伪代码:$filetype = fileHeaderRead($uploadFile);if $fileType =='GIF89a' echo 'upload success';

    修改上传webshell里的头部信息,由于GIF代码头部信息是GIF89a,所以webshell里代码:GIF89a<?php code?>

    2.黑名单绕过

    事先规定不允许上传的类型列表,asp|aspx|jsp|php|asa|....

    加入上传shell.cer,或者大小写绕过,shell.Asp/shell.pHp....

    3.后缀名解析漏洞

    IIS6.0/Apache/Nginx(php-fpm)

    常见shell.asp;.jpg,/shell.asp/shell.jpg,shell.php.xxx(apache从右往左解析,不识别,跳到下一个解析)

    4.0x00截断

    上传shell.php.jpg=>burpsuite拦截,在.php后加空格,在十六进制,对应的0x20修改为0x00(空),程序在处理这个文件名时,直接丢弃后面的.jpg,保存的文件名为shell.php

    5.apache重写文件.htaccess。move_uploaded_file()函数,在移动文件时,如果文件存在,新文件直接覆盖旧文件。

  • 相关阅读:
    smtplib文字邮件的发送
    接口测试框架分析
    UnitTest框架的快速构建与运行
    Appium + Python App自动化第一个脚本
    3个必备cookie实用方法
    单元测试框架的选择
    快速构建一个完整的Selenium框架
    SSH原理与运用
    springboot 集成 spring-data-elasticsearch
    Java 集合排序
  • 原文地址:https://www.cnblogs.com/developd/p/4666030.html
Copyright © 2011-2022 走看看