Apache Tomcat样例目录session操纵漏洞

0x00   背景

前段时间扫到的漏洞,研究了下,感觉挺有意思的,发出来和大家分享下,有啥不对的地方还请各位拍砖指正。

Apache Tomcat默认安装包含”/examples”目录,里面存着众多的样例,其中session样例(/examples/servlets/servlet/SessionExample)允许用户对session进行操纵。因为session是全局通用的,所以用户可以通过操纵session获取管理员权限。

案例:http://www.wooyun.org/bugs/wooyun-2014-064812

参考:http://www.acunetix.com/vulnerabilities/apache-tomcat-examples-directory-vulnerabilities/

0x01   漏洞分析演示

首先,我们先来看看SessionExample的部分源码

//表单代码

out.println("<P>");

out.print("<form action=\"");

out.print(response.encodeURL("SessionExample"));

out.print("\" ");

out.println("method=POST>");

out.println(rb.getString("sessions.dataname"));

out.println("<input type=text size=20 name=dataname>");

out.println("<br>");

out.println(rb.getString("sessions.datavalue"));

out.println("<input type=text size=20 name=datavalue>");

out.println("<br>");

out.println("<input type=submit>");

out.println("</form>");

//核心代码

HttpSession session = request.getSession(true);

out.println(rb.getString("sessions.id") + " " +session.getId());

out.println("<br>");

out.println(rb.getString("sessions.created") + " ");

out.println(new Date(session.getCreationTime()) +"<br>");

out.println(rb.getString("sessions.lastaccessed") + "");

out.println(new Date(session.getLastAccessedTime()));

String dataName = request.getParameter("dataname");//获取dataname参数的值

String dataValue = request.getParameter("datavalue");//获取datavalue参数的值

if (dataName != null && dataValue != null) {

session.setAttribute(dataName, dataValue);//将dataname和datavalue写入session

}

用户通过表单提交dataname和datavalue参数,然后通过request.getParameter()函数获取这两个参数的值,再通过session.setAttribute()函数将dataname和datavalue的值写入session。因为session全局通用的特性,所以可以通过操纵session参数的值来获取网站管理员权限的目的。

举个例子:

我们先来编写login.jsp,login2.jsp,index.jsp这三个页面,通过这三个页面来模拟一般网站身份验证的过程。

login.jsp

<formaction=login2.jsp method="POST" >

用户名: <input type="text"name="username"><br>

密码: <input type="text" name="password"><br>

<inputtype="submit" value="登录"><br>

<form>

login2.jsp

<%

if(request.getParameter("username") != null &&

request.getParameter("password")!= null) {

String username =request.getParameter("username");

String password =request.getParameter("password");

//验证身份

if (username.equals("admin")&& password.equals("admin")) {

session.setAttribute("login","admin");

response.sendRedirect("index.jsp");

}else {

response.sendRedirect("login.jsp");

}

}

%>

index.jsp

<%

if(session.getAttribute("login")!= null &&

((String)session.getAttribute("login")).equals("admin")){

out.println("Login");

} else{

response.sendRedirect("login.jsp");

}

%>

我们直接打开网站后台,即index.jsp

http://127.0.0.1:8080/examples/index.jsp

发现被重定向到login.jsp了,而且在不知道密码的前提下,我们是无法登陆进去的。接下将演示如何通过操纵session进入网站后台

打开SessionExample

http://127.0.0.1:8080/examples/servlets/servlet/SessionExample

在Name of Session Attribute: 里输入login

在Value of Session Attribute:里输入admin

提交后显示login=admin已经写入session

再次打开index.jsp,显示成功登录

0x02 修复建议

0x03 题外话

不觉得这个挺适合做后门的吗?

<%setAttribute("request.getParameter("u")", " request.getParameter("a")%>

“u”和”a”的值看后台源码

Apache Tomcat样例目录session操纵漏洞,布布扣,bubuko.com

时间: 2024-10-21 00:41:03

Apache Tomcat样例目录session操纵漏洞的相关文章

Tomcat样例安全漏洞

[漏洞描述] Tomcat在使用的时候一般都直接官网下载源代码包直接使用. 默认情况下,Tomcat源码包里面包含了   examples   这个目录,这个目录主要实现一些样例页面的访问. 比如: 默认域名:/examples/servlets/servlet/SessionExample 这个网址可以对session直接进行查询与修改,绕过认证.可能会被黑客利用绕过网站验证直接操作服务器. [漏洞影响] 可能泄露敏感信息并被攻击者利用造成威胁 攻击者可能直接利用样例的漏洞进行攻击 核心数据可

Apache Tomcat 整合集群 session 共享

Apache Tomcat 整合集群 所需软件 CentOS6.5 64 Apache2.2.15 Tomcat7.0.62 JDK 1.8.0_45 tomcat-connectors 1.2.40 MySQL<可选> PHP<可选> 一   安装A服务器安装  IP  192.168.150.7 apache php mysql yum install httpd httpd-devel php php-devel php-gd php-mysql php-mbstring m

apache+tomcat实现session共享

tomcat1(worker2)配置 注释: 在之前搭建好的apache+tomcat负载均衡的基础上来配置session共享,之前是在root目录下,用rz命令上传一个7版本的tomcat,然后解压生成一个文件夹,改名为worker2,再拷贝一个为worker3 1. 进入这个页面,点击红框中的链接 弹出页面,在页面中找到如下的内容: 上图中红框里的内容要修改为虚机IP:192.168.2.199,其他默认保持不变 2. 然后在worker2里面开启<Cluster>集群设置,在worker

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话

Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话 一.Nginx+LAT(Apache+tomcat)的环境结构; 1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat. 2.实验结构图: 3.环境介绍,在两台CentOS7上都安装Tomca

在Apache Tomcat 7设置redis作为session store

在Apache Tomcat 7设置redis作为session store redis已经有组件支持直接在tomcat7中设置下将redis作为tomcat默认的session存储器,下面介绍下配置过程 1.从http://redis.io/下载redis,按照redis服务端 wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make 2.启动redis

Apache + Tomcat + mod_jk实现集群服务及session共享

实现效果:用apache 分发请求到tomcat中的对应的项目 原理: 环境说明: 操作系统:win7   64位 Javajdk: 1.7 Apache:httpd-2.2.25-win32-x86-no_ssl.msi    (本地安装路径:D:\Program Files (x86)\Apache2.2\)Tomcat: 7.0.42  ( http://tomcat.apache.org/download-70.cgi ),如果在同一台机器上模拟,下载zip版本. 实例中展示了2个节点m

基于RedHat发行的Apache Tomcat本地提权漏洞

描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于RedHat发行版Apache Tomcat,包括CentOS,RedHat,OracleLinux,Fedora等等.主要原因是普通Tomcat用户拥有权限来对/usr/lib/tmpfiles.d/tomcat.conf这个配置文件进行读写,那么该用户组成员或者拥有普通Tomcat权限的WebSh

Apache Tomcat AJP协议高危漏洞风险提示

关于Apache Tomcat存在文件包含漏洞的安全公告 2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938).攻击者利用该漏洞,可在未授权的情况下远程读取特定目录下的任意文件.目前,漏洞细节尚未公开,厂商已发布新版本完成漏洞修复. 一.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应