基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习

第一节 我们首先要知道什么是SQL注入漏洞

SQL注入常见的web漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第1张图片

像这样我们输入?id=1 我们可以获得id=1的信息 这就是sql注入漏洞,可以通过sql的命令行去后台直接查询信息

第二节 SQL注入的产生原因

原因:在前后端数据的交互中,前端的数据传到后台处理时,没有做严格的判断,导致其传入的数据拼接到SQL语句中,被当成SQL语句的一部分执行,从而导致数据库受损,信息丢失。就是后端对输入没有做出充分的过滤然后对非法的输入做出了反应。

第三节 对SQL注入漏洞的分析
基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第2张图片

如图所示 当我们输入?id=1时候

 基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第3张图片

就会显示id=的一些具体信息 

为了让我更好的理解SQL注入的一些知识,我在网上下载了hackbar这款工具

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第4张图片

从这里写命令行比较清晰

然后我们代开源代码的话  就是源码为哦

sql= 'select  * from users  where id='1 and 1=1 ' limit 0,1",

然后就是注入的时候分为字符型和数字型 

查询的时候输入的时候如果 输入1=1的时候正确,输入1=2时候报错的时候说明他是数字型

而当你输入的时候 1=1时候正确 1=2正确的时候一般就玮字符型,因为数字被''这种都东西所包裹住了 字符都是一样的

而且还有其他的方法 比如输入

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第5张图片

输入2-1 如果出现的是2的用户的信息 那么就是字符型因为字符型没法检查数字运算

如果给出的是1的用户 那么说明就是数字型的输入 因为数字型的注入可以理解数字的运算

不用加号的原因 是因为有时候加号有可能会被认为是空格

第四节 如何判断闭合方式

数字型不需要闭合 而 字符型号可以闭合 闭合方式有 ' “ ‘) ")

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第6张图片

怎么判断闭合方式  输入1’ 会发现这里提示1‘是异常,说明这里我们多输入了一个’值

我们再在盲注里面进行对比

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第7张图片

当我们输入?id= 1‘的时候没有回显 报错

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第8张图片

当我输入--+时候就是把后面的 代码全部都注释掉 那么我们可以知道闭合方式为单引号

不需要的语句可以通过 --+或者其他方式将后面代码注释掉或者#号键

漏洞的注入点

什么是注入点,就是可以注入的地方,可以连接数据库的地方

第五节 联合查询

用union 联合查询,需要保证查询的列数和世纪列数相一致,所以我们需要知道有几列,才能周联合查询

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第9张图片

这里我们输入?id=1' group by 而不用order by 的原因是因为group by能绕过防火墙的检测
如上图所示我们输入4的时候有报错 那么我们尝试输入3

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第10张图片

当我们输入3的时候有成功的输出 所以我们知道有三行

然后我们需要有展占位符

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第11张图片

当我们少输入一位的时候就会报错

所以列位置必须占满

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第12张图片

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第13张图片

而且对于union来说 如果第一个运行成功的话,南无后面的指令将不再运行,所以我们使用

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第14张图片

故意让第一个为-1,然后它就会执行后面的查询

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第15张图片

位置可以不查询位置,但是不可以不用占位符

注入的基本过程

先开率字符型还是数字型,如果是字符型的就要考虑是否闭合,在注入 的时候最好使用group by因为能够绕过防火墙之类的设备

当我们想要查找table 的相关的信息

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第16张图片

输入table_name 来自 information_schema.tables然后我们能获得一些挂关于数据库的命令

或者我们可以在最后加入 where tables_schema=database()--+ 有时候在最后加入一个函数可以绕绕过防火墙

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第17张图片

函数group_concat

group_concat()的作用是确保所有查询的信息能放到一行来显示

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第18张图片

就可以把我们想获取的信息全部提取出来

extractvalue报错注入

报错注入就是构造语句,让错误信息中夹杂可以显示数据库内镕的查询语句

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第19张图片

因为有些时候这个成功的输入不会回复任何有用的信息

所以我们需要与引入报错注入

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第20张图片

