|
| |
| |
你的位置 首页 >> 黑客技术 >> 最新漏洞->凡人网络购物系统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
|
|
|
|
|
|