OWASP TOP10系列之#TOP1# A1-注入类「建议收藏」

OWASP TOP10系列之#TOP1# A1-注入类「建议收藏」OWASPTOP10系列之#TOP1#注入类提示:本系列将介绍OWASPTOP10安全漏洞相关介绍,主要针对漏洞类型、攻击原理以及如何防御进行简单讲解;如有错误,还请大佬指出,定会及时改正~文章目录OWASPTOP10系列之#TOP1#注入类前言一、注入类漏洞是什么?二、什么情况下会产生注入类漏洞问题?三、如何预防?四、具体示例1.SQL注入2.OS命令注入3.XPath注入总结前言在OWASP(开放式Web应用程序安全项目)公布的10项最严重的Web应用程序安全风险列表的在

大家好,又见面了,我是你们的朋友全栈君。

OWASP TOP10系列之#TOP1# A1-注入类

提示:本系列将介绍OWASP TOP10 安全漏洞相关介绍,主要针对漏洞类型、攻击原理以及如何防御进行简单讲解;如有错误,还请大佬指出,定会及时改正~



前言

在OWASP(开放式Web应用程序安全项目)公布的10项最严重的Web 应用程序安全风险列表的在 2013、2017 的版本中都是第一名


一、注入类漏洞是什么?

注入类漏洞是利用应用程序弱点,通过恶意字符将恶意代码写入数据库,获取敏感数据或进一步在服务器执行命令
几乎任何数据源都可以是注入向量,比如环境变量、参数以及用户信息等等,当攻击者可以向程序发送恶意数据时,就会出现注入缺陷
注入缺陷非常普遍,尤其是在代码中。一些更常见的注入有SQL、NoSQL、OS命令、对象关系映射(ORM)、LDAP和表达式语言(EL)或对象图导航库(OGNL)注入
检查代码时很容易发现注入缺陷,源代码检查是检测应用程序是否易受注入攻击的最佳方法,紧随其后的是对所有参数、头、URL、cookie、JSON、SOAP和XML数据输入进行彻底的自动化测试。还可以使用包括静态源(SAST)、动态应用程序测试(DAST)工具以及IAST(交互式应用安全测试),以在生产部署之前识别引入的注入缺陷。

二、什么情况下会产生注入类漏洞问题?

1 应用程序不会验证、过滤或清理用户提供的数据;
2 在对象关系映射(ORM)搜索使用恶意数据参数,用于提取额外的敏感记录;
3 恶意数据被直接使用或连接,比如SQL或执行CMD命令时,在动态查询、命令或存储过程中使用
包含结构数据和恶意数据。

三、如何预防?

1 将数据与命令和查询分开,使用安全的API,提供参数化接口并正确使用对象关系映射工具(ORM)
2.对服务器端输入进行验证,必要时需要对特殊字符进行转义、正则匹配等

四、具体示例

1.SQL注入

攻击者修改浏览器中的 ‘id’ 参数值以发送:’ 或 ‘1’=‘1
http://example.com/app/accountView?id=’ or ‘1’=’1

更改两个查询的含义以返回帐户表中的所有记录。
更危险的攻击可能会修改或删除数据,甚至调用存储过程

String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" 
+ request.getParameter("id") + "'");

2.OS命令注入

以下的代码使用系统属性 APPHOME 来确定它的安装目录,然后根据指定目录的相对路径执行初始化脚本
(错误代码)
示例语言: Java

String home = System.getProperty("APPHOME");
字符串 cmd = home + INITCMD;
java.lang.Runtime.getRuntime().exec(cmd);

上面的代码允许攻击者通过修改系统属性 APPHOME 指向包含恶意版本的 INITCMD 的不同路径,以应用程序的提升权限执行任意命令。因为程序不会验证从环境中读取的值,如果攻击者可以控制系统属性 APPHOME 的值,那么他们就可以欺骗应用程序运行恶意代码并控制系统。

3.XPath注入

与SQL 注入类似,当网站使用用户提供的信息为 XML 数据构建 XPath 查询时,就会发生 XPath 注入攻击。通过故意向网站发送格式错误的信息,攻击者可以找出 XML 数据的结构,或者访问他们通常无法访问的数据。如果 XML 数据用于身份验证(例如基于 XML 的用户文件),他们甚至可以提升他们在网站上的权限。

查询 XML 是使用 XPath 完成的,XPath 是一种简单的描述性语句,允许 XML 查询定位一条信息。与 SQL 一样,您可以指定要查找的某些属性和要匹配的模式。对网站使用 XML 时,通常接受查询字符串上的某种形式的输入,以标识要在页面上定位和显示的内容。必须清理此输入以验证它不会弄乱 XPath 查询并返回错误的数据。

XPath 是一种标准语言;它的符号/语法总是独立于实现的,这意味着攻击可能是自动化的。没有不同的方言,因为它发生在对 SQL 数据库的请求中。

因为没有级别访问控制,所以可以获取整个文档。我们不会遇到任何限制,正如我们可能从 SQL 注入攻击中了解到的那样。

