SQL注入(入门)-对基础知识的认识(1)

在之前的考核中对SQL认知都很模糊,即使解题也基本是通过其他博主的WP来复制代码进行解答,并没有真正理解,现在通过资料阅读自己也有了一些新的认识
概念:SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。

SQL:用于数据库中的标准数据查询语言。   web分为前端和后端,前端负责进行展示,后端负责处理来自前端的请求并为其提供前端展示的资源,而数据库就是存储资源的地方(如mysql数据库)。那服务器如何对数据获取了?就需要使用SQL语句这一语法结构进行查询获取。SQL语句通过特有的语法对数据进行查询。

SQL注入原理通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法。

通过查阅可知SQL可分为平台层注入代码层注入

平台层注入:由于不安全的数据库配置或数据库平台的漏洞导致。

代码层注入:程序员对输入没有细致地过滤,从而执行了非法地数据查询。

原因:在前后端数据的交互中,前端的数据传到后台处理时,没有做严格的判断,导致其传入的数据拼接到SQL语句中,被当成SQL语句的一部分执行,从而导致数据库受损,信息丢失。

最常见的两种注入类型

参数类型有下面两种:

数字型、字符型

注入手法可分为这些:

联合查询注入、报错注入、基于布尔的盲注、基于时间的盲注、HTTP头注入、宽字节注入、堆叠查询、二阶注入。

对于url头爆破语句中  id=1  id=0 的理解 

如果只有两个回显位置,那么 id 必须填写一个不存在的数(-1或者0,这里并不仅仅局限于这两个数字,诸如-2,-5等等也可以),联合查询才能回显成功,因为 id=0 没有查询结果,所以页面中就返回联合查询的内容。所以,如果union 前面的查询失败,那么 union 后面的查询结果就能回显到页面。

对于数字型
我理解为当输入的参数为整形时,如果存在注入漏洞,它就是数字型注入。

eg:https://blog.csdn.net/aboutus.php?id=1

此时后台语句:$sql=“SELECT 123 FROM abc WHERE id='1 '"

检测方法:URL输入 and 1=1 / and 1=2 报错则说明有注入

字符型的话:
当输入参数为字符串时,就是字符型注入。

它与数字型最简单的区别就是:数字型不需要单引号来闭合,而字符串需要单引号来闭合。

eg:                https://blog.csdn.net/aboutus.php?id=1’

此时后台语句:$sql=“SELECT 123 FROM abc WHERE id='1 ’ ’ "

此时多出了一个单引号,破坏了原本的SQL语句结构,数据库无法处理,于是会报错,证明这条语句成功被带进数据库查询,存在字符型注入。此时通过 --+把后面的单引号注释掉,SQL语句也会形成闭合。

所以可以这样写:?id = 1’                        攻击语句  --+

传入页面就变成了  select user from database where id = ‘1’ 攻击语句 – ’

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值