SQL 注入漏洞
攻击者利用 web 应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊的意义的符号和命令,让攻击者有机会直接对后台数据库下达指令
,进而实现对后台数据库乃至整个应用系统的入侵。
- 掌握SQL注入
- 数据库分类
- SQL注入
- 实现
数据库分类
当今数据库模型主要分为两种,即关系型数据库和非关系型数据库。
关系型数据库
把复杂结构归结为简单的二元关系(即二位表格形式),通过SQL结构化查询语句存储数据,保持数据一致性,遵循ACID理论(即原子性,一致性,隔离性,持久性),例如MySQL、SQL Server、Oracle
非关系型数据库
被称为NoSQL数据库,在特定的场景下可以发挥难以想象的高效率和高性能,例如:memcaahed、redis、mongodb
SQL注入
SQL注入原理
SQL注入攻击的本质,服务器没有过滤用户输入的恶意数据,直接把用户输入的数据当作SQL语句执行,从而影响数据库安全和平台安全。
SQL注入的本质
对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。
两个条件
- 用户能够控制输入
- 原本程序要执行的SQL语句,拼接了用户输入的恶意数据
危害
- 绕过登陆验证:使用万能密码登陆网站后台;
- 获得敏感数据:获取网站管理员账号、密码;
- 文件系统操作:列目录、读取、写入文件;
- 注册表操作:读取、写入、删除注册表;
- 执行系统命令:远程执行命令
造成原因
- 动态字符串构建引起
不正确的处理转义字符(宽字节注入)、处理类型(报错泄露信息)、处理联合查询、处理错误(报错泄露信息)、处理多次提交(二次注入) - 后台存在的问题
后台无过滤或者编码用户数据、数据库可以拼接用户传递的恶意代码 - 错误信息处理不当
详细的内部错误消息显示给用户或者攻击者、错误信息可以直接给攻击者提供下一步攻击帮助 - 不安全的数据库配置
- 默认账户:使用默认账户进行数据库的操作管理
- 权限:数据库安装好之后默认许可管理员权限,可以进行一切操作,但正确的做法应该是申请普通身份运行服务器上的服务,并降低用户权限,只限于本服务将此服务与本机其他服务隔离开来。
了解了SQL注入,那么如何实现SQL注入?
实现
SQL注入分为自动化注入
和手工注入
下边的工具是为自动化注入准备的
全适配工具
Sqlmap【属于SQL注入工具】
单适配工具
穿山甲注入软件 ; 海阳顶端注入软件【只适配于PHP注入】
其他
NBSI , 阿D注入【属于ASP JSP 注入工具 】 ; Havij ,Sqlid 【属于SQL注入工具】
然后是手工注入的核心
其过程大致可以总结为:
- 判断是否存在注入点;
- 判断字段长度;
- 判断字段回显位置;
- 判断数据库信息;
- 查找数据库名;
- 查找数据库表;
- 查找数据库表中所有字段以及字段值;
- 猜解账号密码;
- 登陆管理员后台。
引用一句经典的话:SQL注入其实就是数据和代码抢活干
多言无益,我先摆上一个几年前多数网站都有的漏洞
在网站登陆界面输入用户名的时候
直接输入SQL代码:‘whoever’;DROP TABLE users;
其原理:
首先执行第一条,分号为分割符,服务器返回错误,然后执行第二条,会删掉整个user表
后期更新,讲SQL注入的其他实例…