sql注入攻击与防御第二版读书笔记二——SQL注入测试
寻找SQL注入
该阶段的主要目标是识别服务器响应中的异常并确定是否由SQL注入漏洞产生,随后确定在服务器端运行的SQL查询的类型(select,update,insert或delete),以及将攻击代码注入查询中的位置(比如from,where或者order by等)
我们需要关注:get,post,cookie,host,referer,useragent。
理解并利用SQL注入漏洞所涉及的主要技术包括:在心里重建开发人员在Web应用中编写的代码以及设想远程SQL代码的内容。如果能想象出服务器正在执行的代码,就可以很明确的知道在哪里终止单引号以及从哪里开始添加单引号。
操纵参数
将参数改为应用未预料的值
添加单引号(')
将字符串或数字等价替换 例如:mysql中:bike 与 bi' 'ke等价 在SQL Server中 bike与bi'+'ke等价 数字则用大数减小数 如果结果一样 就可能有注入
将字符串改成数字,或者反之
用and,or进行进一步确认
数据库错误
当用户请求触发数据库错误时,可能有以下几种反应
将SQL错误显示在页面上,它对Web浏览器用户可见。
将SQL错误隐藏在Web页面源代码中以便调试
检测到错误时跳转到另一个页面
返回HTTP错误代码500(内部服务器错误)或者HTTP重定向代码302
应用适当的处理错误但不显示结果,可能会显示一个通用的错误页面
SQL盲注
攻击者可以操纵SQL语句,应用会针对真假条件返回不同的值,但是攻击者无法检索查询结果。
内联SQL注入
数字或字符串等价替换
用 and or 测试
终止式SQL注入
注释字符
SQL Server ,Oracle,PostgreSQL --(单行注释) /* */(多行注释)
MySQL -- (后接空格 单行注释) #(单行注释) /* */(多行注释)
执行多条语句
SQL Server 6.0后的所有版本支持且允许执行下列语句:
select foo from bar; select foo2 from bar2;
MySQL4.1后也引入了该功能,但它在默认情况下并不支持该功能。
Oracle不支持多条语句。
时间延迟
SQL Server ;waitfor delay '0:0:5';--
MySQL benchmark(1000000,encode('hello','mom'))