准则

注射 101

最著名的漏洞类别之一往往是注入漏洞,尤其是毫无争议的后起之秀--SQL 注入漏洞:SQL 注入。在科技界,很难不听到 SQL 注入,所以我们就来谈谈它。 

通过 SQL 注入,可以操纵 SQL 查询的行为,使其听命于攻击者。 

此外,还有许多其他类型的注射,虽然表面上各不相同,但工作原理都是一样的。 

概括地说,最常见的注射类型包括

  • SQL 注入
  • 跨站脚本(HTML/JavaScript 注入)
  • 路径遍历(路径/链接注入)
  • 指令注入
  • 代码注入 

注射 101

如果你看一下前面的注入类型列表,它们都有一个共同点:它们都涉及一个字符串,该字符串通过一个解释器运行,然后解释器执行该字符串所代表的任何操作。我们用大括号标记了 "用户输入"。     

类型 输入示例 如何解释
查询语言 SELECT name FROM users WHERE username = '{admin}' Name 从用户表中用户名为 "admin "的所有行中选择 "姓名 "列
超文本标记语言 {约翰-史密斯} 用粗体字显示 "约翰-史密斯 "的名字
路径 /var/www/app/documents/{privacy-policy.pdf} 指向 `/var/www/app/documents/`文件夹中的文件 `privacy-policy.pdf`。
指挥 ping {8.8.8.8} 向 IP "8.8.8.8 "发送一系列 ICMP ping
代码 const name = '{John Smith}'; 将常量变量 `name` 设置为 `John Smith

那么,如果用户输入的插入不安全会发生什么情况?攻击者能做什么?同样,在这种情况下,大括号内的所有内容都被视为 "用户输入"。

类型 输入示例 如何解释
SQL - 注入 从用户中 SELECT name WHERE username = '{1' UNION 从用户中 SELECT passwordhash WHERE username = 'admin}' 从用户表中用户名为 "admin "的所有行中选择 "姓名",并从用户名为 "admin "的用户中选择密码哈希值
HTML - 注入 {} 用粗体字显示 "约翰-史密斯 "这个名字
路径 - 注射 /var/www/app/documents/{.../.../.../.../etc/shadow}。 指向 `/etc/` 文件夹中的 `shadow` 文件
命令 - 注入 ping {8.8.8.8 && ls .} 向 IP `8.8.8.8` 发送一系列 ICMP ping,并用 `ls` 打印当前目录的内容
代码 - 注入 const name = '{John Smith'; exec('ls .'); # }'; 将常量变量 `name` 设置为 `John Smith` 的值,然后执行系统命令 `ls .

在这些示例中,请注意如何利用输入来影响用户输入的结果。 

这就是注入的本质。它影响传递给解释器的内容,从而使解释器做一些与程序员初衷不同的事情。

这些只是需要考虑的基本问题。我们将一些不同的注射类型分到了各自的页面上,因为它们值得更多关注。 

您可以在这里找到它们:

命令注入‍

路径遍历‍

SQL 注入‍

跨站脚本