SQL注入是一组SQL命令,它们放在URL字符串或数据结构中,以便从与Web应用程序连接的数据库中检索我们想要的响应.这种类型的攻击通常发生在使用PHP或ASP.NET开发的网页上.
SQL注入攻击可以通过以下意图完成 :
修改数据库的内容
修改数据库的内容
执行应用程序不允许的不同查询
在将应用程序传递给SQL语句之前,应用程序未正确验证输入时,此类攻击会起作用.注入通常放在地址栏,搜索字段或数据字段中.
检测Web应用程序是否容易受到SQL注入攻击的最简单方法是使用"'"字符串中的字符,看看是否有任何错误.
SQLi攻击的类型
在本节中,我们将了解不同类型的SQLi攻击.攻击可分为以下两种类型 :
带内SQL注入(简单SQLi)
推理SQL注入(盲SQLi)
带内SQL注入(简单的SQLi)
这是最常见的SQL注入.这种SQL注入主要发生在攻击者能够使用相同的通信信道来发起攻击时.聚集结果.带内SQL注入进一步分为两种类型 :
基于错误的SQL注入 : 基于错误的SQL注入技术依赖于数据库服务器抛出的错误消息来获取有关数据库结构的信息.
基于联盟SQL注入 : 这是另一种带内SQL注入技术,它利用UNION SQL运算符将两个或多个SELECT语句的结果组合成一个结果,然后作为HTTP响应的一部分返回.
推理SQL注入(盲SQLi)
在这种SQL注入攻击中,攻击者无法看到结果带内攻击,因为没有数据通过Web应用程序传输.这就是它被称为盲SQLi的原因.推理SQL注入还有两种类型 :
基于布尔的盲SQLi : 这种技术依赖于向数据库发送SQL查询,这会强制应用程序返回不同的结果,具体取决于查询是返回TRUE还是FALSE结果.
基于时间的盲SQLi : 这种技术依赖于向数据库发送SQL查询,这会强制数据库在响应之前等待指定的时间(以秒为单位).响应时间将向攻击者指示查询结果是TRUE还是FALSE.
示例
可以通过操作输入数据到应用程序来实现所有类型的SQLi.在下面的示例中,我们编写一个Python脚本,将攻击向量注入应用程序并分析输出以验证攻击的可能性.在这里,我们将使用名为 mechanize 的python模块,它提供了在网页中获取Web表单的便利,也便于输入值的提交.我们还使用此模块进行客户端验证.
以下Python脚本有助于使用 mechanize :
$提交表单并分析响应b $ b
首先我们需要导入 mechanize 模块.
import mechanize
现在,提供在提交表单后获取响应的URL名称.
url = input("输入完整网址")
以下代码行将打开网址.
request = mechanize.Browser() request.open(url)
现在,我们需要选择表格.
request.select_form(nr = 0)
在这里,我们将列名'id'设置.
request ["id"] ="1 OR 1 = 1 "
现在,我们需要提交表格.
response = request.submit()content = response.read()print content
上面的脚本将打印POST请求的响应.我们已经提交了一个攻击向量来打破SQL查询并打印表中的所有数据而不是一行.所有攻击向量都将保存在文本文件中,例如vectors.txt.现在,下面给出的Python脚本将从文件中获取这些攻击向量,并将它们逐个发送到服务器.它还会将输出保存到文件中.
首先,让我们导入机械化模块.
import mechanize
现在,提供提交表格后获取回复的URL名称.
url = input("输入完整网址") attack_no = 1
我们需要从文件中读取攻击向量.
With open (‘vectors.txt’) as v:
现在我们将发送每个arrack向量的请求
For line in v: browser.open(url) browser.select_form(nr = 0) browser["id"] = line res = browser.submit()content = res.read()
现在,以下代码行会将响应写入输出文件.
output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)output.write(content)output.close()print attack_noattack_no += 1
通过检查和分析响应,我们可以识别可能的攻击.例如,如果它提供包含句子的响应您的SQL语法中有错误那么这意味着表单可能会受到SQL注入的影响.