SQL 手工注射原理小结

SQL 手工注射原理小结

SQL注入是一种常见的网络攻击手段之一,它可以通过直接向Web应用程序的数据库服务器发送恶意代码来获取数据库的非法访问权。针对SQL注入攻击中的手工注射原理总结如下:

1. SQL注入的原理

SQL注入是一种基于Web应用程序的安全漏洞,攻击者使用恶意字符序列,在Web应用程序的输入方面插入恶意代码,并使应用程序将恶意代码发送到后端数据库,以实现数据泄露、数据篡改、拒绝访问等恶意目的。主要有以下两种方式:

  • 数据输入未经过过滤验证:即应用程序对用户提交的数据没有进行合规性验证,包括表单、URL、Cookie、HTTP头等。攻击者可以通过向这些入口提交恶意输入字符串来欺骗应用程序绕过限制访问后端数据库,并将恶意代码插入到SQL查询中。

  • 未使用预处理语句:即应用程序没有采用数据库参数化技术来构建SQL查询语句。攻击者可以利用参数化技术的缺失,构建恶意SQL语句并与漏洞程序的查询合并,从而执行恶意代码。

2. 手工注射过程

手工注入是一种更为普遍、高级的攻击方式,需要针对特定漏洞程序进行编写。注入攻击者通过探测目标网站的SQL异常信息,确定与目标网站的漏洞类型和数据库环境状况。通常,注入攻击需要以下几步:

步骤1:定位注入点

通常情况下,注入入口是主页、Prove.asp、Article.asp等。攻击者可以通过搜索引擎等方式来寻找漏洞页面。

步骤2:探测注入方式

攻击者需要通过各种攻击方式来判断漏洞类型及其对应的数据库类型、版本信息。通常,探测可以通过输入以下测试字符串来进行:

  • 单引号
  • 双引号
  • 分号
  • 注释符( --)

同时,还可以在页面中插入一些HTML特例字符来验证注入点:

'>"><script>alert(19700309)</script>

步骤3:构造注入语句

通过探测,攻击者成功确定注入方式后,需要进一步构造注入的恶意代码。通常,攻击者可以通过输入以下字符来构建注入语句:

  • UNION / UNION ALL
  • SELECT
  • FROM
  • WHERE / AND
  • CONCAT / GROUP_CONCAT

常见的注入语句如下所示:

“’or 1=1--"
“'or 1=1 limit 1 --"
“'or 1=1 order by 1 --"
“'or 1=1 and rownum<3 --”

步骤4:尝试绕过防火墙

在以上步骤达成后,防火墙会进行过滤,攻击者需要进行绕过。一般情况下,绕过防火墙技术可归纳为以下几种:

  • 十六进制编码绕过:十六进制编码的字符在数据库中作为正常字符处理,可以绕过语句中的关键字。
  • base64编码绕过:base64编码可以对字符进行加密处理,逃过防火墙的过滤器。
  • 半角/全角绕过:将语句中红色字符进行半角/全角的转化,使防火墙过滤器无法识别。
  • 注释符绕过:在语句中添加注释符,可以使语句变得更加难以识别。

步骤5:获取敏感信息

通过以上步骤,攻击者已经成功进入目标网站的数据库中,接下来可以利用数据库中已知的表及数据获取敏感信息:

  • 数据库版本信息:通过查看数据库版本信息,可以了解目标服务器的详细信息和运行状态相关信息。
  • 表结构信息:通过查看表结构信息,可以了解数据库中的各种表结构及其数据类型、大小等。
  • 数据库账号信息:通过查看系统中所有用户的账号,密码等敏感信息。

3. 示例说明

示例1:

攻击者在运行一个网站时发现一个漏洞,该漏洞允许他通过注入来告诉网站如何处理SQL命令。他发现,当他将单引号 ‘ 插入姓名文本框后,会产生一个错误消息。他决定利用这个漏洞来执行自己的SQL查询。攻击者输入了以下代码:

' or 1=1 –

攻击者可以通过在语句中注入‘ 或 1=1’,绕过系统验证,继而构造出合法SQL查询语句,成功获得目标网站的数据库信息。

示例2:

