一直以来,SQL注入是Web安全领域中一个不容忽视的网络安全问题,在2020年的 OWASP Top 10 中,SQL注入的地位也是高居不下,一直也没好好更过文章,今天简单聊聊SQL注入。
该文章主要从三个方面进行探讨,希望我能够抛砖引玉,要有不当之处,还希望大佬多多指正。
一、SQL注入简介
1、SQL注入的原理
首先对SQL注入简单有个定义,即什么是SQL注入。
SQL全称是Structured Query Language,即结构化查询语言。
简单来说,SQL注入是指应用程序向后台数据库传递SQL查询时,攻击者使用某些方式影响了该过程中的查询能力,就会引发SQL注入。
2、常见的SQL注入过程
宏观层面上,SQL注入有四个步骤:
(1)攻击者将参数值等数据进行修改;
(2)未经检查过滤的数据会被注入到SQL语句中,此时SQL语句原有的功能可能发生了改变;
(3)接收到查询语句的数据库引擎会将改变的查询语句进行执行,并将结果反馈给服务器;
(4)服务器将注入的结果反馈给客户端。
3、SQL注入的危害
SQL注入主要会带来如下危害:
(1)数据库方面:会造成数据库信息泄露,暴露用户的隐私;数据库可能会被恶意操作,具体包括数据库服务器被攻击,管理员账户被恶意篡改等;
(2)网页网站方面:操作数据库对网页进行篡改,修改数据库中的值从而被嵌入恶意链接;
(3)服务器方面:SQL注入造成服务器被远程控制。
(4)硬盘方面:破坏硬盘数据,造成系统瘫痪。
除此之外,一些恶意的SQL指令还可能操作文件系统,使得危害进一步扩大。
4、SQL注入分类
(1)注入点类型
数字型:注入点类型是数字,不需要引号闭合语句
字符型:注入点类型是字符类型,需要引号闭合语句
(2)注入点位置
GET注入:注入点位置在GET参数部分
POST注入:注入字段在POST数据中
Cookie注入:注入字段在Cookie数据中
搜索注入:注入点在搜索位置
HTTP头部注入:注入点在HTTP请求头部的某个字段位置中
(3)页面回显
有回显:union注入;报错注入
无回显:布尔型注入;延迟注入
二、SQL注入漏洞挖掘
1、易发生SQL注入漏洞的位置
任何用户输入和数据库交互的地方都可能产生注入!
如搜索框、登录框、url参数值等
2、SQL注入漏洞判断依据
根据客户端返回的结果来判断提交的测试语句是否被数据库引擎执行,如果测试语句被执行,则存在注入漏洞。
3、SQL注入漏洞挖掘方式
(1)使用工具
优点:自动化,范围广, 效率高。
缺点:误报,漏报,测试方法有限。
常用漏洞扫描工具:Safe3wvs、AppScan、AWVS等。
(2)手工测试
优点:测试方法灵活。
缺点:效率低,范围窄,因测试者技术水平而异。
测试方式:
内联SQL注入:注入一段SQL语句,原来的语句仍然会全部执行。
终止式SQL注入:攻击者注入一段包含注释符的SQL语句,将原来的语句的一部分注释,注释掉的部分语句不会被执行。
三、SQL注入防御
1、安全编码
(1)输入验证
数字型的输入必须是合法的数字;字符型的输入中对‘进行特殊处理;
验证所有的输入点,包括Get,Post ,Cookie以及其他HTTP头;
(2)使用符合规范的数据库访问语句
正确使用静态查询语句,如PreparedStatement
2、高版本PHP缺省设置magic_ quotes_ gpc为打开,这样一切get,post,cookie中的’ 、”、\ 、null都将被特殊处理为’ 、\”、 \、 \0 ,可以防范大多数字符串SQL注入以及前面提到的空字节注入。
3、在JSP中要禁止使用Statement。
4、在ASP.NET中要使用SqlParameterCollection来防止SQL注入。
5、数据库加固
主要包括:
禁止将任何高权限帐户( 例如sa , dba等)用于应用程序数据库访问。更安全的方法是单独为应用创建有限访问帐户。
拒绝用户访问敏感的系统存储过程,如xp_dirtree,xp_cmdshelI等;
限制用户所能够访问的数据库表;
来源:freebuf.com 2021-05-24 13:54:23 by: 陌回尘ylm
请登录后发表评论
注册