详解SQL报错盲注

接下来我会详细讲解“详解SQL报错盲注”的攻略。

什么是SQL报错盲注

SQL报错盲注(Error-based Blind SQL Injection)指的是在进行SQL注入时,通过构造恶意的SQL语句触发目标网站SQL的错误提示,在错误提示中获取有关数据库的信息或功能,从而实现进行注入操作。

SQL报错盲注攻击过程

SQL报错盲注攻击过程分为以下几个步骤。

1. 确定目标网站是否存在注入漏洞

使用工具或手工方式,确定目标网站是否存在注入漏洞。一般是通过单引号、双引号等特殊字符进行注入测试,如果返回异常信息则说明存在SQL注入点。

2. 构造触发错误语句

SQL报错盲注的原理是在SQL语句中构造出现错误,从而触发错误提示信息。构造触发错误语句的方式有很多,这里只举例两种。

  • 利用SQL函数CONCAT()构造非法的SQL语句
' and (SELECT 1 FROM (SELECT CONCAT_WS(0x3a,version(),FLOOR(rand(0)*2))x FROM information_schema.tables GROUP BY x limit 1)a) '
  • 利用SQL函数CAST()构造非法的SQL语句
' and (SELECT * FROM (SELECT(SLEEP(5)))WkxD) AND 'ubpl'='ubpl 

3. 解析错误提示语句获取有用信息

触发错误语句后,服务器根据不同语法错误返回不同的错误提示信息。我们可以通过解析错误提示信息获取有用信息,如数据库类型、数据库版本等。

4. 利用获取的信息进行注入操作

根据获取的有用信息,就可以构造有效的SQL注入语句,完成需要进行的攻击行为,例如获取数据库表、字段等信息。

SQL报错盲注示例

接下来我用两个具体的SQL报错盲注攻击示例进行说明。

示例1:获取目标网站数据库类型

我们假设目标网站存在以下文件:
- index.php?id=1

此时我们可以尝试使用以下语句进行注入测试:

http://target.com/index.php?id=1'

如果返回了错误的SQL语法信息,则说明存在注入点。在检测到注入点后,我们可以使用以下语句构造非法SQL,从而触发错误提示,并获取有用信息——目标网站数据库类型:

' and (SELECT 1 FROM (SELECT CONCAT_WS(0x3a,version(),FLOOR(rand(0)*2))x FROM information_schema.tables GROUP BY x limit 1)a) '

此时如果返回以下错误提示,就可以得知目标网站使用的数据库类型了:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5.6.44-log:1' at line 1

通过错误提示信息可以看出,目标网站使用的是MySQL数据库,并且版本为5.6.44-log。

示例2:获取目标网站管理员的密码

我们仍然假设目标网站存在以下文件:
- index.php?id=1

通过尝试手工注入或者使用工具进行测试,我们找到了SQL注入点。
接下来,我们使用以下构造非法SQL:

' and (select * from (select sleep(20)) c) ' 

如果访问该网站注入点所在的URL会停留约20秒,那么说明构造的SQL语句执行了。 通过改变sleep的时间,我们发现该网站可以做到以秒计算的时间休眠,检查网站的容错情况,可能是错误的SQL语句下整体进入或冻结。 那么可以使用以下注入语句:

' and (select * from (select "admin_password_here")a) '

由于该语句为True,所以我们无需尝试爆破密码,直接得到了目标网站的管理员密码。

总结

SQL报错盲注是SQL注入攻击中非常常见的一种方式,可以利用错误提示语句在不直接访问数据库的情况下间接获取数据库的相关信息,甚至是注入目标网站的数据。因此,网站开发者在开发网站时应该注意相关漏洞点,以免网站遭受攻击。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SQL报错盲注 - Python技术站

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

相关文章

  • mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    当我们在使用MySQL存储emoji表情时,可能会遇到“Incorrect string value”或“Data too long for column”的错误。这是因为MySQL默认使用utf8编码,而utf8编码无法存储一些特殊字符,包括emoji表情。为了解决这个问题,我们需要将MySQL的编码改为utf8mb4。以下是解决这个问题的完整攻略: 步骤…

    http 2023年5月13日
    00
  • 浅谈angular4实际项目搭建总结

    在实际项目中,使用Angular4进行开发可以提高开发效率和代码质量。以下是浅谈Angular4实际项目搭建总结的完整攻略: 解决方案 1. 安装Angular CLI 首先,需要安装Angular CLI来创建和管理Angular项目。可以使用以下命令安装Angular CLI: npm install -g @angular/cli 2. 创建新项目 使…

    http 2023年5月13日
    00
  • 什么是HTTP协议版本不匹配异常?

    HTTP协议版本不匹配异常通常是指客户端所发送的HTTP请求版本与服务器端所支持的HTTP协议版本不匹配,导致服务器无法处理请求。HTTP协议版本不匹配异常通常会返回一个4xx或5xx的HTTP响应状态码。 举例来说,当客户端发送HTTP/1.0版本的请求给服务器,但是该服务器仅支持HTTP/1.1版本的协议,这时候就会产生HTTP协议版本不匹配异常,则服务…

    云计算 2023年4月27日
    00
  • 解决https网页加载http资源报错问题

    以下是关于“解决https网页加载http资源报错问题”的完整攻略: 问题描述 在使用HTTPS协议加载网页,如果网页中包含HTTP资源,就会出现报错问题。这个问题通常是由于浏览器安全策略导致的。以下是一些解决方法。 解决方法 方法一:使用HTTPS资源 可以使用HTTPS资源来替换HTTP。例如,如果网页中包HTTP图片,可以使用图片来替换。以下是一个示例…

    http 2023年5月13日
    00
  • python中Requests发送json格式的post请求方法

    以下是关于“Python中Requests发送JSON格式的POST请求方法”的完整攻略: 简介 在Python中,Requests是一个非常常用的HTTP库,可以用于发送HTTP请求。本文将介绍如使用Requests发送JSON格式的POST请求,并提两个示例说明。 发送JSON格式的POST请求 使用Requests发送JSON格式的POST请求非常简单…

    http 2023年5月13日
    00
  • mysql登录警告问题的解决方法

    对于MySQL登录警告问题,主要有两个解决方法: 方法一:修改MySQL配置文件 打开MySQL的配置文件my.cnf,一般在/etc/mysql/my.cnf或/etc/my.cnf位置 找到[mysqld]节,添加或修改如下配置项 [mysqld] … show_compatibility_56=ON 重启MySQL服务,执行以下命令: servic…

    http 2023年5月13日
    00
  • nginx提示:500 Internal Server Error错误解决办法

    当在使用Nginx时遇到500 Internal Server Error错误时,通常是由于服务器端的错误导致的。以下是详细讲解“nginx提示:500 Internal Server Error错误决办法”的完整攻略,包含两个示例说明: 步骤1:检查Nginx配置文件 要解决500 Internal Server Error,我们需要检查Nginx配置文件…

    http 2023年5月13日
    00
  • Springboot使用put、delete请求报错405的处理

    以下是关于“Springboot使用PUT、DELETE请求报错405的处理”的完整攻略: 问题描述 在使用Springboot时,使用PUT或DELETE请求时,有时会遇到405错误。本文介绍如何解决这个问题。 解决步骤 以下是解决PUT或DELETE请求报错405的步骤: 步骤一:了解问题 首先,了解这个问题的原因。这个问题通常是由于Springboot…

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