Web攻防基础篇-文件上传漏洞

文件解析安全问题上,格式解析是一对一的(不能jpg解析php),换句话来说有解析错误配置或后缀解析漏洞时才能实现格式差异解析。

文件上传漏洞

程序或系统未对上传文件作全面的限制,导致用户可以上传某些非法文件(木马,webshell,病毒等)

6b6b4b59dbc4647d0d3f221d1b4dadb2.png

漏洞点分析

1、前端JS验证漏洞

前端验证判断(笨办法):首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了。

绕过方法:

以正确规则上传文件,Bp截包更改后发送。

关闭浏览器JavaScript功能

2、.htaccess(分布式配置文件)

.htaccess文件是apache的分布式配置文件。他负责相关目录下的网页配置,可以帮我们实现:网页301重定向,自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、封禁特定IP地址的用户,只允许特定IP地址的用户,以及使用其他文件作为index文件配置默认文档等功能。

htaccess文件按照查找顺序依次生效,子目录会覆盖父目录目录或者主配置文件中的指令。

绕过方法:

1.匹配文件名为“shell”的文件,该文件作为可执行程序解析

<FilesMatch "shell">

SetHandler application/x-httpd-php

</FilesMatch>

2.jpg文件作为可执行程序执行

<FilesMatch "shell">

AddType application/x-httpd-php .jpg

</FilesMatch>

同理得 .user.ini 【只要是以 fastcgi 运行的php都可以使用这种方法】,如果某网站不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。

da6072a89f14b5b438db5689b80bcc97.png

简单来说,PHP会从当前目录往上一直到根目录扫描INI文件,默认每300s扫描.user.ini并重新加载。

绕过方法:

auto_prepend_file 在页面顶部加载文件

auto_prepend_file 在页面底部加载文件

#两者没啥大的区别,一个在页面上方显示,应该在页面下方显示

也就是说若当前目录存在一个正常的php文件,一个.user.ini文件,一个随便什么php文件,如果.user.ini中写了

auto_prepend_file=xxx.xxx

那么这个正常的php文件就会去自动包含xxx.xxx从而达到getshell的目的。

3、MIME类型

正常上传文件会在数据包中看见一个字段用来定义所上传的文件是什么类型【Content-Type】

94d1dc0ab92a0af3e77976d34e78dc7e.png

绕过方法:、

如果服务器后端对此MIME头进行检测,为“image/jpeg”"image/png" "image/gif"则验证通过可以上传,那么可以通过替换为正常上传文件的MIME头来达到规避检查的效果。

常见的文件上传类型的:

text/plain(纯文本)
text/html(HTML文档)
text/javascript(js代码)
application/xhtml+xml(XHTML文档)
image/gif(GIF图像)
image/jpeg(JPEG图像)
image/png(PNG图像)
video/mpeg(MPEG动画)
application/octet-stream(二进制数据)
application/pdf(PDF文档)
application/(编程语言) 该种语言的代码
application/x-www-form-urlencoded(POST方法提交的表单)
multipart/form-data(POST提交时伴随文件上传的表单)
4、文件头\文件尾判断

不同文件格式具有不同的文件头部部分也有文件尾特征,可以通过16进制进行判断,通常来说常见的文件头尾例如:

11a5de143bb4f212fc193189ed4c4597.png

通过对上传文件的文件头十六进制进行判断,也可验证其是否合法。伪装方法可以直接以16进制进行更改。

5、黑名单拓展名绕过

(1)拓展名列表可能过滤不严格,存在漏网之鱼——比如iis 6.0中的asa和cer

(2)大小写绕过——iis 6.0 中的aSp和linux环境中php小于5.3版本的pHp

(3)能被Web容器解析的文件例如:

jsp,jspx,jspf,asp,asa,cer,cdx,htr,xml,html,aspx,ashx,asmx,asax,ascx等

(4)特殊后缀名绕过

将Burpsuite截获的数据包中php名字改为php4(php1,php2,php3,php4,php5),前提条件是http.conf中设置 AddType application/x-httpd-php .php1(php的版本小于等于5.3.29以下)

(5)利用操作系统文件命令的特性

在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。apache中可以利用点结尾和空格绕过,asp和aspx中可以用空格绕过。

同时在文件名后加上 ::$DATA 之后的数据会被当做数据流过滤掉,同样可以作为绕过方法。

(6)若对后缀名的过滤方法为:将黑名单中的非法字符过滤为空,利用其逻辑漏洞可以通过双写绕过。

6、白名单绕过

(1)配合Web框架解析漏洞

1、IIS6/7·在IIS6.0下存在这样的文件“名字.asp;名字.jpg”代表了jpg文件可以以asp脚本类型的文件执行。asp一句话木马(<%eval request ("pass")%>)·以“xxx.asp”的文件夹里面,里面的文件会以asp脚本运行。

2、Apache解析漏洞--低版本遇到不识别的后缀名,向前解析Apache1.x/2.x解析漏洞,Apache从右向左解析文件,如果不认识就向左挪,比如1.php.abc是个的文件, abc类型的apache不认识,因此就会被解析为php文件,相当于1.php。

