什么是SQL注入(SQLi)

坚强是说给别人听的谎言 提交于 2019-12-03 10:33:13

什么是SQL注入?

SQL注入(SQLi)通常被认为是一种注入攻击,其中攻击者可以执行恶意SQL语句。它控制Web应用程序的数据库服务器。由于SQL注入无助可能会影响使用基于SQL的数据库的任何站点或Web应用程序。弱点是最成熟,最普遍和最危险的Web应用程序漏洞之一。

通过使用SQL注入无助,在给定正确条件的情况下,攻击者可以使用它来回避Web应用程序的验证和批准组件并恢复整个数据库的实质内容。SQL注入同样可以用于包含,更改和删除数据库中的记录,从而影响信息正直性。
在这种程度上,SQL注入可以为攻击者提供未经批准的访问精细信息的权限,包括客户信息,可识别数据(PII),交换谜团,受保护创新和其他敏感数据。

SQL注入功能

记住针对数据库服务器运行恶意SQL查询的最终目标,攻击者应该首先在Web应用程序中发现包含在SQL问题中的贡献。
一起发生SQL注入攻击,无助站点需要直接在SQL解释中包含客户端贡献。然后,攻击者可以嵌入有效负载,该有效负载将作为SQL查询的一个组件并入,并继续针对数据库服务器运行。
随附的服务器端伪代码用于验证Web应用程序的客户端。

#定义POST因子

ü Ñ ë  = - [R Ë q Ü Ë 小号P O S T [ ' u s e r n a m e ' ] 
p 一个小号小号瓦特d  = - [R Ë q Ü Ë 小号P O S T [ ' p a s s w o r d ' ] 

#SQL问题对SQLi无能为力

sql = “SELECT id FROM clients WHERE username ='” + uname + “'AND password ='” + passwd + “'”

#执行SQL说明

数据库.execute(sql)

以上内容是使用用户名确认客户端的基本情况。此外,对于具有名为clients的表的数据库以及用户名和关键字部分的秘密词。
SQL注入有效负载的基本情况可能就像将关键字字段设置为密钥'OR 1 = 1一样简单。
这将导致伴随的SQL问题继续针对数据库服务器运行。
SELECT id FROM clients WHERE username ='username'AND password ='password'OR 1 = 1' 

攻击者同样可以注释掉SQL解释的剩余部分,以进一步控制SQL查询的执行。
- MySQL,MSSQL,Oracle,PostgreSQL,SQLite

'或' 1 '=' 1 ' -
'或' 1 '=' 1 '/ *

- MySQL

'或' 1 '=' 1 '#

- 访问(使用无效字符)

'或' 1 '=' 1 '%00
'或' 1 '=' 1 '%16

一旦问题执行,结果i-访问(使用无效字符)将返回到要处理的应用程序,从而产生确认回避。如果可以设想验证回避,应用程序将无疑地将攻击者从问题结果中记录到主记录中 - 数据库中的主记录是监管客户端的大部分。

攻击者最糟糕的是SQL可以做什么?

SQL是一种编程方言,用于监视放在RDBMS中的信息,以这种方式,SQL可用于获取,更改和删除信息。此外,在特定情况下,RDBMS同样可以从SQL公告中对工作框架进行收费。
记住上面的内容,在考虑附带的情况下,看看有效的SQL注入攻击对攻击者来说有多赚钱的要求不高。
攻击者可以使用SQL注入来回避确认甚至模仿特定客户端。

One of SQL’s essential capacities is to choose information in light of an inquiry and yield the consequence of that question. A SQL Injection weakness could permit the entire exposure of information dwelling on a database server. 
Since web applications use SQL to modify information inside a database, an attacker could use SQL Injection to adjust information put away in a database. Modifying information influences information honesty and could cause denial issues. For example, issues, for example, voiding exchanges, adjusting balances and different records. 
SQL用于擦除数据库中的记录。攻击者可以使用SQL注入漏洞来清除数据库中的信息。无论我们是否使用合适的强化方法,信息的擦除都可能影响应用程序的可访问性,直到重新建立数据库为止。
一些数据库服务器设计(有目的或其他)允许在数据库服务器上自由执行工作框架订单。在正确的条件下,攻击者可以使用SQL注入作为攻击防火墙后面的内向系统的基础向量。

SQL注入攻击的剖析

SQL注入只需要存在两个条件 - 一个利用SQL的社交数据库,以及一个可以直接用作SQL问题一部分的客户端可控信息。
在下面的情况下,它将接受攻击者可能通过滥用Web应用程序中的SQL注入无防御性展示来从数据库中泄漏信息。
提供具有不恰当贡献的SQL清晰度,例如在SQL查询期望数字时给出字符串,或者在SQL语句中故意嵌入标点符号错误会使数据库服务器抛出错误。
在进步中,失误对工程师非常有帮助,但如果在现场网站上授权,他们可以向攻击者发现大量数据。SQL错误具有图形趋势,即攻击者可以获取有关数据库结构的数据。有时甚至只是通过将数据与错误消息分开来指定整个数据库 - 这个系统基于SQL注入被称为错误。在这种程度上,数据库失误应该在现场网站上失效,或者登录到访问受限的记录。

SQL注入示例

一个。在ASP.NET中选择语句

湾 在ASP.NET中插入声明

C。在PHP SQL中插入声明

$ stmt  =  $ dbh - > prepare(“INSERT INTO Customers(客户名称,地址,城市)
VALUES(:nam,:add,:cit)“);
$ stmt - > bindParam(':nam'$ txtNam);
$ stmt - > bindParam(':add'$ txtAdd);
$ stmt - > bindParam(':cit'$ txtCit);
$ stmt - > execute();

结论

在这个SQL注入教程中,我们了解了SQL中的注入。此外,我们讨论了它的例子,代码,工作和解剖。除此之外,我们还看到了SQL PHP和SQL攻击者可以做的事情。不过,如果有任何疑问或疑问,请在评论部分询问。 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!