POC编写:CNVD-2020-10487/CVE-2020-1938漏洞,tomcat服务器端口8009上的ajp协议漏洞,未经授权用户可读取网站目录中任意文件。
摘要:POC编写:CNVD-2020-10487 CVE-2020-1938漏洞,tomcat服务器端口8009上的ajp协议漏洞,未经授权用户可读取网站目录中任意文件。
调试分析,编写poc的过程:CNVD-2020-10487/CVE-2020-1938漏洞,tomcat服务器端口8009上的ajp协议漏洞,未经授权用户可读取网站目录中任意文件。
一.漏洞介绍
简而言之,tomcat服务器端口8009上的ajp协议漏洞,未经授权用户可读取网站目录中任意文件。
漏洞编号:
CNVD-2020-10487 / CVE-2020-1938
受影响的版本:
ApacheTomcat 9.x <9.0.31
ApacheTomcat 8.x <8.5.51
ApacheTomcat 7.x <7.0.100
ApacheTomcat 6.x
二.设置调试环境
为了观察数据流并编写POC,我们需要设置调试环境。
tomcat是一个开源项目,所以第一个想法是下载源代码并根据源代码进行调试。在这里下载的版本是9.0.2代码。 调试器选择了Idea。
三.ajp协议学习
到目前为止,不知道什么是ajp协议以及该协议的作用,既然知道tomcat漏洞是由ajp协议引起的。我们必须知道这个协议是什么。
Apache官方有文档
当然,乍看之下这份文件可能不容易理解,所以百度了一下。
可以通过两种方式访问tomcat网站。一种是通过浏览器直接输入网址。另一个是通过ajp协议访问。
AJP协议是一种定向数据包(面向数据包)协议,它使用二进制形式而不是文本形式来提高性能。
因此,我们需要编写一个ajp客户端程序来与tomcat服务器的端口8009进行数据交互。当然,只要我们详细了解ajp协议及其各个字段的含义,我们可以自己编写一个ajp客户端。 先去github并用关键字ajp和ajp client搜索。发现已经有其他人的ajp-client项目。
下载了所有三个ajp-clients。边调试边测试。最后poc完成。
在这里,我们需要讨论ajp协议中重要的字段。
Forward Request包就是我们要发送给tomcat 8009端口的内容,用来触发漏洞的。该字段中最重要的字段是attributes,稍后将在调试和跟踪时找到它们。
四.调试跟踪
通过引用,我们知道当tomcat收到ajp请求时,它将调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,并且prepareRequest获取ajp的内容以设置request对象的Attribute属性。
现在,我们在AjpProcessor中找到prepareRequest()函数,并在该函数的开头设置一个断点,并在request.setAttribute(n,v)处设置一个断点。
编写测试代码,如下所示(test_servlet放置在webapps目录中的servlet代码):
运行该程序,该程序成功中断了prepareRequest(),继续单步执行,其间您可以观察到某些字段的变化。 但是程序不会进入while循环,并且自然不会执行request.setAttribute(n,v)函数。 再次跟踪时,发现获得attitudes值时,while循环的判断条件返回-1。回顾前一节提到的Forward Request结构,看到了attitudes字段。该字段可能与代码中while循环中的attitudecode有关。
查看了ajp-client中用于attitudes字段的代码,发现该项目未处理attitudes字段。 根据理解在AjpClient.java中添加了attitudes处理代码。
public List<Pair<String,String>> headers = new LinkedList<Pair<String,String>>();
public List<Pair<String,String>> attributes = new LinkedList<Pair<String, String>>();
添加函数setHeaders()这个函数并不重要,添加函数addAttributes()。
在query函数中添加,处理atrribute代码
修改测试代码如下
(test_servlet / xx是不存在的地址或映射,只有将其设置为不存在的地址,代码流才会进入DefaultServlet)
运行程序,程序成功进入while循环
至于为什么以这种方式编写addAttributes参数,在经过几次调试之后将知道。
该程序执行request.setAttribute(n,v)函数,然后执行DefaultServlet的serveResource函数。
追溯到getRelativePath函数,
这将获得我们设置的attributes值。然后使用resources.getResource(path); 确定设置的路径文件是否存在,如果存在,则返回文件内容,如果不存在,则报告错误。
已成功读取文件。
关于org.apache.jasper.servlet.JspServlet类实现文件的包含,此处将不对其进行分析。
相关热词搜索:POC编写 CNVD-2020-10487 CVE-2020-1938 tomcat ajp协议漏洞 读取网站目录任意文件 重庆网络安全
上一篇:Secure Remote Access中SQL注入漏洞、缓冲区溢出漏洞、目录遍历漏洞、代码注入漏洞等漏洞分析
下一篇:CVE-2020-0668漏洞分析:Windows Service Tracing任意文件移动漏洞
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了