回显注入攻击的流程,在实际应用中,SQL注入漏洞产生的原因千差万别,这与所用的数据库架构、版本均有关系。
目前,数据库可分为关系型数据库,如Oracle、MySQL、SQL Server、Access等。除此之外,还有非关系型数据库(NoSQL),如MongoDB等。
需要注意的是,本章均以关系型数据库为例讲解SQL注入的攻击及防护原理,并尝试总结其典型的攻击流程,以分析和防御标准的SQL注入攻击。
本节以MySQL为例,但针对不同的数据库,SQL注入攻击只是在每个攻击流程上有所变化,整体流程及防护思路基本一致。
典型的攻击流程如下:
1)判断Web系统使用的脚本语言,发现注入点,并确定是否存在SQL注入漏洞。
2)判断Web系统的数据库类型。
3)判断数据库中表及相应字段的结构。
4)构造注入语句,得到表中数据内容。
5)查找网站管理员后台,用得到的管理员账号和密码登录。
6)结合其他漏洞,上传Webshell并持续连接。
7)进一步提权,得到服务器的系统权限。
以上为标准的SQL注入流程,最终的效果是获取目标站点的系统控制权限。在实际安全防护中,由于应用系统的业务特点各不相同,导致在每个阶段可获取的内容并不相同。
并且5、6、7步其实与SQL注入没有直接关系,但可归类为SQL注入后的延伸攻击手段。以下针对每项流程进行具体分析,以寻找有效的防护方法。