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技术站