SQL注入:
概念:在web应用程序没有对用户输入的参数做合理过滤的时候,将SQL命令注入到web表单提交或输入域名或页面请求的查询字符串中(一般添加在查询语句的结尾),从而达到欺骗服务器执行恶意SQL语句获得数据库相关信息的目的。
原理:在web应用程序没有对用户输入参数做出合理过滤的情况下,攻击者将恶意的SQL语句添加在正常的查询语句结尾,从而欺骗数据库服务器执行SQL语句返回数据库信息,进而猜解数据库中的表、字段、内容,得出web管理员的帐户信息,在后台登录执行一些违规操作。
测试方法:
一:判断注入点
(1)输入'
(2)注入 and 1=1
(3)输入 and 1=2
如果(1)报错或者返回数据库信息,则说明存在注入点;(2)返回正确,(3)返回错误,说明存在注入点。
二:判断数据库类型
从返回的信息中判断数据库类型,为下一步攻击做铺垫。
三:根据注入参数的类型,重构SQL语句
(1)ID=1数字型注入参数,SQL语句大致为:Select * from 表名 where 字段=1
(2)name=上卿字符型注入参数,SQL语句大致为:Select * from 表名 where 字段=上卿
(3)搜索关键字=孙,如keyword=孙,SQL语句大致为:Select * from 表名 where 字段 like '%孙%'
四:猜解表名、字段名和内容
(1)and exists (select * from 表名) 如果页面返回正常,则存在此表,反之,不存在,继续猜测表名,直至页面正常。
(2)and exists(select 字段 from 表名)此时表名已经猜解出来,同理猜测字段。
(3)and(select len(字段名)from 表名)>0 直至猜解到>n不成立的时候,得出字段的长度为:n+1。
(4)and (select left(字段名,1)from 表名)=‘a’,字段名的第一个字符是否为a。一次猜测第二个,第n+1个字符。
五:工具注入
在确定注入点之后,可以利用注入工具进行SQL注入,例如domain、havij和强大的SQLMAP。