一旦确定数据库是容易受到SQL注入的影响,利用脆弱性证明任何潜在影响通常很有用。成功的SQL注入利用可以从数据库中读取敏感数据,修改数据库数据,在数据库上执行管理操作,在某些情况下,在操作系统上发出了命令。
联合操作员在SQL中用于组合两个或多个选择语句的结果。当Web应用程beplay体育能用吗序包含在选择语句中发生的SQL注入漏洞时,您通常可以采用工会运营商执行其他查询并检索结果。
该请求将在代理人“拦截”选项卡。
我们将尝试利用的参数是URL中的“ ID”参数。
第一个任务是发现应用程序执行的原始查询返回的列数,因为联合语句中的每个查询必须返回相同数量的列。
右键单击请求中的任何地方,然后单击“发送到中继器”。
在此示例中,我们利用了一个事实,即可以将NULL转换为任何数据类型,以系统地注入不同数量的列数,直到执行注射的查询为止。
例如:
联盟选择null-
联盟选择null,null--
联盟选择null,null,null--
笔记:在此示例中,我们不需要单个报价来终止任何现有字符串。另外,空间字符必须编码为%20。
该应用程序显示一个错误消息,可以在“响应”选项卡中查看。错误消息说使用了选择语句具有不同数量的列。
我们可以继续添加无效的s到我们的查询,直到我们看到应用程序的响应发生变化为止。
当我们注入的查询返回的列数等于原始查询中的数字时,我们的查询将执行。
当我们注射8时无效的s,该页面在没有任何问题的情况下显示内容,没有错误消息。当我们添加第9无效的在查询中,应用程序会产生错误。因此,我们可以推断原始查询返回8列。
确定了列的数量后,下一个任务是发现具有字符串数据类型的列,以便我们可以使用它从数据库中提取任意数据。
我们可以通过注入包含所需数量的查询来做到这一点无效的S,如我们以前一样,并替换了每个无效的依次与'一个'。
例如:
联合选择“ A”,Null,Null ...
联盟选择null,“ a”,null ...
联盟选择null,null,'a'...
当'一个'在具有字符串数据类型的列中指定,执行注入的查询,您应该看到一个包含值的附加数据一个。
但是,在我们的示例中,页面没有显示原始内容以外的任何内容。
我们可以看到查询正在执行,但是由于应用程序仅显示第一个结果,因此我们看不到注入的查询结果。
我们可以通过修改原始查询来确保我们的数据是返回的第一行,以免返回任何行:
01 = 2Union选择NULL,NULL,'a',NULL,NULL,NULL,NULL,NULL,NULL
现在,我们可以在响应中看到该应用程序正在显示注射'一个'字符串而不是实际用户详细信息。
这'一个'显示在与我们提供的列相对应的数据字段中。
现在,我们可以使用相关列从数据库中提取数据。
0和1 = 2联合选择NULL,NULL,版本(),Null,Null,Null,Null,Null,Null
在此示例中,我们更改了注入的代码以显示数据库的版本编号。然后,我们可以继续使用此技术从数据库中检索任何可访问的数据。