`
liu0107613
  • 浏览: 72060 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

java SQL注入分析程序

    博客分类:
  • java
阅读更多

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  `passwd` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

 

 

 

 

package com.liuxt;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlInjection {
 Connection conn=null;
 
 private void initDB(){
  
  try{
   Class.forName("com.mysql.jdbc.Driver");
   conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
                                      "user=root&password=G@111111");

  }catch(Exception e){
    e.printStackTrace(); 
  }
  
  
 }

 private boolean queryPreUser(String name, String passwd) {
  PreparedStatement statement=null;
  try {
   String sql=this.ceatePreSql(name,passwd);
   statement=this.conn.prepareStatement(sql);
   System.out.println("sql....."+sql);
   statement.setString(1,name);
   statement.setString(2,passwd);
   ResultSet res=statement.executeQuery();
   int count=0;
   while(res.next()){
    count=res.getInt(1);
    
   }
   
   if(count==1) return true;
   else return false;
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
  finally{
   try {
    statement.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   
  }
  return false;
 }
 
 
 

 
 private String ceatePreSql(String name, String passwd) {
  StringBuilder sb=new StringBuilder();
  sb.append("select count(*) as cc from user ");
  sb.append("where name=? ");
  sb.append("and passwd=? ");
  return sb.toString();
 }


 private boolean queryUser(String name, String passwd) {
  Statement statement=null;
  try {
   statement=this.conn.createStatement();
   String sql=this.creatSql(name,passwd);
   System.out.println("sql ....."+sql);
   ResultSet res=statement.executeQuery(sql);
   int count=0;
   while(res.next()){
    count=res.getInt(1);
    
   }
   
   if(count==1) return true;
   else return false;
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
  finally{
   try {
    statement.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   
  }
  return false;
 }
 
 
 private String creatSql(String name, String passwd) {
  
  StringBuilder sb=new StringBuilder();
  sb.append("select count(*) as cc from user ");
  sb.append("where name='"+name+"' ");
  sb.append("and passwd='"+passwd+"'");
  //sb.toString();
  return sb.toString();
 }

 public static void main(String[] args) {
  
  SqlInjection dbTest=new SqlInjection();
  dbTest.initDB();
  boolean result;
  result=dbTest.queryUser("test","111");
  System.out.println("query result(in Statement) is ===="+result);
  result=dbTest.queryUser("", "' or 1=1 --'");
  System.out.println("query result(in Statement) is ===="+result);
  result=dbTest.queryUser("' or 1=1 --'", "x");
  System.out.println("query result(in Statement) is ===="+result);
  
  result=dbTest.queryPreUser("test","111");
  System.out.println("query result(in PreparedStatement) is ===="+result);
  result=dbTest.queryPreUser("", "' or 1=1 --'");
  System.out.println("query result(in PreparedStatement) is ===="+result);
  result=dbTest.queryPreUser("' or 1=1 --'", "x");
  System.out.println("query result(in PreparedStatement) is ===="+result);
 }

}

 

运行结果:

 

sql .....select count(*) as cc from user where name='test' and passwd='111'
query result(in Statement) is ====true
sql .....select count(*) as cc from user where name='' and passwd='' or 1=1 --''
query result(in Statement) is ====true
sql .....select count(*) as cc from user where name='' or 1=1 --'' and passwd='x'
query result(in Statement) is ====false
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====true
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====false
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====false

 

 

分享到:
评论
5 楼 liomao 2009-07-15  
SQL注入无处不在
有数据输入查询数据库而不加以限制就很容易产生注入
我在C# 的界面程序也试过SQL注入成功
4 楼 fengzhongtian 2009-07-14  
<div class="quote_title">liu0107613 写道</div>
<div class="quote_div">
<p>DROP TABLE IF EXISTS `user`;<br>CREATE TABLE `user` (<br>  `id` int(10) unsigned NOT NULL auto_increment,<br>  `name` varchar(45) NOT NULL,<br>  `passwd` varchar(45) NOT NULL,<br>  PRIMARY KEY  (`id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=gb2312;</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>package com.liuxt;</p>
<p>import java.sql.Connection;<br>import java.sql.DriverManager;<br>import java.sql.PreparedStatement;<br>import java.sql.ResultSet;<br>import java.sql.SQLException;<br>import java.sql.Statement;</p>
<p>public class SqlInjection {<br> Connection conn=null;<br> <br> private void initDB(){<br>  <br>  try{<br>   Class.forName("com.mysql.jdbc.Driver");<br>   conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + <br>                                      "<a href="mailto:user=root&amp;password=G@111111">user=root&amp;password=G@111111</a>");</p>
<p>  }catch(Exception e){<br>    e.printStackTrace(); <br>  }<br>  <br>  <br> }</p>
<p> private boolean queryPreUser(String name, String passwd) {<br>  PreparedStatement statement=null;<br>  try {<br>   String sql=this.ceatePreSql(name,passwd);<br>   statement=this.conn.prepareStatement(sql);<br>   System.out.println("sql....."+sql);<br>   statement.setString(1,name);<br>   statement.setString(2,passwd);<br>   ResultSet res=statement.executeQuery();<br>   int count=0;<br>   while(res.next()){<br>    count=res.getInt(1);<br>    <br>   }<br>   <br>   if(count==1) return true;<br>   else return false;<br>   <br>  } catch (SQLException e) {<br>   e.printStackTrace();<br>  }<br>  finally{<br>   try {<br>    statement.close();<br>   } catch (SQLException e) {<br>    e.printStackTrace();<br>   }<br>   <br>  }<br>  return false;<br> }<br> <br> <br> </p>
<p> <br> private String ceatePreSql(String name, String passwd) {<br>  StringBuilder sb=new StringBuilder();<br>  sb.append("select count(*) as cc from user ");<br>  sb.append("where name=? ");<br>  sb.append("and passwd=? ");<br>  return sb.toString();<br> }</p>
<p><br> private boolean queryUser(String name, String passwd) {<br>  Statement statement=null;<br>  try {<br>   statement=this.conn.createStatement();<br>   String sql=this.creatSql(name,passwd);<br>   System.out.println("sql ....."+sql);<br>   ResultSet res=statement.executeQuery(sql);<br>   int count=0;<br>   while(res.next()){<br>    count=res.getInt(1);<br>    <br>   }<br>   <br>   if(count==1) return true;<br>   else return false;<br>   <br>  } catch (SQLException e) {<br>   e.printStackTrace();<br>  }<br>  finally{<br>   try {<br>    statement.close();<br>   } catch (SQLException e) {<br>    e.printStackTrace();<br>   }<br>   <br>  }<br>  return false;<br> }<br> <br> <br> private String creatSql(String name, String passwd) {<br>  <br>  StringBuilder sb=new StringBuilder();<br>  sb.append("select count(*) as cc from user ");<br>  sb.append("where name='"+name+"' ");<br>  sb.append("and passwd='"+passwd+"'");<br>  //sb.toString();<br>  return sb.toString();<br> }</p>
<p> public static void main(String[] args) {<br>  <br>  SqlInjection dbTest=new SqlInjection();<br>  dbTest.initDB();<br>  boolean result;<br>  result=dbTest.queryUser("test","111");<br>  System.out.println("query result(in Statement) is ===="+result);<br>  result=dbTest.queryUser("", "' or 1=1 --'");<br>  System.out.println("query result(in Statement) is ===="+result);<br>  result=dbTest.queryUser("' or 1=1 --'", "x");<br>  System.out.println("query result(in Statement) is ===="+result);<br>  <br>  result=dbTest.queryPreUser("test","111");<br>  System.out.println("query result(in PreparedStatement) is ===="+result);<br>  result=dbTest.queryPreUser("", "' or 1=1 --'");<br>  System.out.println("query result(in PreparedStatement) is ===="+result);<br>  result=dbTest.queryPreUser("' or 1=1 --'", "x");<br>  System.out.println("query result(in PreparedStatement) is ===="+result);<br> }</p>
<p>}</p>
<p> </p>
<p>运行结果:</p>
<p> </p>
<p><span style="color: #ff6600;">sql .....select count(*) as cc from user where name='test' and passwd='111'<br>query result(in Statement) is ====true<br>sql .....select count(*) as cc from user where name='' and passwd='' or 1=1 --''<br>query result(in Statement) is ====true<br>sql .....select count(*) as cc from user where name='' or 1=1 --'' and passwd='x'<br>query result(in Statement) is ====false<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====true<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====false<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====false<br></span></p>
<p> </p>
<p> </p>
</div>
<p> </p>
3 楼 guoxu1231 2009-06-11  
哟  漏点了  我要报告管理员才行   绝对不能让这么不河蟹的图片出现在JE上!
2 楼 iaimstar 2009-06-10  
ls图片 好不河蟹啊
1 楼 neusoft 2009-06-10  
在每次查询后 把记录数输出 大家就全明白了

