对近期的web中间件漏洞进行了解。因此我对常见的web中间件漏洞进行了收集以及整理。(本篇文章将持续更新)
一、IIS
IIS6.x
IIS7.x
二、Apache
Apache HTTPD换行解析漏洞(CVE-2017-15715)
三、Nginx
Nginx 配置文件错误导致的解析漏洞
四、Tomcat
Tomcat任意文件写入(CVE-2017-12615)
Tomcat 远程代码执行( CVE-2019-0232)
log4j漏洞
shiro反序列化漏洞
struts2漏洞
原理:服务器默认不解析; 号及其后面的内容,相当于截断
*.asp;.jpg的文件会当成asp文件执行;/*.asp文件夹下的文件也会被当作asp脚本执行
另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp
修复建议:
1.限制上传的目录执行权限,不允许执行脚本
2.不允许新建文件夹
3.对上传的文件都进行重命名((时间戳+随机数+.jpg)
在Fast-CGI运行模式(phpinfo的server API可以看到是否开启)下,在任意文件(test.jpg)后面加上/.php,会将(test.jpg)文件 解析为php文件。
配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序
Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别( 不在 mime.types文件内),则继续向左识别,直到识别到合法后缀才进行解析。
xxx.jpg.php.xxx会解析成php脚本执行
影响范围:2.4.0~2.4.29
此漏洞形成的根本原因在于$,正则表达式中$不仅匹配字符串结尾位置,也可以匹配\n或\r ,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
1.升级到最新版本
2.限制上传的目录执行权限,不允许执行脚本
3.对上传的文件都进行重命名((时间戳+随机数+.jpg)
对于任意文件名,在后面添加/xxx.php( xxx为任意字符)后,即可将文件作为php解析。
例:info.jpg后面加上/xxx.php,会将info.jpg以php解析。
1.配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序
2.如果需要使用到cgi.fix_pathinfo这个特性(例如:Wordpress),那么可以禁止上传目录的执行脚本权限。或将上传存储的内容与网站分离,即站库分离。
3.高版本PHP提供了security.limit_extensions这个配置参数,设置security.limit_extensions = .php
漏洞本质是Tomcat配置文件/conf/web.xml 配置了可写( readonly=false),导致我们可以往服务器写文件
将readonly=true,默认为true。
影响范围:9.0.0.M1 ~ 9.0.17, 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93
1.升级版本
2.关闭WEB-INF
log4j是apache开源项目,apache log4j2组件开启了日志记录功能后,凡是可以触发错误记录日志的地方,插入漏洞利用代码,即可利用成功。如果组件还包含其他系统的日志,有可能造成间接投毒。
主要原因是log4j在日志输出时,未对字符合法性进行限制,执行了jndi协议加载的恶意脚本,造成rce。
通过jndi协议访问远程服务,包含rmi,ldap,dns等协议调用,加载远程的恶意class,然后本地反序列化执行。
升级到最新的log4j
shiro<=1.2.4
shiro是一款常见的java框架,提供了RememberMe的功能。漏洞产生登陆时在记住我(remember me)的功能。
特征:返回包存在set-cookie=deleteMe
生成cookie:序列化 -> 使用密钥进行AES加密 -> Base64编码,最后返回客户端 remebreme Cookie
识别cookie:得到rememberMe的cookie值->Base64解码->使用密钥进行AES解密->反序列化
无论是否升级,密钥一旦泄露,就会导致反序列化漏洞。
不能使用网上的密钥,自己base64一个AES密钥,利用官方提供的方法生成。升级到1.2.4版本以上,使用动态密钥。
struts2是一款java web框架,页面一般以.action结尾。
处理 action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL语句,访问靠#号区分,使用(\u0023)能绕过#号过滤。
最简单是更新到最新版本
原理:程序在进行反序列化的时,会自动调用例如__wakeup(),__destruct()等函数,如果传入函数的参数可以被用户控制的话,用户就可以输入一些恶意代码到函数中执行,从而导致反序列化漏洞。
phar文件本质上是一种压缩文件,会以序列化的形式存储用户自定义的meta-data。当受影响的文件操作函数调用phar文件时,会自动反序列化meta-data内的内容。(漏洞利用点)
利用:
1、phar上传到服务器(需要文件上传)
2、有可用的魔术方法
3、文件操作函数的参数可控
不要把用户的输入或者是用户可控的参数直接放进反序列化的操作中去。
在进入反序列化函数之前,对参数进行限制过滤。