简单聊聊SQL注入的原理以及一般步骤

目录
  • 原理
  • 一般利用步骤
    • 1.判断注入点
    • 2.判断查询字段数
    • 3.查数据库名、版本号、用户名等信息
    • 4.查询表名
    • 5.查询字段名
    • 6.查询记录内容
  • 总结

原理

SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行。任何构成SQL语句的过程都应进行注入检查,因为SQL Server将执行其接收到的所有语法有效的查询。

(摘自微软 SQL注入,但要注意的是,SQL注入并不限于SQL Server,几乎任何数据库引擎都存在这个问题)

一般利用步骤

1.判断注入点

判断注入点有方面的含义,一是找到可能存在注入的位置,二十判断该处能否进行注入。在靶场环境下,我们已经知道,GET的参数id是与数据库进行交互的点,接下来判断能够进行注入。

id为1,成功查询,回显正常

id为1',数据库报错,由报错信息猜测闭合方式为单引号

id为1' --+,成功查询,回显正常,印证猜测,

id分别为1' and 1=1 --+和1' and 1=2--+,通过回显情况,进一步判断能否注入

1=1为永真,当1成功查询,若1=1也成功查询,则页面返回正常,1=2为永假,因此若1=2得到执行,则页面必返回不正常。通过对比二者返回结果,可知改点能否进行注入。

2.判断查询字段数

为了将我们想要的结果能够显示在页面上,我们需要用到联合查询,联合查询的条件之一是必须保证前后查询语句的字段数相等,因此,我们需要判断查询的字段数。

一般采用order by或union select如下:

order by 大于3的数时页面返回不正常,小于等于3时返回正常,得知原查询语句的字段数为3。或

当我们联合查询4列时,得到了查询语句由不同的列的错误,查询3列时:

成功查询,得原查询语句只有三列。

3.查数据库名、版本号、用户名等信息

union联合查询的规则是当前一个查询失败时执行第二个查询,前面我们知道了查询有三个字段,接下来将传入id为0,判断是三个字段的回显位置。

再由数据库内置的version()database()user()查询出版本号、数据库当前名和当前用户。

4.查询表名

前面我们查询得知,当前数据库版本为5.5.53,在MySQL5.5后版本都内置了数据库information_schema。它存储了数据库中所有的表名、字段名等信息。从而可以构造查询语句,获取表名。

payload:?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+

这里的group_concat()为SQL语句内置的聚合函数,用来将查询的结果作为一个字符串输出。

