您当前的位置:首页 > 电脑百科 > 安全防护 > 黑客技术

一篇文章教你搞懂ajp文件包含

时间:2021-03-24 12:21:01  来源:  作者:

0x01. 前言

时隔应该快一年了吧,具体ghost这个漏洞出来我也忘记了,由于我最近无聊,然后想起我使用的Tomcat有没有漏洞,于是我就来试了试,顺便分析一下这段已经时隔许久的漏洞,依稀记得上次的文章是简单的复现~~ 反正是闲的无聊

一篇文章教你搞懂ajp文件包含

 

0x02. 环境部署

idea2020.2 + tomcat7.0.99+jdk1.8

具体参考这篇文章,idea导入Tomcat源码:
环境与exp打包好,在附件中~,收1金币应该问题不大,我想社区币去抽华子

https://blog.csdn.net/u013268035/article/details/81349341

https://www.cnblogs.com/r00tuser/p/12343153.html

0x03.漏洞的基础

Tomcat部署的时候会有两个重要的文件

一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 

而Tomcat在 server.xml中配置了两种连接器。其中包含的是AJP Connector和HTTP Connector

AJP Connector说明启用了8080和8009端口,这时候我们可以看一下

一篇文章教你搞懂ajp文件包含

 


而相对于,8080我们是可以访问的

一篇文章教你搞懂ajp文件包含

 

也就是说,8080是负责Http协议,8009负责接收ajp协议;

提问1:AJP协议和HTTP协议有什么区别吗?

HTTP协议:负责接收建立HTTP数据包,成为一个web服务器,处理HTTP协议的同时还额外可处理Servlet和jsp

AJP协议: 负责和其他的HTTP服务器建立连接, 通过AJP协议和另一个web容器进行交互

Web用户访问Tomcat服务器的两种方式

一篇文章教你搞懂ajp文件包含

 

而一个Tomcat就是一个server,其中包含多个service;而每个service由ConnectorContainer、Jsp引擎、日志等组件构成,造成漏洞的关键地方是ConnectorContainer

Connector上面已经说过分别是AJP ConnectorHTTP Connector ,是用来接受客户端的请求,请求中的数据包在被Connector解析后就会由Container处理。这个过程大致如下图:

一篇文章教你搞懂ajp文件包含

 


一次请求的处理可以划分为ConnectorContainer进行处理,经历的过程大致如下:

  • 一个TCP/IP数据包发送到目标服务器,被监听此端口的Tomcat获取到。
  • 处理这个Socket网络连接,使用Processor解析及包装成request和response对象,并传递给下一步处理。
  • Engine来处理接下来的动作,匹配虚拟主机Host、上下文Context、MApping Table中的servlet。
  • Servlet调用相应的方法(service/doGet/doPost…)进行处理,并将结果逐级返回。小结

对于使用HTTP协议或AJP协议进行访问的请求来讲,在解析包装成为request和response对象之后的流程都是一样的,主要的区别就是对 socket流量的处理以及使用Processor进行解析的过程的不同

一篇文章教你搞懂ajp文件包含

 

也就是第二步的地方出现问题

0x04.源码分析

通过第三步中,我们知道是Processor的解析过程不同,而提供这部分功能的接口,在
org.Apache.coyote.Processor,主要负责请求的预处理。

一篇文章教你搞懂ajp文件包含

 


而此处AjpProcessor则是处理ajp协议的请求,并通过它将请求转发给Adapter,针对不用的协议则具有不同的实现类。

我们从上面wirshark抓包可以看出

一篇文章教你搞懂ajp文件包含

 


可以看出这边是设置了三个莫名其妙的东西

一篇文章教你搞懂ajp文件包含

 

通过exp源码可以看到这边是设置了三个域对象的值

一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 


可以看出,我们这边是执行成功了,由于wirshark抓包没有去截图,又关闭了,所以就不截图了

这边可以假设:请求参数时是写死,也就是xxx.jsp文件,而jsp后缀等等原因,然后成功进行了文件包含

那么我们的test.txt是怎么识别的?

我们继续往下看,来解决种种疑惑

一篇文章教你搞懂ajp文件包含

 


知道是这个prepareRequest()问题,我们f7跟进去看看

一篇文章教你搞懂ajp文件包含

 


进入了该方法的内部,我们继续跟进查看,这边进行判断,获取到了请求参数为GET

一篇文章教你搞懂ajp文件包含

 


首先是一些解析数据包读取字节的操作

一篇文章教你搞懂ajp文件包含

 


while循环获取,switch判断

一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 

attributeCode=10时,则进入第一条分支,继续f8进去

一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 


是不是有了有种眼熟的感觉~~~ 其实就是往域对象中存值

一篇文章教你搞懂ajp文件包含

 

由于if都不满足,直接进入了最后这个比进的else分支

一篇文章教你搞懂ajp文件包含

 


最后进入第二个步骤的最后一小步,f8继续下一步走,在预处理完了request headers之后,在adapter里面处理request,然后调用Adapter将请求交给Container处理

一篇文章教你搞懂ajp文件包含

 


一篇文章教你搞懂ajp文件包含

 


进入service方法,然后f8一直跟进

一篇文章教你搞懂ajp文件包含

 

直到跟进此处,请求会发送到对应的servlet,我们请求的是一个jsp文件,根据tomcat的默认web.xml文件

