Tomcat AJP ghostcat (CVE-2020-1938) 图解分析
简述:request属性可控,导致可控制实际tomcat实际读取的路径,任意读取webapp下内容(默认解析器处理JSP) 或任意执行非JSP文件(JSP解析器处理非JSP文件)
需求与实现角度:
在Tomcat AJP Ghostcat漏洞(CVE-2020-1938)中,攻击者可以通过发送特定的AJP请求,将请求参数中的req_attribute设置为javax.servlet.include.request_uri,从而读取和篡改Web应用程序中的敏感文件,甚至执行任意代码。
这个漏洞的原因是AJP协议的设计缺陷。在AJP协议中,请求参数是以二进制格式传输的。在处理AJP请求时,Tomcat会将请求参数解析为一个名值对的列表,并将其转换为HTTP请求的属性,以便应用服务器更好处理请求。
由于Tomcat没有对req_attribute参数进行足够的验证,攻击者可以将其设置为javax.servlet.include.request_uri,并在Web应用程序中实现任意文件读取和代码执行。这是因为在Web应用程序中,javax.servlet.include.request_uri属性可以用于指定包含当前请求的URI。
新版修复:
禁用AJP协议中的req_attribute参数
上周扫描到一个Tomcat AJP,无法利用。
具体扫描方法是设置自定义属性。
但是目标机器删掉了ROOT文件夹也没有设置context。
所以研究一下 Tomcat AJP,顺带看看Tomcat源码,找找利用或优化方法
直接读取文件:读取不到->500报错
设置自定义属性:404报错
没有ROOT:走不到设置路径,404报错
优化还是读一下具体的文件吧
参考链接:
分析: https://www.buaq.net/go-22691.html
servlet选择: https://www.cnblogs.com/123-shen/p/11445832.html
servlet和servlet容器: https://blog.csdn.net/baidu_36583119/article/details/79642407
tomcat 核心组件结构图: https://www.cnblogs.com/cenyu/p/11072543.html
配置ROOT目录: http://www.manongjc.com/detail/50-hjbmkeakvliiynm.html
context元素详解: https://www.cnblogs.com/shiyangxt/articles/1257052.html
idea