基于错误的SQL注入
基于错误的SQL注入
最前面的话
- 预备知识
- SQL基础知识,包括数据库增、删、改、查等SQL基础语句以及聚合函数、子查询等一些高级语法。
- 编程知识,包括使用编程语言提供的操纵数据库接口,如PHP中的mysql系列函数。
- 文章以sqli-labs作为学习环境,大家可以在本地下载安装
- 文章会努力从如何攻击、剖析原因、防范横向叙述,从读取数据、提权纵向延伸。
- 文章会定期更新,也是对自己学习的监督。
- 文中不当之处,敬请指出,望不吝赐教。
第一篇文章先介绍基于错误的SQL注入,简言之,输入畸形数据后,我们可以回显的错误信息,我们根据错误信息帮助我们进行注入。本文结构如下:
概要
- 联合查询 Union Select
- 字符型 String
- 整型 Intiger
- 手工注入攻击
- 子查询或双查询 Double
联合查询 Union Select
字符型 String
攻击测试
sqli-labs中less-1 Error Based-String,我们输入?id=1,正常显示用户名和密码。输入畸形数据?id=1’,报错如下:
错误中提示,我们在SQL语法错误,在第一行的’’1’’ LIMIT 0,1’附近。其中,‘1’的两边有单引号,由于我们刚才在1的后面加的单引号,导致解析异常。通过错误我们发现,在SQL语句中,参数1是作为字符串进行查询的,故我们把这种类型的SQL注入称之为基于错误的字符型注入。注:可以是单引号、双引号
源代码分析
SQL语句:
输入正常是SQL语句:
畸形数据时SQL语句:
通过上述两条SQL语句,是把id作为字符形式进行查询,故可以理解为基于错误的字符型注入。
那么错误是怎么显示出来的?在源代码有一下语句:
print_r(mysql_error())语句在异常时,输出错误信息。
通过上面简单的源代码分析,可以理解基于错误的字符型注入。
整型 Intiger
基于错误的整型注入和上面类似。简要叙述。
攻击测试
sqli-labs中less-2 Error Based-Intiger,我们输入?id=1,正常显示用户名和密码。输入畸形数据?id=1’,报错如下:
注意!上述报错信息与上一条有区别。对比如下:
第一条 ‘1’’ LIMIT 0,1
第二条 ‘ LIMIT 0,1
第一条中1,第二条中没有。说明第二条中,我们输入的单引号没有打乱原本的单引号闭合策略。详细看源代码分析。
源代码分析
SQL语句:
正常试:
异常时:
这里id以整型带入SQL语句查询。故理解为基于错误的整型注入。