一篇文章教你搞懂ajp文件包含

 

通过上面假设,tomcat默认将jsp/jspx结尾的请求交给
org.apache.jasper.servlet.JspServlet处理,它的service()方法如下:

一篇文章教你搞懂ajp文件包含

 


而jspUri等于null,满足条件,则进入该if条件分支

一篇文章教你搞懂ajp文件包含

 

由于
JAVAx.servlet.include.servlet_path可控制,通过getAttribute去域对象中获取属性名为
javax.servlet.include.servlet_path的值,得到值为 test.txt

一篇文章教你搞懂ajp文件包含

 


此时,jspUri的值为/test.txt

一篇文章教你搞懂ajp文件包含

 


pathInfo的值此时为空

一篇文章教你搞懂ajp文件包含

 


最后一直到下面,传入serviceJspFile方法中

一篇文章教你搞懂ajp文件包含

 

继续跟进,会先判断文件是否存在,如果存在,随后才会初始化wrapper,最后调用JspServletWrapperservice方法来解析,从而导致本地文件包含

一篇文章教你搞懂ajp文件包含

 

参考

https://gitee.com/wdragondragon/javasec/blob/master/tomcat%20ajp%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90.md

https://www.cnblogs.com/r00tuser/p/12343153.html

https://xz.aliyun.com/t/7325#toc-6

https://zhishihezi.net/b/5d644b6f81cbc9e40460fe7eea3c7925#



Tags:ajp文件包含   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
0x01. 前言时隔应该快一年了吧,具体ghost这个漏洞出来我也忘记了,由于我最近无聊,然后想起我使用的tomcat有没有漏洞,于是我就来试了试,顺便分析一下这段已经时隔许久的漏洞,依稀...【详细内容】
2021-03-24  Tags: ajp文件包含  点击:(322)  评论:(0)  加入收藏
▌简易百科推荐
一、背景介绍作为一名渗透测试工作人员(或者小白),在我们的日常工作或者学习中,我们不可能时时刻刻将自己的个人电脑(安装好Kali Linux的个人主机)带在身边,当我们没有带自己的个人...【详细内容】
2021-12-27  Kali与编程    Tags:Kali Linux   点击:(3)  评论:(0)  加入收藏
我们都知道公司网络中开放的端口越多,遭受网络攻击的可能性就越大,就越容易发生数据泄露事件。 在这篇文章中,我们将讨论与开放端口相关的网络安全隐患。 网络中的端口 据统计...【详细内容】
2021-12-10  诺必达云服务    Tags:端口扫描   点击:(33)  评论:(0)  加入收藏
一、背景介绍DirBuster是用来探测web服务器上的目录和隐藏文件的。因为DirBuster是采用java编写的,所以运行前要安装上java的环境。 来看一下基本的使用: ①:TargetURL下输入要...【详细内容】
2021-12-07  Kali与编程    Tags:Dirbuster   点击:(27)  评论:(0)  加入收藏
#本文仅用于网络安全研究学习任何未经授权的入侵都是违法行为dir 浏览 创建文件 echo 文件内容 > 文件名字.扩展名 浏览文件内容 type 文件名 分页浏...【详细内容】
2021-12-07  WHOAMI    Tags:黑客   点击:(22)  评论:(0)  加入收藏
上一节中我们学了如何实现ARP断网攻击,本节中我们将利用ARP欺骗的原理实现截取目标计算机图片流量,内容包括:ü如何开启ip转发ü怎样截取受害机图片流量 一、开启ip转...【详细内容】
2021-11-23  Kali与编程    Tags:黑客   点击:(22)  评论:(0)  加入收藏
一、背景介绍大家在Linux的日常使用中都晓得如何通过命令行去配置Linux的端口开放规则,但是大家知道如何配置Windows入站出站规则吗?有哪些常见的危险端口呢?如何解决上述问题...【详细内容】
2021-11-15  Kali与编程    Tags:端口   点击:(38)  评论:(0)  加入收藏
1.背景介绍几乎每一个玩渗透的人都会接触到metasploit framework,简称msf。这是一个渗透测试框架,用ruby语言编写的,该框架集成了很多可用的exploit,比如著名的ms08_067等。你可...【详细内容】
2021-11-15  Kali与编程    Tags:服务扫描   点击:(37)  评论:(0)  加入收藏
在前面的课程中,我们学习了ARP攻击的理论和实践知识,知道了怎么进行攻击,这节中我们将学习如何进行防御,内容包括:ü借助第三方软件防御(360安全卫士,腾讯管家等)ü使用arp...【详细内容】
2021-11-13  Kali与编程    Tags:白帽   点击:(32)  评论:(0)  加入收藏
简介在sqlmap基础上增加了目录扫描、hash爆破等功能运行环境 linux 在云服务器上还是蛮不错的项目连接如下https://github.com/s0md3v/sqlmat usage: sqlmate [-h] [--dor...【详细内容】
2021-11-10  暗网视界    Tags:sqlmate   点击:(44)  评论:(0)  加入收藏
一、背景介绍在网上冲浪少不了用到搜索引擎,而很多朋友都习惯把Google视为第一个选择对象。当然Google无论在搜索速度还是结果关联性方面都是十分优秀的。但百度(http://www.b...【详细内容】
2021-11-05  Kali与编程    Tags:白帽黑客   点击:(31)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条