相关推荐

    SQL注入攻击原理分析及JavaWeb环境下的防范措施.pdf

    本文在分析了SQL 注入原理的基础上,提出了几点Java Web 环境下防范措施。   随着Ineternet 技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台,许多单位或个人纷纷建立自己的网站。但是...

    SQL注入源码+SQL注入命令

    Java做的一个SQL注入实验,开发工具mysql数据库,创建表users,字段id,name,paswd;工具myeclipse+tomcat;是一个简单的程序

    SQL注入攻击与防御

    本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL...

    SQL注入攻击与防御(安全技术经典译丛)

    本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL...

    JAVA中防止SQL注入攻击类的源代码

    JAVA中防止SQL注入攻击类的源代码(包含网页版和程序代码两部分)

    sql注入工具Havij

    Havij+Pro.rar Havij是一款自动化的SQL注入工具,它能够帮助渗透测试人员发现和利用Web应用程序的SQL注入漏洞。

    基于Selenium的SQL注入漏洞检测系统的研究.pdf

    3. 结果分析模块:对检测结果进行分析,确定Web应用程序是否存在SQL注入漏洞,并给出检测报告。 四、系统设计 该系统的设计主要基于Selenium的自动化测试技术,使用Java语言来实现。系统架构如下: 1. 数据库层:...

    sql injection SQL注入解析 和解决方案

    SQL注入解析 解决方案 sql injection php+mysql的sql注入。做个好的程序员。写出健壮的程序。可靠的程序。

    SQL注入与代码防御.pdf

    SQL 注入是指攻击者通过构造特殊的输入数据,来攻击 Web 应用程序的数据库,或者说是攻击者通过构造恶意的 SQL 代码,来访问、修改或控制数据库中的数据。这种攻击方式非常危险,因为它可以导致敏感数据泄露、网站...

    java-sql-inspector:用于测试Java代码是否存在SQL注入漏洞的实用程序

    Java SQL检查器 用于测试Java代码是否存在SQL注入漏洞的实用程序。

    JSqlParser开源SQL解析库jar

    SQL解析与验证:可以用来检查用户输入的SQL语句是否符合预定义的规范,防止SQL注入攻击。 动态SQL生成:在应用程序中,根据业务逻辑动态构造SQL查询时非常有用。 SQL优化与转换:在数据库中间件或者ORM框架中,...

    动态代理模拟实现MybatisPlus SQL注入的功能.zip

    Mabits的动态SQL还允许开发者使用参数化查询,可以防止SQL注入攻击,并增强程序的安全性 学习经常用的几个标签 2.标签 标签是Mabits动态SQL中最常用的一个标签之一,它的作用是根据给定条件包含或排除不同的部分,以...

    Sql注入原理简介_动力节点Java学院整理

    当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站...

    SQL注入与优化.md

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器...

    sqldd:一款碾压sqlmap的sql注入漏洞检测系统^^

    Sqli-lib是一款由PHP语言编写SQL注入漏洞闯关游戏,包含了六十几个可注入页面,涵盖了几乎所有类型SQL注入漏洞,同时不同的关卡自定义了不同的过滤规则,是SQL注入漏洞学习的首选靶场。图4-1 本地搭建Sqli-lib环境...

    jdbc连接和sql注入

    java连接mysql,和mysql语句注入检查,简单程序,需要自己提供数据库

    《Java程序设计案例教程》教学课件09Java数据库编程.pptx

    因此,本模块我们开始学习编写Java应用程序访问数据库的方法技术,内容包含对数据库中数据记录的查询、添加、修改与删除等操作,以及使用预编译SQL语句防止从应用程序外部进行SQL注入。 《Java程序设计案例教程》...

    Java正则表达式的总结和一些小例子

    从 Java 1.4 开始,Java 核心 API 就引入了 java.util.regex 程序包,这是一个非常有价值的基础工具,能够用于许多类型的文本处理,如匹配、搜索、提取和分析结构化内容。 java.util.regex 程序包包括两个类:...

    JDBC(powernode CD2206)详尽版 (教学视频、源代码、SQL文件)

    JDBC(powernode CD2206)...7.6 使用PreparedStatement改进代码,解决SQL注入问题 八、编写JDBC工具类 九、CRUD操作 十、事务操作 十一、批处理 11.1 jdbc.properties 11.2 BatchDemo.java 11.3 没有进行批处理的耗时

    Java应用程序缺陷定位技术研究与实现_韦阳.caj

    本文提出一个结合静态分析和动态监测的缺陷定位方法检测 ...果表明,系统可以能够有效检测的目标程序的SQL注入和XSS攻击 漏洞,误报率低,验证了模型的有效性,取得了很好的效果。

Global site tag (gtag.js) - Google Analytics