【网络空间安全】SQL Injection_SQL 注入..

SQL 注入漏洞

攻击者利用 web 应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊的意义的符号和命令,让攻击者有机会直接对后台数据库下达指令,进而实现对后台数据库乃至整个应用系统的入侵。

  • 掌握SQL注入
  1. 数据库分类
  2. SQL注入
  3. 实现

数据库分类

当今数据库模型主要分为两种,即关系型数据库和非关系型数据库。

关系型数据库

把复杂结构归结为简单的二元关系(即二位表格形式),通过SQL结构化查询语句存储数据,保持数据一致性,遵循ACID理论(即原子性,一致性,隔离性,持久性),例如MySQL、SQL Server、Oracle

非关系型数据库

被称为NoSQL数据库,在特定的场景下可以发挥难以想象的高效率和高性能,例如:memcaahed、redis、mongodb

SQL注入

SQL注入原理

SQL注入攻击的本质,服务器没有过滤用户输入的恶意数据,直接把用户输入的数据当作SQL语句执行,从而影响数据库安全和平台安全。

SQL注入的本质

对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。

两个条件

  1. 用户能够控制输入
  2. 原本程序要执行的SQL语句,拼接了用户输入的恶意数据

危害

  1. 绕过登陆验证:使用万能密码登陆网站后台;
  2. 获得敏感数据:获取网站管理员账号、密码;
  3. 文件系统操作:列目录、读取、写入文件;
  4. 注册表操作:读取、写入、删除注册表;
  5. 执行系统命令:远程执行命令

造成原因

  1. 动态字符串构建引起
    不正确的处理转义字符(宽字节注入)、处理类型(报错泄露信息)、处理联合查询、处理错误(报错泄露信息)、处理多次提交(二次注入)
  2. 后台存在的问题
    后台无过滤或者编码用户数据、数据库可以拼接用户传递的恶意代码
  3. 错误信息处理不当
    详细的内部错误消息显示给用户或者攻击者、错误信息可以直接给攻击者提供下一步攻击帮助
  4. 不安全的数据库配置
  • 默认账户:使用默认账户进行数据库的操作管理
  • 权限:数据库安装好之后默认许可管理员权限,可以进行一切操作,但正确的做法应该是申请普通身份运行服务器上的服务,并降低用户权限,只限于本服务将此服务与本机其他服务隔离开来。

了解了SQL注入,那么如何实现SQL注入?

实现

SQL注入分为自动化注入手工注入

下边的工具是为自动化注入准备的

全适配工具

Sqlmap【属于SQL注入工具】

单适配工具

穿山甲注入软件 ; 海阳顶端注入软件【只适配于PHP注入】

其他

NBSI , 阿D注入【属于ASP \ JSP 注入工具 】 ; Havij ,Sqlid 【属于SQL注入工具】

然后是手工注入的核心

其过程大致可以总结为:

  1. 判断是否存在注入点;
  2. 判断字段长度;
  3. 判断字段回显位置;
  4. 判断数据库信息;
  5. 查找数据库名;
  6. 查找数据库表;
  7. 查找数据库表中所有字段以及字段值;
  8. 猜解账号密码;
  9. 登陆管理员后台。

引用一句经典的话:SQL注入其实就是数据和代码抢活干

多言无益,我先摆上一个几年前多数网站都有的漏洞

在网站登陆界面输入用户名的时候
直接输入SQL代码:‘whoever’;DROP TABLE users;
其原理:
首先执行第一条,分号为分割符,服务器返回错误,然后执行第二条,会删掉整个user表

后期更新,讲SQL注入的其他实例…

posted @ 2019-09-18 14:07  Roko&Basilisk  阅读(149)  评论(0编辑  收藏  举报