最新宽字节注入攻击和代码分析技术

从返回结果可知,数据库第一个表名是users,查询users表字段可使用特定语句。宽字节注入代码分析 在宽字节注入页面中,程序首先获取GET参数ID,对该参数使用addslashes()进行转义,然后将转义后的ID拼接到SQL语句中进行查询。当访问id=1'时,执行的SQL语句为SELECT * FROM users WHERE id='1\'。单引号...
最新宽字节注入攻击和代码分析技术
宽字节注入攻击

这类攻击的测试地址位于书中第二章。当访问id=1',页面返回了带有转义符(反斜杠)的结果,说明程序并未报错,却意外地加入了转义字符。查看返回信息,参数id=1在数据库查询时被单引号包围。若输入id=1',单引号会被转义,导致参数ID未能逃出单引号的束缚,通常情况下不存在SQL注入漏洞。但当数据库编码为GBK时,可以利用宽字节注入。具体操作是在地址后加%df,再插入单引号,因为反斜杠的编码为%5c,在GBK编码中,%df%5c为繁体字“连”,此时单引号成功“逃逸”,引发MySQL数据库错误。

通过输入id=1%df'%23,页面返回结果表明SQL语句符合语法规范。进一步判断注入情况,使用and 1=1和and 1=2。访问id=1%df' and 1=1%23和id=1%df' and 1=2%23后,分别得到图4-54和图4-55所示结果。当and 1=1时,程序正常返回;and 1=2时,程序报错,判断参数ID存在SQL注入漏洞。接着使用order by查询数据库表字段数量,得知字段数为5。页面直接显示数据库内容,因此可使用Union查询,调整查询ID值为负数。尝试查询当前数据库的库名(user())时,语句为id=-1%df' union select 1,user(),3,4,5%23,结果如图4-58所示。查询数据库表名通常采用特定语句,但因单引号被转义,自动多出反斜杠导致错误,故利用嵌套查询方法,更改后的查询语句为select table_name from information_schema.tables where table_schema=(select database()) limit 0,1,如图4-59所示。从返回结果可知,数据库第一个表名是users,查询users表字段可使用特定语句。

宽字节注入代码分析

在宽字节注入页面中,程序首先获取GET参数ID,对该参数使用addslashes()进行转义,然后将转义后的ID拼接到SQL语句中进行查询。当访问id=1'时,执行的SQL语句为SELECT * FROM users WHERE id='1\'。单引号被转义符“\”转义,通常情况下无法注入。由于数据库查询前执行了SET NAMES 'GBK',将数据库编码设为宽字节GBK,故此处存在宽字节注入漏洞。PHP中通过iconv()进行编码转换时也可能存在宽字符注入漏洞。

Ms08067安全实验室致力于网络安全知识的普及和培训,是专业“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。平台开设Web安全零基础就业、Web高级安全攻防进阶、红队实战攻防特训等课程,出版安全图书,提供系统培训。2024-11-19
mengvlog 阅读 71 次 更新于 2025-12-16 14:57:48 我来答关注问题0
檬味博客在线解答立即免费咨询

报错相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部