SQL注入篇--其他注入方式

SQL注入篇–其他注入方式

1)宽字节注入

先来说什么是宽字节。当某字符的大小为一个字节时,称其字符为窄字节.当某字符的大小为两个字节时,称其字符为宽字节.所有英文默认占一个字节,汉字占两个字节。常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等。

宽字节注入其实就是后端用了类似php中addslashes()的函数或方法。这个函数或方法会在输入的特殊字符前加入反斜杠\表示转义。但是因为宽字符的原因,转义的窄字符加输入的窄字符组合就是宽字符。所以后端如果使用宽字节编码,那么就可能可以使用宽字节注入。如下:
在这里插入图片描述

我们可以看到查询的sql语句被加了反斜杠,所以单引号不能做到闭合了。我们可以输入这个:%9D‘

在这里插入图片描述

可以看到反斜杠被和谐掉了,这样我们的单引号就可以完成闭合,然后我们可以构造payload:

?id=%9D’ union select 1,database(),3 --+

在这里插入图片描述

2)加密注入

如果我们无论输入什么都无法获取回显,我们可以尝试输入加密的数据来尝试,比如使用base64进行一个加密:

在这里插入图片描述

在这里插入图片描述

所以我们后续注入也要使用base64进行加密:

在这里插入图片描述

3)搜索型注入

搜索功能在许多web项目中非常常见,当我们可以操作搜索用的sql语句时,我们就可以使用搜索型注入:

在这里插入图片描述

在这里插入图片描述

查看回显,得知搜素型注入可以利用,我们构造payload:

?name=asdasd%’ union select database(),user(),3 --+

在这里插入图片描述

4)cookie注入

cookie注入其实就是后端将cookie信息存放到了数据库,其注入原理和一般的sql注入一样,就是注入点是http请求中的cookie。

我们使用sqlilab的第20关来演示:

首先正常登录:
在这里插入图片描述

发现这关将cookie信息和useragent信息全部放到了页面上,所以推测它的后端存放了这些信息到数据库,下面bp抓包尝试闭合:

在这里插入图片描述

可以看到响应包里边的数据,有报错,看信息直到这是单引号闭合,下面构造payload执行,这里使用报错注入:

在这里插入图片描述

payload:’ and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+

5)HTTP头部信息注入

HTTP头部信息注入和cookie注入其实一样,cookie也是http头部的信息之一,http头部信息注入就是换成其他的信息来注入了,比如useragent。下面用slqilab的第18关来演示:

首先正常登录

在这里插入图片描述

可以看到它显示了useragent的信息,下面我们抓包对他进行闭合:

在这里插入图片描述

发现无法闭合,我们使用’and ‘1’='1 来闭合:

在这里插入图片描述

可以看到闭合成功,下面构造payload来攻击:

在这里插入图片描述

看到爆出了数据库,payload:'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and ‘1’='1

6)二次注入

二次注入一般发生在后端对输入的字符进行了过滤,但是没有对数据库中查询出的数据做过滤的情况。下面我使用sqlilab中24关来演示:
在这里插入图片描述

点进来发现是一个登录注册界面,我们先去注册:

在这里插入图片描述

我们将用户名写成这样,后端对这些字符做了处理,所以并不会造成影响,可以存进去,但是当我们对他进行查询的时候,结果就成了类似这样: select pass from xxx where username=‘admin’# ‘’ 这样我们实际查询的就是admin的信息了,修改也一样。所以我们进行如下操作:

注册成功后进入修改密码:

在这里插入图片描述

我们将密码改成123,然后退出登录使用密码123登录admin账户:

在这里插入图片描述

可以看到成功进入了。

7)多语句注入

如果后端使用了类似mysqli_multi_query();这样的函数,就可以使用多条语句注入了。

我们使用sqlilab的38关来演示:

我们直接使用如下payload:

?id=1’;select ‘123’ into outfile’E:/phpStudy/www/123.php’ --+

在这里插入图片描述

执行玩之后我们并不会看到任何结果,因为就算可以多条sql语句使用,但是后端使用的还是那一条sql语句返回的数据,我们并不能太准确的知道后端是怎么处理sql语句的返回数据的,所以我们可以直接写入一个文件来尝试。我们现在查看写入文件的位置:

在这里插入图片描述

发现是写入的。所以这样我们在后边可以结合这个文件实施木马的植入。

