1.漏洞描述
SQL 注入(SQL Injection),是一种常见的web安全漏洞,攻击者可以利用这个漏洞,增删改查数据库中的内容,或者利用数据库的一些潜在的漏洞进行攻击;
2.漏洞场景
web应用中,只要与数据库有交互的地方,就有可能存在sql注入漏洞;
3.漏洞原理
通过在用户的可控参数中注入sql语法,破坏原有的sql结构,达到意料之外结果的攻击行为,主要原因是以下两个原因叠加造成的:
- 程序员在编写程序时,使用字符串拼接方式构造sql语句;
- 没有对用户的可控参数进行足够的过滤,便将参数内容拼接到sql语句中;
4.漏洞危害
- 攻击者可以利用sql注入漏洞,增删改查数据库中的数据;
- 如果数据库权限分配存在问题,或者数据库本身存在缺陷,攻击者就可以利用sql注入漏洞直接获取shell或者服务器权限;
5.防御方式
- 避免使用字符串拼接的方式构造sql语句,可以采用预编译等技术;
- 对进入sql语句的参数进行足够的过滤;
- 部署安全设备;
- 现在的很多开发框架,基本上已经可以在技术上解决sql注入问题了;
6.典型案例
这里将使用All labs这个靶场中的案例进行学习
1.案例一: 绕过登录的sql注入,直接使用administrator' or 1=1 --+绕过(--+可以为--[空格])
2.案例2: 使用联合查
使用order by语句根据页面的回显,判断列数
使用union select构造查询语句