SQL注入做题经验

1,[极客大挑战 2019]BabySQL

特点:这个题目过滤了过滤了好多关键字,比如or, select,where, union。应该是用函数replace给我们替换成了空白字符

解决:构造oorr,sselectelect,类似的词语绕过过滤。

双写绕过,编码绕过(#:%23)

在某些情况下,系统可能会对用户输入进行一些过滤或验证来防止恶意输入或攻击。其中一种常见的过滤方式是对特定字符进行转义或URL编码。

在你提供的例子中,输入的字符 “#” 被转义为 “%23”。这样做的好处是可以绕过一些简单的过滤机制,因为对于这些过滤机制来说,”%23” 不会被解析为 “#” 字符。

对于一些简单的应用程序,开发者可能只检查是否存在 “union” 和 “select” 这样的关键词,而忽略了其他特殊字符。通过使用转义字符或URL编码,攻击者可以欺骗这些简单的过滤机制,绕过它们的检查。

然而,这并不是一种可靠的方式来进行攻击,因为更强大的过滤和安全策略可以检测和阻止这种类型的注入攻击。更重要的是,使用转义字符或URL编码来绕过过滤机制是不被推荐的,因为它并不安全,并且可能会导致其他问题。

作为开发者或系统管理员,最好的做法是采用更强大的防护措施,如输入验证、参数化查询和安全编码实践,以防止SQL注入攻击。

对于一些简单的过滤机制,攻击者可能使用一些绕过方法来欺骗它们。以下是一些常见的绕过漏洞和方法:

  1. 双写绕过:攻击者可以使用双写绕过来绕过一些简单的过滤机制。例如,如果某个过滤检查是否存在 “union” 字符串,攻击者可以使用 “ununionion” 来绕过,因为过滤机制只会检查连续的字符,而不会检查双写字符。
  2. 编码绕过:攻击者可以使用编码来绕过过滤机制。例如,攻击者可以使用 URL 编码或 HTML 实体编码来表示特殊字符,以绕过过滤器的检查。例如,”#” 字符可以被表示为 “%23” 或 “#”。
  3. 混淆绕过:攻击者可以使用字符混淆来绕过过滤机制。例如,攻击者可以使用特殊字符的变体或替代字符,如全角字符、大小写混合、空格等,来绕过过滤器的检查。
  4. 组合绕过:攻击者可以将多个绕过技巧结合起来,以增加成功绕过过滤机制的机会。例如,攻击者可以使用双写字符和编码字符的组合来构造恶意输入。

然而,需要注意的是,这些绕过方法只适用于一些简单的过滤机制。对于更强大的防护措施和安全策略,这些方法可能无效。因此,最佳实践是采用更安全和可靠的防护措施,如输入验证、参数化查询、安全编码实践和使用成熟的安全框架/库。