1. 什么是SQL注入
SQL注入是一种针对Web程序数据库层安全漏洞的攻击技术。它利用程序对用户输入数据合法性的不严格判断或不严格过滤,允许攻击者向设计不良的程序添加额外的SQL 语句,以执行计划外的命令或允许未经授权的数据访问。攻击者可以恶意组合SQL语句,欺骗数据库服务器执行任意未经授权的查询并获取相应的数据信息。
2. SQL注入的原理
SQL注入利用应用程序中对用户输入数据的不当处理,破坏应用程序与数据库之间预期的正常交互,并操纵输入来执行恶意SQL操作。
SQL注入基本满足以下条件:
参数是用户可控的。这意味着你可以控制前端传递到后端的参数内容。
将参数合并到数据库查询中:传递的参数必须合并到SQL语句中并合并到数据库查询中。
当应用程序构造SQL 查询语句并将用户输入的数据直接加入到SQL 语句中而不进行适当的验证、过滤或转义时,攻击者可以创建,这可能会更改预期结果。
例如,如果您的应用程序查询数据库以根据用户输入的用户名验证登录,则典型的SQL 语句将如下所示:
SELECT * FROM users WHERE username=\’John\’ 。
然而,如果用户输入没有被处理并且攻击者输入OR 1=1 — ,最终的SQL 语句将是:
SELECT * FROM users WHERE username=\’\’ OR 1=1 –\’ 。
OR 1=1 在这里始终为真,并且– 是用于注释掉其余部分的注释字符。因此,有可能绕过正常的身份验证逻辑,获取所有用户信息,并执行其他非法数据库操作。
3. 简单演示
如果您正常查询Vince 字段,结果将照常显示。
通过输入:Vince\’ Union select user(),database() #
将显示数据库帐户和密码。
4. 判断是否存在注入
您可以首先使用一些简单的方法来确定您的应用程序是否容易受到SQL 注入攻击。例如,在输入框中输入**单引号\’**等特殊字符,观察系统的反馈。如果您的系统显示错误消息,并且该错误消息包含与数据库相关的详细信息,则这可能是潜在的注入点。
此外,您可以尝试输入逻辑运算符,例如:
id=1 和1=1
ID=1 且1=2
id=1 或1=1
id=\’1\’ 或\’1\’=\’1\’
id=\’1\’ 或\’1\’=\’1\’
检查返回的结果是否不同。如果前者返回正常结果,后者返回异常或无结果,也可能表明存在注入漏洞。
几种sql注释符
井号#:单行注释。必须与URL中的#区分开,通常写为%23。
–空格:单行注释。请注意,它是两个破折号和一个空格的组合。
/*()*/:多行注释。至少有两次注入,/**/常用作空格。
5. 注入流程
决定是否进行注射以及注射类型。
确定字段数量:order by
确定回波点:Union select 1,2
查询数据库信息:@@version @@datadir
查询用户名、数据库名:user(),database()
读取文件:Union select 1,load_file(\’c:\\\\windows\\\\win.ini\’)#
写入Web shell: select.inoutfile.
PS:如果你的转义字符串在使用SQL注入时包含单引号或双引号,你可以使用HEX编码来绕过它们。
6. SQL注入分类
根据SQLMap中的分类,SQL注入分为以下几种类型。
UNION 查询SQL 注入:堆叠查询SQL 注入:多语句查询注入、堆叠查询基于布尔的盲SQL 注入:布尔注入基于错误的SQL 注入:错误报告注入基于时间的盲SQL 注入:基于时间的延迟注入
7. 注入数据类型的区分
int 整数类型
从id=1 的用户中选择*
字符串字符类型
从用户名=\’admin\’的用户中选择*
类似于搜索类型
从tables_01中选择*,其中标题如“%title%”
#以上【网络安全学习】SQL注入01:基础知识相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93753.html