渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞
上传本地验证绕过
上传服务器验证绕过
文件解析漏洞
解析漏洞主要说的是一些特殊文件被IIS、Apache、Nginx在某些情况下解释成脚本文件格式的漏洞。
IIS 5.x/6.0解析漏洞
一般是配合编辑器使用(CKFinder、fck这两个编辑器是可以创建目录的)
IIS6.0解析漏洞利用方法有两种:
1、目录解析
/xx.asp/xx.jpg
在网站下建立文件夹的名字为.asp、.asa的文件夹,启母路内的任何扩展名的文件都会被IIS解析成asp文件来解析并执行。
例如创建目录xx.asp,那么/xx.asp/1.jpg将会被当做一个asp文件来执行,假设hacker可以控制上传文件夹的路径,就可以不管你上传后的文件改不改名字都可以得到shell
2、文件解析
前提是上传后的文件名不被改变
xx.asp;.jpg (分号解析,分号前是一个文件,分号后是另一个文件)
第二种,在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg会被服务器看成是xx.asp,还有IIS6.0默认的是可执行文件除了asp还有以下三种:
/xx.asa
/xx.cer
/xx.cdx
Apache解析漏洞
Apache是从右到左开始判断解析,如果为不可识别的解析,就在往左判断(可以使用x.php.、x.php_)
比如xx.php.owf.rar,“.awf”和“.rar”这两种后缀是Apache不可识别的解析,Apache就会把后缀上述的文件解析成php文件
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个xx.php.rar.jpg.png…….将所知的所有文件后缀名都列举出来,去测试是不是合法的。任意不识别的后缀,逐级向上识别。
IIS7.0/IIS7.5/Nginx<8.03畸形解析漏洞
在默认的Fast-CGI开启的状况下,hacker上传一个名字为x.jpg,内容是<?php fputs(fopen(‘shell.php’,’w’)’,<?php eval($_POST[cmd])?>’);?>的文件,然后访问x.jpg/.php,在这个路径下就会生成一句话木马shell.php。
www.xx.com/logo.gif/*.php触发漏洞,漏洞姐会把勤勉的文件当做php文件执行
x.asp00jieduan%jpg
a.asp.a;.x.aspx.jpg..jpg 第二种解析漏洞
或者直接上传x.asp
IIS+PHP的都可以在图片的后面=/.php,看是否可以以php执行,比如:a.jpg/.php
Nginx<8.03空字节代码执行漏洞
影响版:0.5,0.6,0.7<=0.7.65,0.8<=0.8.37
Nginx在图片中嵌入php代码然后通过访问x.jpg%00.php来执行其中的代码(在URL中)
htaccess文件解析
如果在Apache中.htaccess可被执行,且可被上传,纳闷就可以尝试在.htaccess中写入:<FilesMatch “shell.jpg”>SetHandler application/x-https-php</FilesMatch>,然后在上传shell.jpg的小马,这样shell.jpg就可以被解析为php文件。
上传本地验证绕过
上传检测流程概述:
通常一个文件以http协议进行上传时,将以POST请求发送至Web服务器web服务器接收大请求后并同意,用户与web服务器将建立连接并传输data
服务器命名规则
第一种类型:上传文件名和服务器命名一致
第二种类型:上传文件名和服务器命名不一致(随机、时间戳、、)
常见的上传检测
1、客户端JavaScript检测(通常为检测文件扩展名)(不多见)
2、服务端MIME类型检测(检测Content-Type内容)
3、服务端目录路径检测(检测跟path参数相关的内容)
4、服务端文件扩展名检测(检测跟文件extension相关的内容)(与黑名单白名单做匹配)
5、服务端文件内容检测(检测内容是否合法或含有恶意代码)
客户端检测绕过(JavaScript检测)
首先判断JS本地验证;通常可以根据他的验证警告弹框的速度可以判断,如果电脑的速度够快,那么可以用burp抓包,在点击提交的时候burp是没有抓到包的,就已经单框了,说明这个就是本地js验证。
绕过方法:
1、使用burp抓包改名
2、使用firebug直接删除掉本地验证的js代码
3、添加js验证的白名单
客户端白名单绕过:修改允许上传类型,在本地的HTML中
上传服务器端验证绕过
服务端检测绕过(MIME类型检测)
MIME的作用:是客户端软件,区分不同种类的数据,例如,web浏览器就是通过MIME类型来判断问价是GIF图片,还是可打印的postscript文件。
web服务器使用MIME来说明发送数据的种类,web客户端使用MIME来说明希望接受到的数据种类。
Tomcat的安装目录\conf\web.xml中就是定义了胆量的MIME类型。
绕过方法:
直接使用burp抓包,得到post上传数据后,将Content-Type:text/plain改为Content-Type/gif就可以成功绕过。
服务端检测绕过(目录路径检测)
目录路径检测,一般就是检测路径是否合法,但稍微特殊一点的都没有防御,比如比较新的fckeditor php<=2.6.4任意文件上传传漏洞,当POST如下的URL时;/fckeditor264/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&CurrentFolder=fuck.php%00.gif HTTP/1.0
currentFolder这个变量的值就会传到ServerMapFolder($resourceType,$folderPath,$sCommand)中的形参$folder里,而$folder在这个函数中并没有任何检测,就被CombinePaths()执行了。
修改文件上传路径
http://www.xx.com/tcnet/Admin_login.asp
filepath路径修改绕过
可以突破自动命名规则xx.gif
一、改变文件上传后的路径
/a.asp/ 需要一定的权限
成功创建后
/a.asp/xx.gif
二、直接改变文件名称
/a.asp;.
修改后为
/a.asp;.xx.gif
服务端检测绕过(文件扩展名检测)
黑名单检测
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多,一般有专门的blacklist文件,里面会包含常见的危险脚本文件,例如fckeditor2.4.3或之前版本的黑名单。
白名单检测
白名单相对来说比黑名单安全一些,但也并不是说就是绝对安全的。
绕过黑名单
1、文件名大小写绕过
用像Asp、pHp之类的文件名进行绕过检测。
2、名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有的asa或cer、、、
3、特殊文件名绕过
比如发送的http包里把文件名改成test.asp.或.asp_(下划线就是空格),这种的命令方式在Windows系统里是不被允许的,所有需要在burp里面进行修改,然后绕过验证后,会被Windows自动去除后面的点和空格,但要注意的是Unix/Linux系统没有这个特性。
4、0x00截断绕过
在扩展名检测中,在asp的程序中有这种漏洞,各个简单的伪代码
name=getname(http request)//加入这个时候获取到的文件名是test.asp.jpg(asp后面为0x00)
type=gettype(name)//而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
if(type=jpg)
5、.htaccess文件攻击配合名单列表绕过
上传一个自定义的.htaccess,就可以轻松绕过各种文件检测。
6、解析调用漏洞
绕过这类漏洞直接配合上传一个代码注入过的非法黑名单即可,再利用解析调用漏洞。
绕过白名单
1、0x00截断绕过
用像test.asp%00.jpg的方式进行截断,属于白名单的文件,再利用服务端代码检测逻辑漏洞进行攻击,目前在asp的程序中存在这种漏洞。
2、解析调用漏洞绕过
绕过这类漏洞直接配合上传一个代码注入过的非法黑名单即可,再利用解析调用漏洞。
3、.htaccess文件攻击
通过一个.htaccess文件调用php的解析器去解析一个文件名中只要包含“haha”这个字符串中的任意文件,所以无论文件名是什么样子,只要包含“haha”这个字符串都可以被以php的方式来解析,一个自定义的.htaccess文件就可以以各种各样的方式去绕过很多上传验证机制,建一个.htaccess文件,里面的内容如下:
<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMath>
同目录有个我们上传一个只有文件名并包含“haha”,但是去污任何扩展名的文件里面的内容就是php的一句话木马
双文件上传
南方、良精、动易、、、
抓包,将文件内容在复制一遍,改一下复制后的文件名称防止重复,GO以下
服务端检测绕过(文件内容检测)
如果文件内容检测设置的比较严格,那么上传攻击将变得非常困难,也可以说他是代码层检测的最后一关,如果他被突破了,九岁没有代码层漏洞也可以给后面的利用应用层的解析漏洞带来机会。
绕过检测文件头
主要是检测文件的内容开始处的文件头,比如图片类型的文件头如下,要绕过jpg文件头检测就要在文件开头写上以下的值:
value=FF D8 FF E0 00 10 4A 46 49 46
要绕过GIF文件头检测就要在文件头写上下面的值
value=47 49 46 38 39 61
要绕过png文件头检测就要在文件开头加上下面的值
value=89 50 4E 47
然后在文件头的后面加上自己的一句话木马就可以了。
文件相关信息检测
图像文件相关信息检测常用的是getimagesize()函数,只需要把文件头部分伪造好就ok了,就是在头部的基础上还加了一些文件信息:
GIF89a
(…some bingary data for image..)<?php phpinfo();?>
(…skipping the rest of binary data..)
这是最终形态的检测,一般是条用API或函数去进行文件加载检测,常见的是图像渲染测试,在变态点的甚至进行二次渲染,对渲染加载测试的攻击方式是代码注入绕过,对二次渲染的攻击方式是攻击文件加载器自身。
对渲染加载测试攻击注入:可以用图像处理软件对一张图片进行代码注入,用winhex看数据可以分析出这类工具的与阿尼是不在破坏文件本身的渲染情况下找一个空白区域进行填充代码,一般会在文件的注释去,对于渲染测试基本上都能绕过,毕竟文件本身是完整的。
绕过二次渲染(保留图片的正常内容,去掉其他代码)
通过上传不完整的图片让其渲染函数暴露,然后进行攻击。
第二种方法
对文件加载器进行溢出攻击
表单提交按钮
有时候扫出的上传页面,只存在浏览选项,条件按钮没有的,这时候就可以自己写一个。
在HTML编辑中写入以下的代码:
<input type=”submint” value=”提交” name=”bb”>
然后上传。
2019-05-11 15:17:45
渗透测试学习 十五、 文件上传&&解析漏洞的更多相关文章
- 使用Typescript重构axios(二十五)——文件上传下载进度监控
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- springMVC3学习(十二)--文件上传优化CommonsMultipartResolver
基于上一篇文件上传发现效率很慢,我们应该对它进行优化 使用springMVC对文件上传的解析器 来处理文件上传的时候需要在spring的applicationContext里面加上springMVC ...
- Netty学习(十)-Netty文件上传
今天我们来完成一个使用netty进行文件传输的任务.在实际项目中,文件传输通常采用FTP或者HTTP附件的方式.事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主 ...
- JavaWeb学习 (二十八)————文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- Java进阶学习:将文件上传到七牛云中
Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...
- Django:学习笔记(8)——文件上传
Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- 2019-10-9:渗透测试,基础学习,php文件上传,mysql基础
header("Content-Type:text/html;charst="utf-8")设置头部信息,解决编码问题setcookie("loginStrin ...
随机推荐
- Data Management Technology(3) -- SQL
SQL is a very-high-level language, in which the programmer is able to avoid specifying a lot of data ...
- python列表转换为字符串
对于非纯字符串组成的列表,需要使用map(str, 列表)转换,纯字符串组成的列表则不需要转换 list1 = [1, 2, 3, 4, 5]c = ','.join(map(str,list1))p ...
- benchmarks (主要用于分布式文件系统性能测试)
最近进行学习过程中,遇到一些可以用得上的benchmark,在这里进行简要记录:之后估计会用到 TensorFlow benchmarks https://github.com/tensorflow/ ...
- s3c2440裸机-时钟编程(二、配置时钟寄存器)
s3c2440裸机编程-时钟编程(二.配置时钟寄存器) 1.2440时钟时序 下图是2440时钟配置时序: 1.上电后,nRESET复位信号拉低,此时cpu还无法取指令工作. 2.nRESET复位信号 ...
- Python踩坑系列之安装pycrypto报错:“Microsoft Visual C++14.0 is required”问题。
由于要使用Python3实现des3加密要使用pycrypto模块,所以使用pip install pycrypto 来安装,然后就常规性掉坑.安装报错“Microsoft Visual C++14. ...
- Cisco pppoe上网设置
1.配置虚拟端口: interface Dialer1 ip address negotiated ip nat outside ip virtual-reassembly in encapsulat ...
- 开发工具IntelliJ IDEA
开发工具概述 IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中, ...
- 设计模式-Template(行为模式) 采用 继承的方式 将算法封装在抽象基类中,在子类中实现细节。利用面向对象中的多态实现算法实现细节和高层接口的松耦合。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Template.h class AbstractClass { public: virtual ~AbstractCla ...
- 怎么在ubuntu下安装使用pycharm
1.安装jdk 先下载jdk: https://pan.baidu.com/s/1o7MqvKA 解压到本地: 方法一:直接点击右键,点“提取此文件 方法二:使用命令行sudo tar -zxvf j ...
- tf.contrib.slim模块简介
原文连接:https://blog.csdn.net/MOU_IT/article/details/82717745 1.简介 对于tensorflow.contrib这个库,tensorflow官方 ...