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’-- ’
至于为什么这么写 ,可以参考这篇文章
爆列
?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 – ’
结果得出
参考文章:
总结
本章是因为在刷题所以写下这篇文章便于自己理解,有误之处请多多指教,我会细心的调查和改正。本文还有些地方并没有完善,后续会完善。