资源描述:
《mysql注入的经典介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MYSQL注入的经典介绍1.MYSQL注射的产生.漏洞产生原因:程序执行中未对敏感字符进行过滤,使得攻击者传入恶意字符串与结构化数据查询语句合并,并且执行恶意代码.咱们先创造一个没有过滤的程序.因为我机器上没有PHP,所以我就是用JAVA了,我会详细注释.代码数据库:createdatabaseifnotexists`test`;USE`test`;/*数据表`account`的表结构*/DROPTABLEIFEXISTS`account`;CREATETABLE`account`(`accountI
2、d`bigint(20)NOTNULLauto_increment,`accountName`varchar(32)defaultNULL,`accountPass`varchar(32)defaultNULL,PRIMARYKEY(`accountId`))ENGINE=InnoDBDEFAULTCHARSET=latin1;/*数据表`account`的数据*/insertinto`account`values(1,'account1','account1');/*数据表`admin`的表结构*/
3、DROPTABLEIFEXISTS`admin`;CREATETABLE`admin`(`adminId`bigint(20)NOTNULLauto_increment,`adminName`varchar(32)defaultNULL,`adminPass`varchar(32)defaultNULL,PRIMARYKEY(`adminId`))ENGINE=InnoDBDEFAULTCHARSET=latin1;/*数据表`admin`的数据*/insertinto`admin`values(1,
4、'admin','admin');:程序:<%@pagelanguage="java"import="java.util.*,java.sql.*"pageEncoding="utf-8"%>
<%//连接MYSQL的字符串.//jdbc:mysql://localhost:3306/test//驱动:数据库://地址:端口/数据库名称StringmysqlConne
5、ction="jdbc:mysql://localhost:3306/test";//加载驱动com.mysql.jdbc.Driver是JAVA与MYSQL连接用的JDBC驱动Class.forName("com.mysql.jdbc.Driver").newInstance();//建立MYSQL链接root是用户名cx0321是密码Connectionconnection=DriverManager.getConnection(mysqlConnection,"root","cx0321");/
6、/建立一个查询对象Statementstatment=connection.createStatement();//建立一个查询返回集合.就是说查询完以后返回的数据全部都在这个里面.ResultSetresultSet=null;//从account里面读取数据.resultSet=statment.executeQuery("select*fromaccountwhereaccountId='"+request.getParameter("id")+"'");//循环,直到resultSet结束wh
7、ile(resultSet.next()){//从resultSet读取出值输出到页面.out.print(resultSet.getInt(1)+"
8、");//取出第一列的值,因为是数字类型的所以是getInt();out.print(resultSet.getString(2)+"
9、");//取出第二列的值,因为是字符串类型的所以是getString();out.print(resultSet.getString(3)+"
10、");out.print("
");//页面输出换行}%>
11、dy>2.漏洞的利用(图1)这个就是数据库里的记录了.以后黄色为关键语句,红色为输入的部分.大家注意看resultSet=statment.executeQuery("select*fromaccountwhereaccountId='"+request.getParameter("id")+"'");这里的request.getParameter("id")是获取GET传参的id参数,也就是mysqlInject.jsp?id=1这里的i