8)文件写入/读取

当我们知道web资源存储的位置,并且对改路径有读写权限的时候,我们就可以使用文件读写注入,这样要使用union来进行注入。

我们在pikachu中复现:

皮卡丘的字符型注入是单引号闭合,我们直接使用如下payload:

?name=lili’ union select 1,load_file(‘E:/phpStudy/www/123.php’),3 --+

在这里插入图片描述

看到我们的文件内容被显示了出来。

文件写入必须要有多语句注入的支持,sql语句如下:

select ‘要写入内容’ into outfile ‘写入的路径’

9)针对其他数据库的注入

1)对access数据库的注入

在判断数据库的时候,我们可以根据后端使用的语言进行判断,比如asp语言一般使用的就是access数据库。如果报错信息返回包含Microsoft OLE DB Provider for ODBC Drivers这类信息,那么也是access数据库。

access数据库注入中常用以下函数:

count()		# 返回在给定的选择中被选的行数 
len()		# 返回字符串长度 如:len(“tystech”) 返回”7”
asc()		# 返回字母的ascii值 如:Asc(“A”) 返回”65” 
mid()		# 返回子字符串,第1位为截断的字符串,第2位为截断开始的位置, 第3位是截断的位数如:mid(“ndsec”,3,2) 返回”se” 
IIF()		# 函数:根据表达式的值,来判断condition,条件成立返回true,反之 返回false 语法: IIF(condition, true, false) 
chr()		# 返回ascii码对应的字符 如:chr(65) 返回”A “ 
exists()		# 判断是否存在数据,返回值true或者false

acess数据库的注入流程一般是要先判断数据库表名,然后判断列名,再获取内容,其实就是硬猜。

下面使用一个网站例子来演示:

首先进入网站:

在这里插入图片描述

我们随便点击一个链接:
在这里插入图片描述

查看url地址栏,发现有get请求发送了一个id数字给后端,我们尝试在这里注入:

首先判断类型,我们输入一个单引号尝试:

在这里插入图片描述

出现了报错,我们输入5-2尝试:

在这里插入图片描述

确定这是数字注入。下面判断列数:

在这里插入图片描述

通过一直尝试,得到列数11列。下面判断显示位:

在这里插入图片描述

发现出错了,原因是access不支持这样的查询,必须要有表名,我们猜测一下表名:

在这里插入图片描述

发现是存在一个表叫做admin的。我们接着判断:

在这里插入图片描述

然后我们获取数据:

在这里插入图片描述

我们现在已经获取到了用户名密码,只不过密码是md5加密的,我们现在去尝试解密一下:

在这里插入图片描述

下面进行布尔盲注:

获取数据库信息步骤和上述一样,这里演示一下布尔盲注的过程:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到第一行的username数据长度为5个字符。接下来进行逐个猜解:

在这里插入图片描述

在这里插入图片描述

使用这两种方式都是可以的。

2)对mssql(sql server)进行注入

首先,写一下如何查询某一行的值,比如我们获取第二行:

在这里插入图片描述

在这里插入图片描述

这次我们使用另一个叫餐网站来演示,首先判断列数:

在这里插入图片描述

然后判断显示位:

在这里插入图片描述

在这里插入图片描述

然后我们获取数据:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下面我们尝试报错注入,先获取当前数据库:

在这里插入图片描述

然后所有数据库名:

在这里插入图片描述

获取表:

在这里插入图片描述

获取表字段:

在这里插入图片描述

下面使用布尔盲注:

先获取数据库长度:

在这里插入图片描述

然后截取数据库名:

在这里插入图片描述

获取所有数据库:

在这里插入图片描述

10)针对所有数据库的sql注入流程:

# 1.找到注入点找到可以被利用的地方,判断是get型还是post型来进一步利用# 2.判断数据库类型然后闭合首先判断数据库是哪个数据库,可以根据每个数据库的特色来进行尝试,比如mysql特有的"# "注释。然后判断数据类型是数字型还是字符型,然后根据需求闭合sql语句,构造payload# 3.获取信息使用union注入或者盲注或者其他种的sql注入方式来构造payload,根据数据库的不同来调整payload,最后执行获取信息。# sql注入的防御
1.报错信息不显示
2.严格过滤(' " )#union select sleep order by group by and or)
3.编码:对关键字或字符做编码转义
3.pdo预处理方式


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部