比如
假设我们在网页上有一个用户身份验证系统,该系统使用此类数据文件来登录用户。一旦提供了用户名和密码,软件可能会使用 XPath 来查找用户:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
   <Employee ID="1">
      <FirstName>Arnold</FirstName>
      <LastName>Baker</LastName>
      <UserName>ABaker</UserName>
      <Password>SoSecret</Password>
      <Type>Admin</Type>
   </Employee>
   <Employee ID="2">
      <FirstName>Peter</FirstName>
      <LastName>Pan</LastName>
      <UserName>PPan</UserName>
      <Password>NotTelling</Password>
      <Type>User</Type>
   </Employee>
</Employees>
String FindUserXPath;
FindUserXPath = "//Employee[UserName/text()='" + Request("Username") + "' And
        Password/text()='" + Request("Password") + "']";

使用普通的用户名和密码,此 XPath 可以工作,但攻击者可能会发送错误的用户名和密码并在不知道用户名或密码的情况下选择 XML 节点,如下所示:

Username: blah' or 1=1 or 'a'='a
Password: blah

FindUserXPath becomes //Employee[UserName/text()='blah' or 1=1 or
        'a'='a' And Password/text()='blah']

Logically this is equivalent to:
        //Employee[(UserName/text()='blah' or 1=1) or
        ('a'='a' And Password/text()='blah')]

在这种情况下,只有 XPath 的第一部分需要为真。密码部分变得无关紧要,用户名部分将匹配所有员工,因为“1=1”部分。

XPath 注入防御
1.使用XPath 变量解析器
2.就像避免 SQL 注入的技术一样,您需要使用参数化的 XPath 接口(如果可用),或者转义用户输入以使其安全地包含在动态构造的查询中。如果您在动态构造的 XPath 查询中使用引号来终止不受信任的输入,那么您需要在不受信任的输入中转义该引号,以确保不受信任的数据无法尝试脱离该引用的上下文。在以下示例中,单引号 (’) 用于终止 Username 和 Password 参数。因此,我们需要将此输入中的任何 ’ 字符替换为该字符的 XML 编码版本,即 &apos。

String FindUserXPath;
FindUserXPath = "//Employee[UserName/text()='" + Request("Username").Replace("'", "&apos;") 
        + "' And Password/text()='" + Request("Password").Replace("'", "&apos;") + "']";

另一个更好的缓解选项是使用预编译的 XPath 1 查询。预编译的 XPath 查询已经在程序执行之前预设,而不是在用户输入添加到字符串后即时创建。这是一条更好的路线,因为您不必担心错过本应转义的字符

总结

本文主要介绍OWASP TOP10系列之#TOP1# 注入类,并对常见的SQL注入、CMD注入以及XPath注入简单介绍案例,仅供参考,欢迎指正~~

链接: OWASP-注入类参考链接.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146043.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么样的水平才算是java高级工程师?

    什么样的水平才算是java高级工程师?「高级工程师」这个词听起来就好像是逼格高的意思,事实上,这是个模糊概念,高不高级没有个标准。做高级的工作才算是高级、还是说职称上带有「高级」字样。我所见过的一些所谓高级的职位或是头上写着高级的人,明明是对这个词的蔑视。每个人对高级的理解都是不一样的,下面就以我理解的高级工程师进行回答,不一定只适合“Java”方面的,如果一个工程师只是局限在一种语言内的“高级”实际上并不会太高级。Java,这个…

    2022年7月7日
    15
  • 让你轻松架设FTP服务器

    让你轻松架设FTP服务器你想架设你的FTP服务器吗?笔者将从IIS和第三方软件两个角度,教会你轻松架设FTP服务器的方法,让你玩转FTP服务器的架设。一、用IIS架设FTP服务器:1、设置FTP服务器:(1)设置“FTP站点”标签项:在“控制面板→管理工具→Internet服务管理器”窗口中,选中“默认FTP站点→右键→属性”,在图1的“默认FTP站点属性”框中,“IP地址”可以使用默认,端口号保持“2

    2022年7月21日
    7
  • 一级域名、二级域名 cookie

    一级域名、二级域名 cookie一级域名、二级域名一级域名是animail.com二级域名是www.animal.com,elephant.animal.com三级域名是small.elephant.animal.com以此类推…cookie在父子域名下的行为在子域名下,可以提交父域名的cookie

    2022年5月21日
    88
  • 狗网skinsdog CSGO开箱子网站支持直接取回,全新任务系统上线

    狗网skinsdog CSGO开箱子网站支持直接取回,全新任务系统上线skinsdog狗网CSGO饰品皮肤开箱网站可直接取回狗网skinsdogCSGO开箱子网站支持直接取回,全新任务系统上线官方链接:skinsdog.cc注册登录自动免费获得$0.8美金推广码:csgogo(注册使用送0.8美金)支付:微信支付宝状态:直接取回…

    2022年9月27日
    0
  • pycharm2022 免费激活码【中文破解版】2022.02.13

    (pycharm2022 免费激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~4KDD…

    2022年4月1日
    58
  • C语言左右法则

    C语言左右法则

    2021年8月13日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号