| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 系统安全首页 | 漏洞分析 | 入侵检测 | 升级补丁 | 安全配置 |
凡人网络购物系统Jsp版漏洞分析
凡人网络购物系统Jsp版漏洞分析
作者:未知 文章来源:网络 点击数: 更新时间:2007-10-29 1:56:55
凡人网络购物系统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的都能看出来。
文章录入:郝丽    责任编辑:郝丽 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    Linux操作系统下的一些简
    Linux操作系统网络服务器
    Linux操作系统网络服务器
    17点基础知识 教你详细
    没有物理结点 改进无线网
    杀毒软件网络防火墙一个
    网络入侵四大主要途径及
    抵挡DoS远程连接让网络更
    1、基于Linux的网络安全
    屏蔽网络设置小技巧 保
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有