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日

相关文章

  • Springboot快速入门教程

    下面是关于“Springboot快速入门教程”的完整攻略。 1. 前置条件 在开始学习Springboot之前,需要具备一定的Java基础知识,并熟悉Spring框架的基本概念。 2. 学习步骤 2.1 创建项目 在开始使用Springboot开发项目前,需要先创建一个基础的Springboot项目。在这里以使用Maven创建项目为例: <groupI…

    Java 2023年5月15日
    00
  • 关于微信小程序实现云支付那些事儿

    下面我来详细讲解“关于微信小程序实现云支付那些事儿”的完整攻略。 1. 前置准备 要实现微信小程序的云支付,你需要确保已经完成以下前置准备: 注册了微信商户账号,并通过微信支付的认证审核; 在小程序中开通了支付权限。 如果以上准备工作已完成,接下来就可以开始和云服务对接了。 2. 云开发 微信小程序提供了一套完善的云开发体系,其中包含了云函数和数据库。我们可…

    Java 2023年5月23日
    00
  • JavaScript解析JSON数据示例

    下面是关于“JavaScript解析JSON数据示例”的完整攻略。 什么是JSON数据格式 JSON指的是JavaScript对象表示法(JavaScript Object Notation),它是一种轻量级的数据交换格式。它易于人们阅读和编写,同时也易于机器解析和生成。在很多网站中,JSON已成为主流的数据格式之一。 具体来说,JSON数据格式是由一系列键…

    Java 2023年5月26日
    00
  • 解决使用httpclient传递json数据乱码的问题

    解决使用HttpClient传递JSON数据乱码问题的攻略,我们可以从以下两个方面来考虑: 设置Http请求头中的Content-Type为application/json 将JSON数据的字符串转化为字节数组进行传输 下面将分别详细讲解这两个方面的解决方案以及代码示例。 设置Http请求头中的Content-Type为application/json Ht…

    Java 2023年5月26日
    00
  • java小程序之控制台字符动画的实现

    下面我将详细讲解“Java小程序之控制台字符动画的实现”的完整攻略,包含以下几个步骤: 1. 准备工作 确保你已经安装并配置好Java开发环境; 选择一种适合你的集成开发环境(IDE),如Eclipse、IntelliJ IDEA等; 创建一个新的Java项目,并定义一个新的类用于实现动画。 2. 实现控制台字符动画 2.1 定义动画字符 首先,我们需要定义…

    Java 2023年5月23日
    00
  • Java工具jsch.jar实现上传下载

    下面是关于Java工具jsch.jar实现上传下载的完整攻略。 1.简介 JSch是一个java实现SSH2协议的开源库。JSch允许在java程序中进行ssh连接的操作,可以实现远程执行命令、上传文件、下载文件等操作。 2.引入jsch.jar 首先我们需要在项目中引入jsch.jar。如果使用maven管理项目,在pom.xml文件中加入以下依赖: &l…

    Java 2023年5月19日
    00
  • 详解Java实现拓扑排序算法

    详解Java实现拓扑排序算法 什么是拓扑排序算法 拓扑排序算法是一种用来解决有向图中节点之间依赖关系问题的算法,它可以将有向无环图(DAG)中的所有节点按照一定的规则排序,可以用来确定一组任务的执行顺序,比如编译器可以用拓扑排序来确定源代码的编译顺序。 拓扑排序算法原理 拓扑排序算法基于DAG图,DAG图中每个节点表示一个任务,有向边表示任务之间的依赖关系,…

    Java 2023年5月19日
    00
  • Java实现定时任务的示例代码

    下面我将为你详细讲解一下“Java实现定时任务的示例代码”的完整攻略。 一、背景知识 在Java中,可以使用Timer类或ScheduledExecutorService类来实现定时任务。其中,Timer类是较为简单的一种方式,但该类有一些缺点:如果执行任务的时间太长,或者在任务执行期间抛出了异常,Timer可能会错过执行下一次任务的时间。因此,建议大家使用…

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