(使用payload:?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

5.查询字段名

知道了所有的表名,接下来选择一个表,查询其中所有的字段名。

payload:?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+

6.查询记录内容

有了表名和字段名,便可以爆出数据库中的记录了。

payload:?id=0' union select 1,group_concat(username),group_concat(password) from users --+

以上是一般SQL注入的流程,当然还有一些像报错注入,请求头注入、select into outfile 写入一句话木马等姿势未介绍。后续学习过程中再逐渐补充。

总结

到此这篇关于SQL注入的原理以及一般步骤的文章就介绍到这了,更多相关SQL注入的原理及步骤内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • sql注入之手工注入示例详解

    前言 这篇文章就是一个最基本的SQl手工注入的过程了.基本上在sqlilabs上面的实验,如果知道了其中的全部知识点,都可以通过以下的步骤进行脱裤.下面的这个步骤也是其他的脱裤手段的基础.如果想要精通SQL注入,那么这个最基本的脱裤步骤是必须了解和掌握的. 为了方便说明,我们还是用之前的数字型的注入点为例来进行说明. 得到字段总数 在前面的介绍中,我们已经知道在http://localhost/sqlilabs/Less-2/?id=1id是一个注入点. 后台的SQL语句的写法大致为 selec

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

    一.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入. 黑客通过SQL注入攻击可以拿到网站数据库的访问

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

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入. 黑客通过SQL注入攻击

  • 数据库之SQL注入原理以及过程的简单介绍

    1.产生SQL注入原因 开发代码的时候没有全面考虑到网络安全性,特别是在用户交互时,没有考虑到用户提交的信息中可能破坏数据库,没有对输入的数据进行合法的过滤.SQL 注入过程目的性是非常强的,其主要目标是 Web 应用的后台数据库,从数据库中获取信息和授予较高的权限,它先破坏数据库,再对数据库服务器进行破坏. 2.SQL注入原理 首先要了解web网站的架构: Web 网站架构,总体结构由 Web 服务器端.客户终端和通信协议三大部分组成. 表示层是指用户交互的界面.用户在使用时在表示层输入需求,

  • 有效防止SQL注入的5种方法总结

    sql注入入门 SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞. 演示下经典的SQL注入 我们看到:select id,no from user where id=2; 如果该语句是通过sql字符串拼接得到的,比如: String sql = "select id,no from user where id=" +

  • 利用SQL注入漏洞拖库的方法

    想在本地测试的话,可以在此免积分下载:利用SQL注入漏洞拖库 同上一篇文章一样,我们需要创建数据表,并在表中出入几条数据以备测试之用. 在数据库中建立一张表: 复制代码 代码如下: CREATE TABLE `article` ( `articleid` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '', `content` text CHARACTER SET

  • 利用SQL注入漏洞登录后台的实现方法

    早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的. 如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞.但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的. 前些天,网上传得沸沸扬扬的"拖库"事件给我们敲响了安全警钟. 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下.

  • 简单聊聊SQL注入的原理以及一般步骤

    目录 原理 一般利用步骤 1.判断注入点 2.判断查询字段数 3.查数据库名.版本号.用户名等信息 4.查询表名 5.查询字段名 6.查询记录内容 总结 原理 SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行.任何构成SQL语句的过程都应进行注入检查,因为SQL Server将执行其接收到的所有语法有效的查询. (摘自微软 SQL注入,但要注意的是,SQL注入并不限于SQL Server,几乎任何数据库引擎都存在这

  • 分享一个简单的sql注入

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到sql注入攻击. 分别输入1,2,3有对应的结果 使用'会报

  • PHP简单预防sql注入的方法

    本文实例讲述了PHP简单预防sql注入的方法.分享给大家供大家参考,具体如下: 出现sql注入一般都是因为语法不规范不严谨造成的,问题出现在sql语句上,而起决定性的是quote(').如下: $sql = "delete from table where id ='$id'" ; 正常提交的话就是删除一条数据,若id提交的是(1 ' or 1 #),那么sql语句就变成了 delete from table where id = '1'or 1 #'; 这样的话就会把整个表给删掉,造

  • sql注入数据库原理详情介绍

    目录 1 介绍 2 一般步骤 3 注入 3 函数 3.1 常用的系统函数 3.2 字符串连接函数 3.2.1 concat() 函数 3.2.2 concat_ws() 函数 3.2.3 group_concat() 函数 4 注入 4.1 联合查询 union 注入 4.2 information_schema 注入 5.2.1 获取所有数据库 4.2.2 获取指定数据库的表 4.2.3 获取指定表的字段名 4.2.4 获取字段值得内容 4.3 基于报错信息注入 4.3.1 三个常用报错函数

  • 使用PDO防sql注入的原理分析

    前言 本文使用pdo的预处理方式可以避免sql注入.下面话不多说了,来一起看看详细的介绍吧 在php手册中'PDO--预处理语句与存储过程'下的说明: 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制.预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次.当查询准备好后,数据库将分析.编译和优化执行该查询的计划.对于复杂的查询,此过程要花费较长的时间,如果需要以不同

  • 简单聊一聊SQL注入及防止SQL注入

    目录 SQL注入 附防止sql注入的一些建议 总结 SQL注入 SQL注入是通过操作输入来修改事先定义好的SQL语句,对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据,以达到执行代码对服务器进行攻击的方法. 现有一个数据库test中的表user,可以通过账号name,密码pass登录,查看id 登录代码 package JDBCtest; import java.sql.Connection; import java.sql.Dr

  • 网络安全及防御之SQL注入原理介绍

    目录 A.SQL注入概述 什么是SQL注入 SQL注入的原理 SQL注入的地位 SQL注入的来源 SQL注入的主要特点 SQL注入的危害 B.SQL注入攻击 SQL注入攻击 SQL注入威胁表达方式 SQL注入典型攻击手段 SQL注入是否存在注入的判断方式 SQL注入实战步骤 按照注入点类型来分类 按照数据提交的方式来分类 按照执行效果来分类 C.MySQL注入常用函数 MySQL的注释风格 MySQL--union操作符 MySQL--常用函数 MySQL--字符串连接函数 MySQL--inf

随机推荐