SQL注入基础 知识

本文详细介绍了SQL注入的基础知识,包括注入原理、注入点判断、SQL语句的拼接原理,以及各种类型的注入攻击方式,如union联合注入、information_schema查询、报错注入等。此外,还探讨了SQL注入的提交方式和攻击手段,如盲注和宽字节注入。内容覆盖了从攻击者视角如何发起攻击到防御策略的理解,对理解和防止SQL注入至关重要。
摘要由CSDN通过智能技术生成

SQL注入基础知识

一、SQL注入的原理

(一)注入原理

1、一句话总结

sql注入存在于前后端数据交互中,前端用户输入的数据(或参数)没有经过严格处理,直接交给执行(即带入数据进行相关的操作)。

2、产生原因

后端接受前端用户相关的参数,没有经过严格的处理,就直接带入数据库操作。

3、SQL注入攻击的必要条件
  • 明确web应用程序所使用的技术,例如php+mysql,asp+mssql等;
  • 确定前端提交数据的方式与位置,方式例如post提交、get提交、cookies提交、ajax等;位置例如:登陆框、搜索框等;
  • 查找存在注入点的位置,根据上面的信息,定位注入点,可以详细观察网站的报错页面;

(二)注入点存在的常见位置

  • 登录验证模块
  • 修改用户信息/找回密码模块
  • 搜索模块/查询信息模块
  • 留言版模块/留言删除
  • 总结:凡是提交数据查询、数据插入、删除等与后端进行数据交互的位置,都有可能存在注入点。

(三)注入点判断(手工)

1、单引号法

在表单参数的后面添加一个单引号,如果页面不能正常显示,浏览器返回一些异常信息,则说明该位置可能存在注入点。

  • 这里需要注意,有部分网站进行了sql注入防护,这里会提示你输入参数不合法,这个时候就要使用另一种方法或进行绕过处理。
  • 这里所指的表单参数,可以通过抓包后在burpsuite更改header头部、post参数、get参数、cookies参数等方式;也可以在相关的输入框直接输入。
2、逻辑判断法

可以输入and 1=1and 1=2后提交页面,对比返回页面是否有不同之处,以此来判断是否存在注入点。

  • 若这种方式依然被拦截,可以尝试编码处理等方式进行绕过。

(四)SQL注入攻击的准备工作

1、浏览器
  • 火狐:安装hackbar可以进行注入攻击的调参

  • 低版本的IE浏览器:配置显取消示友好http错误信息,能够更好的判断注入点是否存在,更加便捷的观察注入效果

    #配置方法
    #工具-->internet选项-->高级-->取消勾选“显示友好http错误消息”
    
2、工具
  • Burp Suite:抓取数据包,修改请求参数
  • SQLmap:自动注入攻击工具(单独模块总结)

(五)SQL语句的拼接原理(MySQL)

以DVWA漏洞实验平台为例子(php+mysql环境)

  • 在查询框输入1,浏览器发送的url请求为http://192.168.75.4:9500/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#

在这里插入图片描述

  • 而实际上,在网页后端将用户输入的参数1,拼接到后端程序中的SQL语句上,程序中的拼接语句如下(图中user和id中间少了个_):

在这里插入图片描述

  • 而在数据库中的查询语句为:

    mysql> select first_name,last_name from users where user_id = '1';
    +------------+-----------+
    | first_name | last_name |
    +------------+-----------+
    | admin      | admin     |
    +------------+-----------+
    1 row in set (0.00 sec)
    
  • 也就是可以在id=1这个位置,利用注释符号可以构造SQL注入语句,那么这样就能可以构造攻击语句:

    mysql> select first_name,last_name from users where user_id = '1' union select database(),user();
    +------------+----------------+
    | first_name | last_name      |
    +------------+----------------+
    | admin      | admin          |
    | dvwa       | root@localhost |		#这一行是正常语句无法查出的信息。
    +------------+----------------+
    2 rows in set (0.00 sec)
    # 理解:1是正常的参数,1后面的都是我们构造的攻击语句,可以在输入框中输入 1' union select database(),user() #,为什么不用;,因为在编程语言中,传给后端执行,可加;也可不加,但是在mysql命令框中一定要加。
    

在这里插入图片描述

二、注入的分类(闭合方式)

(一)数字型注入

  • 理解:输入的查询参数为数字型

    mysql> select username,password from users where id=1;
    +----------+----------------------------------+
    | username | password                         |
    +----------+----------------------------------+
    | admin    | e10adc3949ba59abbe56e057f20f883e |
    +----------+----------------------------------+
    1 row in set (0.00 sec)
    
  • 例子:

    在这里插入图片描述

(二)字符型注入

  • 理解:输入的查询参数为字符串型

    mysql> select username,password from users where username='admin';
    +----------+----------------------------------+
    | username | password                         |
    +----------+----------------------------------+
    | admin    | e10adc3949ba59abbe56e057f20f883e |
    +----------+----------------------------------+
    1 row in set (0.00 sec)
    
  • 例子:

    在这里插入图片描述

(三)搜索型注入

  • 理解:输入的查询参数为模糊字段型

    mysql> select username,pw from member where username like '%vince%' ;
    +----------+----------------------------------+
    | username | pw                               |
    +----------+----------------------------------+
    | vince    | e10adc3949ba59abbe56e057f20f883e |
    +----------+----------------------------------+
    1 row in set (0.00 sec)
    
  • 例子:

在这里插入图片描述

(四)xx型注入

  • 理解:也称之为其他类型,输入的查询参数为需要用括号等闭合;

    mysql> select username,pw from member where username=("vince");
    +----------+----------------------------------+
    | username | pw                               |
    +----------+----------------------------------+
    | vince    | e10adc3949ba59abbe56e057f20f883e |
    +----------+----------------------------------+
    1 row in set 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四粒和七喜呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值