攻击者发现一个名为“查看用户信息”的界面,其中有一些用户信息的查询项。这个画面似乎是通过页面和处理器生成,所以他决定尝试使用SQL注入攻击。攻击者在“用户名”栏中输入了以下代码:

Bob' or 1=1--

然后单击“检索”,系统返回了突破这个向用户展示的“查看”部分后的SQL查询结果,成功获取了目标网站的敏感信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 手工注射原理小结 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java日常练习题,每天进步一点点(40)

    下面是Java日常练习题的完整攻略: 1. 确定目标 我们的目标是通过做Java练习题来提高自己的编程能力,每天进步一点点。 2. 获取练习题 可以通过互联网上的Java编程练习网站,如Java编程练习网站等获取练习题。 3. 分析题目 在开始解题之前,请认真阅读题目并分析,确定题目的输入、输出、边界条件和算法思路。 4. 用Java代码实现 在分析完题目后…

    Java 2023年6月15日
    00
  • 深度解析Java中volatile的内存语义实现以及运用场景

    深度解析Java中volatile的内存语义实现以及运用场景 什么是volatile 在Java中,volatile是一种特殊的修饰符,表示被它修饰的变量具有可见性、不保证原子性的特性。 volatile的内存语义 当一个变量被声明为volatile,Java虚拟机将保证: 变量对所有线程之间的可见性 避免指令重排 变量对所有线程之间的可见性 当一个线程修改…

    Java 2023年5月26日
    00
  • SpringBoot 使用@WebMvcTest测试MVC Web Controller

    SpringBoot 使用 @WebMvcTest 测试 MVC Web Controller 在 SpringBoot 中,我们可以使用 @WebMvcTest 注解来测试 MVC Web Controller。@WebMvcTest 注解提供了一种简单的方式来测试 Spring MVC 控制器,而不需要启动完整的应用程序上下文。本文将详细讲解 Sprin…

    Java 2023年5月18日
    00
  • Java中List集合的常用方法详解

    Java中List集合的常用方法详解 List是Java中常见的集合类型之一,它可以存储一组有序、可重复的数据。在实际的开发过程中,我们经常需要对List集合进行添加,删除,查找等操作。下面就详细说明Java中List集合的常用方法和使用场景。 创建List集合 在Java中创建List集合可以使用ArrayList和LinkedList两种实现方式。 Ar…

    Java 2023年5月26日
    00
  • 使用Java实现DNS域名解析的简单示例

    下面我将为您详细讲解“使用Java实现DNS域名解析的简单示例”的完整攻略。 什么是DNS? DNS(Domain Name System)是一种将域名转换为IP地址的互联网服务。DNS将人类可读的域名转换为机器可读的IP地址。例如,www.baidu.com域名会被DNS服务器解析为IP地址,例如:220.181.110.6。 Java实现DNS域名解析 …

    Java 2023年5月19日
    00
  • java连接mysql数据库乱码的解决方法

    以下是讲解“java连接mysql数据库乱码的解决方法”的完整攻略。 问题描述 在使用Java连接MySQL数据库时,有时会出现中文乱码的问题。如何解决这个问题呢?下面将会给出详细的解决方法。 解决方法 步骤一:指定编码方式 在连接MySQL数据库之前,需要指定编码方式。可以在连接数据库的URL中添加以下参数: jdbc:mysql://localhost/…

    Java 2023年5月19日
    00
  • Flink JobGraph生成源码解析

    下面是详细讲解“Flink JobGraph生成源码解析”的完整攻略。 什么是Flink JobGraph Flink JobGraph是Apache Flink的一个重要模块,它描述了一个Flink任务的数据流和操作。在Flink任务启动时,JobGraph会被构建出来,并提交到JobManager进行执行。 JobGraph的生成流程 Flink Job…

    Java 2023年5月20日
    00
  • Java中的javaBean、vo、entity、domain和pojo

    下面是关于Java中的javaBean、vo、entity、domain和pojo的详细讲解: 1. 什么是JavaBean JavaBean是一种表示普通Java对象的标准规范,是一种特定的Java类,用于存储数据和访问数据等操作。JavaBean通常包含默认构造函数、私有属性、公共set和get方法等。 JavaBean通常用于表示与业务相关的对象,如用…

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