比如我们现在输入一个?id=1'报错,由上图我们可以知道这是个单引号的闭合方式

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第21张图片

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第22张图片

由此可知我们的列数为3列

我们主要是看报错信息来看有用的信息

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第23张图片

我们故意输错database()输入成如图,因为 输入错误,所以我么不能可以通过这个方法获得当前数据库的名称为security

然后就是extractvalue报错注入

其实是来查询XML里面的内容

selct extractvalue(doc,/book/author/aurname') from xml

这是这个函数的查询方式

select extractvalue(doc,/book/author/title')from xml 查询书的名字

报错注入的突破口就是让页面上显示报错。

比如在本例中把查询参数的路径写错,页面上只会显示查询不到内容,但是不会报错。

但是如果把查询参数的格式符号写错,页面上就会提示出报错信息:

在实际的注入过程中,查询的列(比如本例中的doc)是不用管的,随便写就可以。因为我们关注的是后面查询的更重要的东西(database)

0x7e就是~,concat函数是拼接的作用。作用是在执行这条命令时遇到前面的飘号~(0x7e)从而引起报错。

然后我们这个基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第24张图片

然后我们通过报错来获取我们所需要的

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第25张图片

因为摄入量 0x7e是个'号,这个是不符合规定的所以引起了报错

所以能爆出我们所需要的信息

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第26张图片

输入这个我们可以爆出表名

ubstring报错注入

updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) 程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据

通extractvalue(),输入错误的第二个函数,让第二个函数报错,更改路径的函数

select updatexml(doc,。/book/auther/surname','1') from xml;

怎么利用呢,我们可以在第一个doc,'后面多加一个~然后让路径报错,就可以让回显,

我们拿less6来作比较

物品吗嗯首先应该确定闭合的的方式

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第27张图片

如图所示 没有回显

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第28张图片

如图所示爆出来了数据库当前的名称

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第29张图片

 and updatexml(1,concat(0x7e,(select group_concat( table_name) from information_schema.tables where table_schema=database())),3)--+

爆出了表名

我们尝试爆出账户和密码

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第30张图片

但是发现只能显示1-30个字符,不能完全的显示

substring控制字符输出

floor报错

select floor(rand()*2) from information_schema.tables随机报错出现我们需要的值

如果在rand()里面加入0数字,就会导致永久报错,所以可以出现回显

这个函数不是直接的调取命令

比如 select count(*),concat ws('-',(select database()),floor(rand(0)*2)) as a from users group by a;

我们是通过源文件的数据与0相减来实现的 造成键值冲突 就回将你想要的返回来 这里主要是使用键值冲突来造成错误返回的

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第31张图片

架构体系是这样的·

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第32张图片

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第33张图片

报错的能展示64位

布尔盲注

当语句输入错误,和正确会有两种状态,

ascii()这个命令

?id=1' and ascii(select database()))=?--+

就是猜测是多少进行布尔注入 比如ascii(substr(select database()),1,1))>=115--+

?id=1' and ascii(subtr('abcd',1,1))>97--+

sql注入文件上传

用文件上传拿webshel

首先我们应该确认数据库是否拥有读写的权限

用show variables like '%secure";

点击实行 写着secure

_file_priv如果后面跟着为空,那么说明咱们对数据库拥有读写权,如果后面有具体的位置,意思是这个数据库只有在那个位置才有读取权限,如果为null,就意思是没有读写权限

intp outfile命令使用的环境 服务器上可以写入文件的文件上的完整路径

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第34张图片

他明明不是双引号,却被判定为没有错误,这是因为双引号被夹在两个单引号中间,所以被判定为是正确的

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第35张图片

经过试验,我们知道了这个闭合方式为单引号进行闭合

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第36张图片

如此图为一句话木马

基于SQL注入漏洞的总结与归纳(个人学习 整理归纳复习_第37张图片

这里是上传木马

        into outfile 是显示插入的位置

然后我们就可以通过webshell工具来连接

你可能感兴趣的:(sql,学习,数据库)