原理

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注入的原理及一般步骤的更多相关文章

  1. Sql注入基础原理介绍

    说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...

  2. 【渗透课程】第五篇-SQL注入的原理

    哈哈哈,讲到注入了.我想给大家讲注入的原理.这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句.怎么说呢,我们先讲一个概念吧! 网站和网页的区别 单纯的网页是静态的 ...

  3. SQL注入的原理以及危害

    SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符 ...

  4. Java学习笔记47(JDBC、SQL注入攻击原理以及解决)

    JDBC:java的数据库连接 JDBC本质是一套API,由开发公司定义的类和接口 这里使用mysql驱动,是一套类库,实现了接口 驱动程序类库,实现接口重写方法,由驱动程序操作数据库 JDBC操作步 ...

  5. 初级安全入门——SQL注入的原理与利用

    工具简介 SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器.它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文 ...

  6. 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理

    一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...

  7. 简单说说mybatis是防止SQL注入的原理

    mybatis是如何防止SQL注入的 1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterT ...

  8. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  9. SQL注入的原理与预防

    1. 什么是SQL注入? SQL注入是常见的网络攻击方式之一,通过SQL语句实现无账号登录,非法获取甚至篡改数据库中的数据. 2. SQL注入的思路 (1)找到SQL注入位置: (2)判断服务器类型和 ...

随机推荐

  1. Cookie.Session到Token和JWT

    一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...

  2. Echart可视化学习(六)

    文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 柱状图定制 官网找到类似实例, 适 ...

  3. Kube-OVN 0.6.0 发布,支持 IPv6、流量镜像及更多功能

    Kube-OVN 是一个基于 OVN 的 Kubernetes 开源网络系统. 本次更新主要包含了以下内容: 1. 支持流量镜像 在安装 Kube-OVN 时可以开启 mirror 选项,会自动在每个 ...

  4. Selenium_python自动化跨浏览器执行测试

    Selenium_python自动化跨浏览器执行测试(简单多线程案例)  转:https://www.cnblogs.com/dong-c/p/8976746.html 跨浏览器测试是功能测试的一个分 ...

  5. [学习分享] 在Windows操作系统下如何安装RMySQL包

    最近在做股票的高频交易数据分析,需要用到数据库,而我只对MySQL比较熟悉,于是就安装了MySQL.当我安装好了MySQL后,正兴冲冲地准备安装RMySQL包时,问题来了:RMySQL包不支持wind ...

  6. Go环境配置和GoModule

    Linux相关 Linux常用操作 mkdir directory --创建文件夹 vi file --创建文件,再关闭vim rm file --删除文件 rm -rf directory --递归 ...

  7. 搭建服务器之DNS

    DNS服务器,实用软件为bind,服务守护进程为named,一下记录一下自己的搭建过程: 1.yum install bind*  其中包括bind本身软件,测试dns的一些工具dig,nslooku ...

  8. Go 面向对象之结构体

    #### Go 面向对象之结构体最近有四天没更新公众号,有一些事情耽误了,生活就是这样,总会一些事情让人措不及防; ***山浓水浅,坐看流年***1. Go 也支持面向对象编程(OOP) 但是它和传统 ...

  9. UncLutter

    在 Mac 上「速记」的正确姿势:Unclutter 现代人的大脑,每天都会被大量有用,或无用的东西充斥着,过多「思想垃圾」的沉重负担就容易导致失忆.也就是说,你很可能会记得一个无关紧要,但给你留下深 ...

  10. 获取nginx日志状态码百分比脚本

    #!/bin/bash pwd=/app/nginx/logs/access.log for num1 in `cat $pwd | awk '{print $9}' | grep -Ei " ...