今天是:
网站首页 | 新闻中心 | 文章中心 | 软件论坛 | 动画中心 | 最新下载 | 加入学盟 | 发布作品
业内动态 | 黑客新闻 | 黑客事件 | 校园快讯 | Q Q 攻略 | 系统安全 | 黑客教学 | 黑客人物
黑客动画 | 精品动画 | 常用工具 | 黑客工马 | 网吧工具 | 密码破解 | 精品推荐 | 会员专区
  快速搜索
关键字
搜索范围
  广告栏目1
   你的位置首页 >> 黑客技术 >> 最新漏洞->凡人网络购物系统Jsp版漏洞分析
凡人网络购物系统Jsp版漏洞分析
日期:2007-11-04 00:58:01   来源: 不详   作者: 未知
凡人网络购物系统Jsp版是网上少见的JSP开源的程序,说实话JSP的程序确实很少,
这套系统已经 被很多人改过了,所以只能用文件来试是不是这个系统,..数据库是ACCESS难得,以前学校写都是用SQL..所以JDBC那里很熟悉
这文章也没有投稿的价值.. 俺还有更好的文章投稿,所以这个就发出来玩了。代码漏洞百出。看的我都想吐了 有兴趣的朋友自己去下一份最新版的来看

正文:

现在虽然渗透的方法多彩多样,但是最具威胁最简单的还是injection攻击. 对于 injection漏洞的形成无非就是某某变量
没过滤或者过滤不严而已..
这几天一直在看凡人网络购物系统Jsp版的代码。 多少看出来点问题。这里共享下.. 
这套系统网上使用的并不是很多,但是大部分人喜欢改这套程序来用,所以我只是在笔记本上装了个tomcat环境来测试一下这个漏洞
因为不投稿所以也没截图 只把漏洞代码简单说下

首先看一下就简单的JSP注射漏洞的形成,我从我们教材上随便找了一个后台登陆的代码来分析
现在的学校培训程序员只知道让写代码。对编码安全根本没有意识...

教材上的后台代码:
Statement stmt = conn.createStatement();

string checkUser = "select * from login where username =’ "+userName + "’ and userpassword =’"+userPassword + " ’ ";

ResultSet rs = stmt.executeQuery(checkUser); //执行查询

if(rs.next())
response.sendRedirect("SuccessLogin.jsp");

else
response,sendRedirect("FailureLogin.jsp");

上边是一个正常的JSP登陆页面 . 但是userName跟userPassword都没有过滤直接就放到数据库中进行查询,存在典型的注射漏洞

如果我们知道数据库里有个admin的用户 那么我们就可以用or’a’=’a 或者 ’or1=1/*进行登陆而不用输入密码登陆。

现在我们来看看凡人网络购物系统Jsp版的登陆页面login.jsp..代码如下,

<%@ page contentType="text/html;charset=GBK" language="java" import="java.sql.*,java.util.Date" errorPage="" %>
<jsp:useBean id="mdb" class="ckstudio.db.faq" scope="page"/>
<%
  boolean foundeer=false;
  String user_name,user_pass;
  if(!foundeer){

if (session.getAttribute("user_name")==null){ //只判断是否为空,并未进行过滤
user_name=request.getParameter("user_name");
user_pass=request.getParameter("user_pass");

if(user_name==null || user_pass==null){
out.print("<font size=4 color=red>用户名和用户密码不能为空!</font>");
   foundeer=true;
  }

String sql="select * from member where user_name=’"+user_name+"’";
ResultSet rs;
rs=mdb.executeQuery(sql);

以下省略
...
  }

我们从

if (session.getAttribute("user_name")==null){
user_name=request.getParameter("user_name");
user_pass=request.getParameter("user_pass");

if(user_name==null || user_pass==null){
out.print("<font size=4 color=red>用户名和用户密码不能为空!</font>");
   foundeer=true;
  }

String sql="select * from member where user_name=’"+user_name+"’";
ResultSet rs;
rs=mdb.executeQuery(sql);

这里可以看到, 只判断了user_name是否为空,并没有进行有效的过滤,导致注射漏洞的发生,如果让select成功,就能成功饶过验证. 算是一个典型的or 注入
先用or 1=1和or 1=2来测试是否存在注入点,我在本地测试是成功的..在本本上我没法截图 然后继续 or exists(select XX from XX)返回or 1=1的页面,这里没什么可说的... 不懂的可以去看鸡头的那个新or 注入 讲 的很明白的...

其实这太系统简直是漏洞百出,还一个跨站的漏洞,在留言那里限制是10个字符。但是我们可以本地写个表单来提交就可以成功跨站的,代码我就不发了。 稍微懂点JSP的都能看出来。 
责任编辑:hackfly
【加入收藏】 【推荐好友】 【打印本文】
合作伙伴 - 联系我们 - 法律声明 - 关于我们 - 广告联系
网摘收藏: [新浪VIVI] [YouNote收藏] [牛啦!收藏] [加加文摘] [天天网摘]
版权所有:学生黑客联盟 黑ICP备05002849号 2006-2008 All Rights Reserved, Powered by StuCMS™ V1.40beta