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

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


文章目录

  • OWASP TOP10系列之#TOP1# A1-注入类
  • 前言
  • 一、注入类漏洞是什么?
  • 二、什么情况下会产生注入类漏洞问题?
  • 三、如何预防?
  • 四、具体示例
    • 1.SQL注入
    • 2.OS命令注入
    • 3.XPath注入
  • 总结

前言

在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") + "' AndPassword/text()='" + Request("Password") + "']";

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

Username: blah' or 1=1 or 'a'='a
Password: blahFindUserXPath 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-注入类参考链接.

OWASP TOP10系列之#TOP1# A1-注入类相关推荐

  1. OWASP TOP10 及防御手段(附加应用安全设计框架)

    >>Ⅰ 了解Web交互的基本过程 图1.Web交互的基本过程(实际应用) 图2.Web交互的交换过程(原理) OWASP TOP10 1.1 A1-注入 注入漏洞攻击,例如SQL,OS,和 ...

  2. OWASP top10 详解

    目录 什么是owasp top10? 排行榜 (1)SQL 注入 (2)失效的身份认证和会话管理 (3)跨站脚本攻击 XSS (4)直接引用不安全的对象 (5)安全配置错误 (6)敏感信息泄露 (7) ...

  3. TWO DAY | WEB安全之OWASP TOP10漏洞

    TWO DAY | WEB安全之OWASP TOP10漏洞 一.OWASP简介 OWASP:开放式Web应用程序安全项目(Open Web Application Security Project), ...

  4. OWASP top10漏洞原理及防御(2017版官方)

    文章目录 一.OWASP top 10简介 二.OWASP top 10详解 A1:2017-注入 A2:2017-失效的身份认证 A3:2017-敏感数据泄露 A4:2017-XML外部实体(XXE ...

  5. OWASP TOP10 移动安全漏洞(安卓)2017

    文章目录 前言 OWASP TOP10 移动安全漏洞(安卓)2017 一.脆弱的服务器端安全控制 二.不安全的数据存储 三.传输层保护不足 四.意外的数据泄露 五.弱授权和身份认证 六.密码破解 七. ...

  6. Java7技术系列:DI依赖注入

    Java7技术系列:try-with-resource Java7技术系列:int与二进制的转换优化 Java7技术系列:MultiCatchException Java7技术系列:NIO.2异步IO ...

  7. owasp top10 渗透测试

    本期内容 1.了解什么是渗透测试 2.常见漏洞有哪写 3.练习测试 目录 一.渗透测试 1.介绍 1.什么是 OWASP TOP 10 二.常见漏洞 的攻击方式 原因 和影响 A1 注入漏洞 攻击方式 ...

  8. WEB安全-OWASP TOP10

    目录 1.渗透测试基础 2.常见名词解释 3.OWASP TOP10 3.1访问控制崩溃 3.2敏感数据暴露 3.3注入 3.4不安全的设计 3.5安全配置不当 3.6使用含有已知漏洞组件 3.7认证 ...

  9. php注入类,简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类 ...

最新文章

  1. FPGA在电平接口领域的应用
  2. 炸!业界难题,跨库分页的几种常见方案
  3. influxdb查看数据库命令_influxdb基本命令
  4. laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
  5. 【Github上有趣的项目】TensorKart 自动驾驶马里奥赛车(玩不了)
  6. 书籍排版学习心得_为什么排版是您可以学习的最佳技能
  7. c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...
  8. 华为p10plus能用鸿蒙吗,华为P10/P10 Plus对比评测:自家兄弟大对决
  9. Qtopia-2.2.0启动脚本
  10. python span镶嵌匹配_python模式匹配,提取指定字段
  11. 海康visionmaster-软加密
  12. php采集虎牙,全网首发PHP虎牙直播解析接口源码
  13. GB2312简体中文编码表(转)
  14. Plist图集批量拆解工具大全
  15. 数据库服务:数据库表空间扩容
  16. web端实现视频播放,视频地址切换,清晰度切换,断点续播
  17. java在线客服系统_JSP在线客服系统
  18. gdb reading symbols xxxx 段错误
  19. 【Git/Bugfix系列】fatal: in unpopulated submodule的分析和解决方案
  20. 江苏计算机二级报名一年几次,江苏计算机二级每年考几次

热门文章

  1. vue3 生成二维码
  2. 优酷的视频搜索soku的电视剧数据
  3. s3c2440 ARM9 裸机驱动第一篇-GPIO驱动(汇编)
  4. 分享一款绘制时序图的实用小工具
  5. 【Redis】主从、哨兵、集群各自架构的优点和缺点对比
  6. 基于在STM32下完成FreeRTOS的多任务程序开发,多任务串口以及AHT20封装库,原理图,PCB图以及AHT20(实际用到的是LMT70)及采集一次温度数据的模块实战
  7. LMT NEW PBS作业排队调度系统的回报与功能
  8. 【2022/8/27】Qt自制C语言IDE——界面设计
  9. java并发编程学习juc工具类之Executors
  10. ipad手写笔一定要买苹果的吗?性价比ipad手写笔推荐