2-1 SQL 注入原理
1) 语言分类: 解释型语言和编译型语言. 解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言. 而编译型语言是代码在生成时转换为机器指令, 然后再运行时直接由使用该语言的计算机执行这些指令.
在解释型语言中, 如果程序与用户进行交互. 用户就可以构造特殊的输入来拼接到程序中执行, 从而使得程序依据用户输入执行有可能存在恶意行为的代码.
例如: 在与用户交互的程序中, 用户的输入拼接到 SQL 语句中, 执行了与原定计划不同的行为, 从而产生了 SQL 注入漏洞.
2) 登录案例讲解
登录 SQL 语句: select * from admin where username='用户输入的用户名' and password='用户输入的密码'
用户输入的内容可由用户自行控制, 例如输入 1' or 1=1 -- 空格
SQL 语句: select * from admin where '1' or 1=1 -- 'and password='用户输入的密码'
其中 or 1=1 永远为真,-- 注释后边内容不再执行, 因此 SQL 语句执行会返回 admin 表中的所有内容.
Burpsuite 万能密码测试案例演示
3)CMS SQL 注入讲解
CMS 逻辑: index.PHP 首页展示内容, 具有文章列表 (链接具有文章 id),articles.PHP 文章详细页, URL 中的 article.PHP?id = 文章 id 读取 id 文章.
SQL 注入验证:
1, 单引号'
- ,and 1=1
- ,and 1=2
如果页面中 MySQL 报错, 证明该页面存在 SQL 注入漏洞.
4)Sqlmap 基本使用
sqlmap 是检测和利用 sql 注入漏洞的一款强大工具.
2-2.MySQL 注入有关知识点
1)MySQL 5.x 数据结构
在 MySQL 5.0 以上的版本中, 为了方便管理, 默认定义了 information_schema 数据库, 用来存储数据库元信息. 其中具有表 schemata(数据库名),tables(表名),columns(列名或字段名)
在 schemata 表中, schema_name 字段用来存储数据库名.
在 tables 表中, table_schema 和 table_name 分别用来存储数据库名和表名.
在 columns 表中, table_schema(数据库名),table_name(表名),column_name(字段名)
利用 Navicat for MySQL 查看结构
2)SQL 增删改查
select 列名称 from 表名称 where 字段 1='条件 1' and 字段 2='条件 2'
select * from 表名称 where 字段 1='条件 1' and 字段 2='条件 2'
insert into 表名称 (列 1, 列 2...) values(值 1, 值 2)
update 表名称 set 列名称 = 新值 where 列名称 = 某值
delete from 表名称 where 列名称 = 值
3)MySQL 常用函数
MySQL 中常用的聚合函数有以下:
user(): 查看当前 MySQL 登录用户名
database(): 查看当前使用 MySQL 数据库名
version(): 查看当前 MySQL 版本
拓展 limit 关键字, limit m,n 从 m 行开始, m+n 行结束
4) 注释
注释符: 在 MySQL 中常见的注释符表达式:# 或 -- 空格或 /**/
内联注释:/*! SQL 语句 */ 只有 MySQL 可以识别, 常用来绕过 WAF
例如: select * from articles where id=id
使用内联注释注入: select * from articles where id=-1 /*! union */ /*!select*/ 1,2,3,4
2-3SQLLab 靶场搭建
1)PhpStudy 环境安装
phpStudy 是一个 PHP 调试环境的程序集成包.
该程序包集成最新的 Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer, 一次性安装, 无须配置即可使用, 是非常方便, 好用的 PHP 调试环境, 该程序不仅包括 PHP 调试环境, 还包括了开发工具, 开发手册等. 总之学习 PHP 只需一个包.
2) 火狐浏览器插件安装
3)Sqlmap 安装
4)Sqli-Lab 安装
来源: http://www.bubuko.com/infodetail-3693881.html