ajp8009端口分析

1,AJP是什么?

最近有一个ajp的文件包含漏洞CVE-2020-1938很火,因此就研究了一下tomcat的ajp服务,复现了该漏洞。首先我们来看一下ajp是什么?
ajp是tomcat的一个转发协议,通过这个协议,我们可以在自己的客户端上远程访问另一头的tomcat服务器。例如,原本我们打开tomcat,在自己的浏览器输入localhost就可以访问tomcat,而配置了ajp协议的服务器,就允许你在其它电脑或者客户端,远程访问该tomcat服务器。

2,AJP漏洞的利用

网上搜了一下ajp漏洞的利用,发现原来几年前ajp协议就已经被爆出过漏洞,也是自己很少用到该协议,也不怎么关注。如今这么一个高危漏洞出来,而且poc已经全网转发,不得不重视。ajp协议的端口是8009,如果nmap发现某个机器开放了8009端口,那么就可能存在这漏洞,从而进一步验证。主要步骤如下:
1,找到一个开放8009端口的服务器,在自己的Apache安装目录下找到conf/httpd.conf,将proxy模块打开,事实证明,网上还少添加了2个模块(mod_lbmethod_byrequests.so和mod_slotmem_shm.so),这两个模块打开后,才可以启动apach。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so    
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so    
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

2,在conf/httpd.conf中添加映射代码:

ProxyRequests Off     
<proxy balancer://cluster>     
        BalancerMember ajp://59.68.xxx.xxx:8009 loadfactor=1 route=jvm1   
        BalancerMember ajp://59.68.xxx.xxx:8009 loadfactor=1 route=jvm2   
</proxy>

3,在conf/extra/httpd-vhosts.conf文件中,添加80端口的域名:

 <VirtualHost *:80>    
     ServerAdmin your email  
      ServerName 127.0.0.1   
      ServerAlias localhost    
     ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On    
     ProxyPassReverse / balancer://cluster/    
     ErrorLog "logs/ajbtest-error.log"   
    CustomLog "logs/ajbtest-access.log" common   
  </VirtualHost>

4,在浏览器中访问localhost,即可访问远程59.68.xxx.xxx的tomcat的index页面。如果能访问到这个页面,说明该远程服务器存在安全风险。
5,访问tomcat的管理页面,如果这个时候存在弱口令的话,那么无疑肯定存在问题。
6,如果访问不了,或者不存在弱口令,利用CVE-2020-1938的poc检测一下:

python CNVD-2020-10487-Tomcat-Ajp-lfi.py target.com(or IP

如果存在问题的话,就会显示web.xml的内容,那么无疑是存在文件包含漏洞的。
ajp8009端口分析_第1张图片

3,发现的问题

在复现这个漏洞的时候,确实将poc下载下来了,但是poc是python2.7的版本,我是python3的环境,运行的时候,会爆出一些错误。
1,no module的错误。
出现该错误的时候,不用想,pip install module,即可解决。
2,queue的错误。
出现该错误是因为python3与python2关于模块名的命名不一致导致的,python3中模块名统一采用小写形式,因此改一下代码,兼容一下就好。

if sys.version > '3':
	import queue as Queue
else:
	import Queue

3,线程的错误。
有的时候,会爆出线程小于3的错误,是因为代码里面规定了是20个线程,如果ip.txt里面的ip或com小于20的话,就会出错,把代码里面的线程改一下,即可解决。
4,python3与python2兼容的问题。
在运行该程序的时候,我的环境是python3,我就想,能不能让python3与python2兼容一下,这样以后,我想用python2来运行程序就可以使用python2,事实证明,是可以的。
在环境变量path里面添加python2的路径:
ajp8009端口分析_第2张图片

然后找到python2的安装目录,将python.exe改名为python2.exe,在命令行里面输入python2,即可看到环境是python2的环境。以后想使用python2或者python3都可以啦。
有什么记录的不准确的地方,欢迎与我交流,wechat:kathrianwly。

你可能感兴趣的:(web安全,python,tomcat,安全,java,apache)