1-简要SQL注入

前言

  • SQL注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入
  • 数据库类型:
    • access
    • mysql
    • mssql
    • oracle
    • postsql
    • sqlite
    • Mongodb
  • 提交方法:
    • GET
    • POST
    • COOKIE
    • REQUEST
    • HTTP头
  • 数据类型:
    • 数字型
    • 字符型
    • 搜索型
  • 查询方式:
    • select
    • insert
      ......
  • 回显/盲注
    • 回显注入
    • 无回显注入
    • 延时注入
    • 布尔注入
  • 注入拓展
    • 加解密注入
    • json注入
    • ladp注入
    • dnslog注入
    • 二次注入
    • 堆叠注入
  • waf绕过
    • 更改提交方法
    • 大小写混合
    • 解密编码类
    • 注释符混用
    • 等价函数替换(效果相同的函数替换)
    • 特殊符号混用(打乱匹配规则)
    • 借助数据库特性
    • http参数污染
    • 垃圾数据溢出
  • 防御方案
    • 代码加载过滤
    • waf产品部署

SQL注入原理

理解SQL注入

  • SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的sql服务器加以解析和执行。
  • 由于sql语句本身的多样性,以及可用于构造sql语句的编程方法很多,因此凡是构造sql语句的步骤均存在被攻击的潜在风险。
  • Sql注入的方式主要是直接将代码插入参数中,这些参数会被置入sql命令中加以执行。
  • 间接的攻击方式是将恶意代码插入字符串中,之后将这些字符串保存到数据库的数据表中或将其当成元数据。当将存储的字符串置入动态sql命令中时,恶意代码就将被执行

sql注入的产生过程及常见原因

产生过程
  • 大多数的web应用都需要与数据库进行交互,并且大多数web应用编程语言(如ASP、C##、.NET、Java和PHP)均提供了可编程的方法来与数据库连接并进行交互。
  • 如果web应用开发人员无法确保在将从web表单,cookie及输入参数等收到的值传递给sql查询(该查询在数据库服务器上执行)之前已经对其进行过验证,那么通常会出现sql注入漏洞,如果攻击者能够控制发送给sql查询的输入,并且能够操纵该输入将其解析为代码而非数据,那么攻击者就很有可能有能力在后台数据库执行该代码。
常见的sql注入产生原因

用户可控变量、参数带入数据库查询、变量未存在过滤或过滤不严谨
①转义字符处理不合适;
②不安全的数据库配置;
③不合理的查询集处理;
④不当的错误处理;
⑤多个提交处理不当。

不当的处理类型
  • Sql数据库将单引号字符(')解析成代码与数据间的分界线:
    • 单引号外面的内容就是需要运行的代码,而用单引号引起来的内容均是数据。
    • 因为只需要简单的在URL或WEB页面的字段中输入一个单引号,就能很快速的识别出web站点是否会受到sql注入攻击。
2.2.2不安全的数据库配置
  • 数据库带有很多默认的用户预安装内容。
  • SQL Server使用声名狼藉的“sa”作为数据库系统管理员账户,MySQL使用“root”和“anonymous”用户账户,Oracle则在创建数据库时通常会创建SYS、SYSTEM、DBSNMP和OUTLN账户。
  • 这些并非是全部的账号,只是比较出名的账户中的一部分,还有很多其他的账户。其他账户同样按默认方式进行预设,口令总所周知。
  • 这就带来了很大的安全风险,攻击者利用sql注入漏洞时,通常会常识访问数据库的元数据,比如内部的数据库和表的名称、列的数据类型和访问权限
  • 例如MySQL服务器的元数据位于information_schema虚拟数据库中,可通过show databases;和show tables;命令访问。所有的MySQL用户均有权限访问该数据库中的表,但只能查看表中那些与该用户访问权限相对应的对象的行。
不合理的查询集处理
  • 有时需要使用动态的sql语句对某些复杂的应用进行编码,因为程序开发阶段可能还不知道要查询的表或字段(或者不存在)。
  • 比如与大型数据库交互的应用,这些数据库在定期创建的表中的数据由于应用已经产生了输入,因而开发人员会信任该数据,攻击者可以使用自己的表和字段数据来替换应用产生的值,从而影响系统的返回值。
不当的错误处理
  • 错误处理不当会为web站点带来很多安全方面的问题。最常见的问题是将详细的内部错误消息(如错误代码,数据库转存储)显示给用户或攻击。这些错误消息会泄露实现细节,为攻击者提供与网站潜在缺陷相关的重要线索。
多个提交处理不当
  • 大型的web开发项目会出现这样的问题:有些开发人员会对输入进行验证,而一些开发人员则不以为然。对于开发人员,团队,甚至公司来说,彼此独立工作的情形并不少见,很难保证项目中每个人都遵循相同的标准
  • 应用打开发人员还倾向于围绕用户来设计应用,他们尽可能的使用预期的处理流程来引导用户,认为用户将遵循他们已经设计好的逻辑顺序。
    • 例如:当用户已到达一系列表单中的第三个表单时,他们会期望用户肯定已经完成第一个和第二个表达。但实际上,借助URL乱序来请求资源,能够非常容易的避开预期的数据流程。

注入注意

  • url中参数位置调换不影响查询
  • 靶场sqlilabs
posted @ 2025-03-27 21:35  micryfotctf  阅读(39)  评论(0)    收藏  举报