(2)%00截断上传绕过

通过抓包截断将 1.asp.jpg 后面的一个.换成%00在上传的时候即1.asp%00jpg,当文件系统读到%00时,会认为文件已经结束,从而1.asp%00jpg的内容写入到1.asp中,从而达到攻击的目的。%00不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截断上传漏洞。

7、条件竞争上传绕过

此漏洞是个逻辑漏洞,原理就相当于不能成功删除一个已经打开的文件。

演示代码:

<?php
$allowtype = array("gif","png","jpg");
$size = 10000000;
$path = "./";
$allowtype = array("gif","png","jpg");
$size = 10000000;
$path = "./";
$filename = $_FILES['file']['name'];
if(is_uploaded_file($_FILES['file']['tmp_name'])){
if(!move_uploaded_file($_FILES[''file][''tmp_name],$path.$filename)){
die(""error:can not move);
}
}else{
die("error:not an upload file!");
}
$newfile = $path.$filename;
echo "file upload success";
if($_FILES['file']['error']>0){
unlink($newfile);
die(""Upload file error: );
}
$ext = array_pop(explode(".",$_FILES['file']['name']));
if(!in_array($ext,$allowtype)){
unlink($newfile);
die('error');
}
?>

这段代码功能首先将文件上传到服务器,然后检测文件后缀名,如果不符合条件,就删掉。利用思路首先上传一个php后门文件,同时当然这个文件会被立马删掉,但我们使用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的php文件,一旦我们成功访问到了上传的文件,那么它就不会被删除。

八、编辑器漏洞

