简单的sql注入式攻击 教程(小白 )

来源:互联网 发布:mac window 编辑:程序博客网 时间:2024/05/21 13:57

SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

以下是整理网上教程所得出的,如有误,非常感谢指出

1.在数据库中创建表example和表tt

 


2.编写Java文件链接数据库,并执行查询语句

package student;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/* * 数据库的连接 */public class SQLinj {private static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";private static String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=(你的数据库名)";private static String userName="( 账号名 )";private static String userPwd="( 账号对应的密码)";/* * sql注入 */public Boolean select(String name,String paswd){Boolean bo = false;Connection connection =null;try{Class.forName(driverName);connection=DriverManager.getConnection(dbURL,userName,userPwd);}catch(ClassNotFoundException e){e.printStackTrace();}catch (SQLException e){e.printStackTrace();}String selectsql="select * from example where name = '" + name + "' and passwd = '"+ paswd +"'";PreparedStatement pstmt=null;try{pstmt=connection.prepareStatement(selectsql);ResultSet rs = pstmt.executeQuery();if(rs.next()) bo=true;}catch(SQLException e){e.printStackTrace();}finally{//关闭try {pstmt.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return bo;} }

3.编写jsp代码,实现登录
page1:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>         page 1        

登录

用户名 密码
page2:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@page import="student.SQLinj"  %><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>              page 2              <%    String name=request.getParameter("name");    String paswd=request.getParameter("paswd");    out.print("你输入的用户名为:"+name+",");    out.print("密码为:"+paswd+"。
");SQLinj sqlinj = new SQLinj();Boolean bo=sqlinj.select(name,paswd);pageContext.setAttribute("bo",bo);%>

登录成功!

登录失败


4.发布web项目
正常登录



不正常登录


依旧功,以及如下情况


查看表tt

登录失败却顺利将表tt删除了



这时候的你  


其实道理很简单,回到开头,什么是sql注入式攻击? 

SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令(划重点)

等于select * from example where name='1'or'1'='1'and password='1'or'1'='1'  妈妈咪,'1'='1'是true,那么'1'or'1'='1'就一定是true哇

这样就直接绕开了 校验。。。

后边的';drop table tt -- 是等于select * from example where name='' ;drop table tt --and password='1'or'1'='1' 

直接将and password='1'or'1'='1'  注释掉了。。。(sql语句中可用 -- 注释)

同理。。我们可用实现数据库的增删改查


以上,仅供参考学习,可能有不准确的,望指出

0 0
原创粉丝点击