一,SQL注入原理
SQL注入漏洞产生的原因是因为“程序设计中原sql语句拼接了用户输入的sql语句”,从而改变了程序原sql语句的结构,使得攻击者得以利用以获取数据库信息。
二,SQL注入危害
-
数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
-
网页篡改:通过操作数据库对特定网页进行篡改。
-
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
-
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
-
服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
-
破坏硬盘数据,瘫痪全系统。
三,SQL注入点及检测手段
注入点1:登录框,blog,id等传参;
检测手段:单引号(’),双引号(”),右括号()),单双引号和右括号的组合
注入点2:搜索框
检测手段:百分号(%),百分号和单双引号,百分号和右括号的组合
注入点3:cookie,user-agent
检测手段:单引号(’),双引号(”),右括号()),单双引号和右括号的组合
四,SQL注入分类
1,联合查询注入
可以使用union关键字的查询注入
2,报错注入
报错注入是因为sql函数的格式不正确,或者函数之间发生冲突,从而将产生错误位置的查询语句以报错的形式显示出来。
3,盲注
布尔盲注
原程序sql语句和拼接的sql语句进行布尔运算后,页面会因为布尔运算的结果产生不同的变化
时间盲注
使用布尔运算符和if函数,sleep函数等根据对页面的响应时间,判断if函数条件语句的正确与否
4,宽字节注入
宽字节注入是由于不同编码中,中文所占字节数不同的原因造成的。
5,堆叠注入
SQL语句中,分号";"是表示一条sql语句的结束,如同命令注入一样使用;可以执行多条命令,多条sql语句之间以;分割同样会造成多条sqk语句的执行,而且以;分割的语句可以是任意sql语句。
7,二次注入
二次注入通常发生在注册页面,会造成admin账户信息被更改
8,文件读写
五,SQL注入绕过手段
1,过滤空格绕过
2,过滤and/or 绕过
3,过滤关键字绕过
4,单双引号绕过
5,过滤等号=绕过
6,过滤大小于号绕过
7,过滤逗号,绕过
8,注释符号绕过
六,SQL注入防御手段
1,addslashes()函数转义预定义字符
2,mysql_real_escape_string()函数用来转义sql语句中的特殊符号x00,\n,\r,\,',",xa1
3,使用魔术引号
4,黑白名单字符过滤
5,SQL语句预编译