(这没法链接pdf,手册地址“https://navisec.it/编辑器漏洞手册”,需要可私聊)

九、WAF文件上传绕过

(1)垃圾数据填充

考虑到攻防收益,有些主机waf为不影响服务器性能,会对校验的用户数据设置一个上限。如果此时我们构建一个较大的文件,将前面上限数据都为垃圾数据,攻击payload放在后面,那么便可以绕过waf对文件内容的校验。

Content-Type类型数据后添加垃圾数据

上传文件头部添加——绕过对文件名的校验

Content-Disposition:后添加垃圾数据

(2)filename绕过

此方法可以针对早期的安全狗,主要是因为waf解析和协议解析两者不匹配同步的问题。协议会将最后的filename值作为文件名,而waf可能会将第一次解析到的filename作为文件名进行检查。所以当filename1为一个正常的文件名,filename2为可执行解析的文件名,waf并不会检测出问题。

(3)POST与GET方法绕过

有些waf对于文件上传单纯检测以post方法上传的数据包内容,若将post型数据包改为Get,则可以实现绕过。

(4)exee扩展名绕过

上传.exe文件通常会被waf拦截,如果使用各种特性无用的话,那么可以把扩展名改为.exee再进行上传。

(5)单双引号互换绕过

总之waf的绕过方法总的来说可以总结为:

数据溢出

符号变异

数据截断

重复数据

四大类,当然各种奇淫巧技的姿势很多,还得不断总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jetson系列机载电脑创建热点模式配置方法

Jetson nano为例—— 创建热点模式配置方法 1.1、新建一个 WiFi 在屏幕右上角找到网络图标&#xff0c;点击后选择“Edit Connections”选项&#xff0c;进入选择网络连接页面&#xff0c;然后点击左下角加号&#xff0c;新建一个连接&#xff0c;类型选择 WiFi 后点击 “cre…

在TkinterGUI界面显示WIFI网络(ESP32s3)摄像头画面

本实验结合了之前写过的两篇文章Python调用摄像头&#xff0c;实时显示视频在Tkinter界面以及ESP32 S3搭载OV2640摄像头释放热点&#xff08;AP&#xff09;工作模式–Arduino程序&#xff0c;当然如果手头有其他可以获得网络摄像头的URL即用于访问摄像头视频流的网络地址&…

【笔记】从零开始做一个精灵龙女-拆uv阶段

目录 先回顾一下拆uv的基础流程吧 肩部盔甲分UV示例 手环UV部分 腰带UV部分 其它也差不多&#xff0c;需要删掉一半的就先提前删掉一半&#xff0c;然后把不需要的被遮挡的面也删掉 龙角UV 胸甲UV 侧边碎发UV 马尾UV 脸部/耳朵UV 特殊情况&#xff1a;如果要删一半再…

MacOS 安装 Maven 并配置环境变量

一、简介 Maven 是一款基于 Java 平台的项目管理和整合工具&#xff0c;用来构建项目的。也就是清理、编译、测试、运行、打包、安装整个过程都交给 Maven 管理&#xff0c;整个过程就是构建。 二、安装 Java JDK Maven 依赖 Java JDK&#xff0c;如果本机没有安装过 Java 的…

Web后端开发之前后端交互

http协议 http ● 超文本传输协议 &#xff08;HyperText Transfer Protocol&#xff09;服务器传输超文本到本地浏览器的传送协议 是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。 HTTP是一个基于TCP/IP通信协议来传递数据. HTT…

智慧校园-办公管理系统总体概述

智慧校园行政办公系统是专为高校及教育机构定制的数字化办公解决方案&#xff0c;它整合了众多办公应用与服务&#xff0c;旨在全面提升校园行政管理的效率与便捷性&#xff0c;推动信息的自由流动&#xff0c;实现绿色无纸化办公环境。该系统作为一个综合平台&#xff0c;将日…

VMware中的三种虚拟网络模式

虚拟机网络模式 1 主机网络环境2 VMware中的三种虚拟网络模式2.1 桥接模式2.2 NAT模式2.3 仅主机模式 3 网络模式选择及配置NAT模式3.1 VMware虚拟网络配置3.2 虚拟机选择网络模式3.3 Windows主机网络配置 4 配置静态IP 虚拟机联网方式为桥接模式&#xff0c;这种模式下&#x…

c++ 设计模式 的课本范例(下)

&#xff08;19&#xff09; 桥接模式 Bridge&#xff0c;不是采用类继承&#xff0c;而是采用类组合&#xff0c;一个类的数据成员是类对象&#xff0c;来扩展类的功能。源码如下&#xff1a; class OS // 操作系统负责绘图 { public:virtual ~OS() {}virtual void draw(cha…

拼多多滑块逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

基于ssm口红商城管理的设计与实现

一、&#x1f468;‍&#x1f393;网站题目 口红商城项目可以提供更加便捷和高效的购物方式。消费者可以在家中使用电脑或手机随时随地购物&#xff0c;避免了传统购物方式中需要花费时间和精力去实体店铺购物的麻烦。此外&#xff0c;口红商城项目还提供了更多的选择和更低的…

复分析——第8章——共形映射(E.M. Stein R. Shakarchi)

第8章 共形映射(Conformal Mappings) The results I found for polygons can be extended under very general assumptions. I have undertaken this research because it is a step towards a deeper understanding of the mapping problem, for which not much has hap…

C++视觉开发 二.OpenCV基础

目录 本章记录OpenCV开发中的基本操作语法 一.基础 1.读取图像 2.显示图像 3.保存图像 二.图像 1.像素处理 2.彩色图像 三.滤波 1.高斯滤波&#xff08;Gaussian Blur&#xff09; 功能&#xff1a; 高斯滤波是一种常用的线性平滑滤波器&#xff0c;用于降低图像噪声…

v-for中key的原理以及用法

在 Vue.js 中&#xff0c;v-for 指令用于基于源数据多次渲染元素或模板块。当使用 v-for 渲染列表时&#xff0c;为每个列表项提供一个唯一的 key 属性是非常重要的。key 的主要作用是帮助 Vue 跟踪每个节点的身份&#xff0c;从而重用和重新排序现有元素。 先来张原理图&#…

开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“开机提示找不到OpenCL.dll”。那么&#xff0c;这个错误提示到底是怎么回事呢&#xff1f;它又对电脑有什么影响&#xff1f;我们又该如何解决这个问题并预防OpenCL.dll再次丢失呢&#xff1…

基于Ollama Python的本地多模态大模型

0&#xff0c;背景 最近测试Ollama&#xff0c;发现之前直接下载开源模型在我电脑上都跑不动的模型&#xff0c;居然也能运行了&#xff08;AMD 7840HS核显/32GB内存&#xff09;&#xff0c;突发奇想那些多模态大模型能不能基于Python接口使用&#xff0c;所以决定尝试一下。…

网页用事件监听器播放声音

一、什么是监听器&#xff1a; 在前端页面中&#xff0c;事件监听器&#xff08;Event Listener&#xff09;是一种编程机制&#xff0c;它允许开发者指定当特定事件&#xff08;如用户点击按钮、鼠标悬停、页面加载完成等&#xff09;发生时执行特定的代码块。简而言之&#x…

服务器上VMWare Workstation虚拟机声卡支持

问题&#xff1a;联想服务器没有声卡&#xff0c;Windows 服务器安装了VMWare Workstation&#xff0c;里面的Windows 11虚拟机&#xff0c;我远程桌面上来&#xff0c;没有声卡&#xff0c;但是我想做 声音方面的测试就没办法。 解决办法&#xff1a; 服务器主机上安装虚拟机…

5.4符号三角形问题

#include<iostream> #include<stdio.h> using namespace std; int half; int ssum; int cnt0;//减号的个数 int n; int p[100][100]; int countt0; void BackTrack(int s) {if(cnt>half||s*(s-1)/2-cnt>half)return ;if(s>n){countt;return ;}for(int i0;…

RabbitMq教程【精细版一】

一、引言 模块之间的耦合度过高&#xff0c;导致一个模块宕机后&#xff0c;全部功能都不能用了&#xff0c;并且同步通讯的成本过高&#xff0c;用户体验差。 RabbitMQ引言 二、RabbitMQ介绍 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。…

在安装HDFS过程中遇见Permission denied

HDFS Shell命令权限不足问题解决 问题 想必有同学在实战Shell的时候&#xff0c;遇到了&#xff1a; Permission denied: userroot, accessWRITE, inode"/":hadoop:supergroup:drwxr-xr-x 这种类似的问题。 问题的原因就是没有权限&#xff0c;那么为什么呢&#…