描述
这种攻击的目标用户控制变量(PHP DEBUG = 1,全局变量,等等)。敌人可以覆盖变量利用用户提供的,不可信的查询变量直接使用在应用程序服务器上没有任何卫生处理的数据。在极端情况下,对手可以改变变量控制应用程序的业务逻辑。例如,在PHP之类的语言中,许多不可能允许用户设置默认配置覆盖变量。
攻击的可能性
典型的严重性
的关系
此表显示了其他的攻击模式和高水平类别相关的这种攻击模式。这些关系被定义为ChildOf ParentOf,给类似的项目可能存在的洞察力在较高和较低的抽象级别。此外,关系如光束,PeerOf, CanAlsoBe定义显示类似的攻击模式,用户可能想要探索。
自然 |
类型 |
ID |
的名字 |
ChildOf |
元在CAPEC攻击模式——元级别攻击模式的量化无疑是一个抽象的描述一个特定的方法或技术用于攻击。元攻击模式往往是空虚的一个特定的技术或实现,旨在提供一个高水平的理解方法。元级攻击模式是一个泛化的攻击模式相关的标准水平。元级攻击模式尤其适用于架构和设计水平的威胁建模练习。 |
22 |
利用对客户的信任 |
ParentOf |
详细的攻击模式-一个详细级别攻击模式CAPEC提供了一个低水平的细节,通常利用一个特定的技术和针对特定的技术,并表达一个完整的执行流程。详细的攻击模式比元更具体的攻击模式和标准的攻击模式,通常需要一个特定的保护机制来减轻实际攻击。详细的级别攻击模式通常会利用许多不同的标准水平攻击模式链接在一起来完成一个目标。 |
13 |
破坏环境变量值 |
ParentOf |
详细的攻击模式-一个详细级别攻击模式CAPEC提供了一个低水平的细节,通常利用一个特定的技术和针对特定的技术,并表达一个完整的执行流程。详细的攻击模式比元更具体的攻击模式和标准的攻击模式,通常需要一个特定的保护机制来减轻实际攻击。详细的级别攻击模式通常会利用许多不同的标准水平攻击模式链接在一起来完成一个目标。 |
162年 |
操纵隐藏字段 |
此表显示了这种攻击模式的观点属于和顶级类别内的这一观点。
执行流程
探索
探测目标应用程序:敌人首先探测目标应用程序来确定重要的有关目标的信息。这些信息可能包括类型使用软件,软件版本,用户输入应用程序消耗什么,等等。
实验
找到用户控制变量:使用探测应用程序发现的信息,对手试图操纵许多用户控制变量和观察对应用程序的影响。如果对手通知任何重大修改应用程序,他们就知道某个变量是有用的应用程序。
技术 |
对手会尝试改变许多常见变量名称如“计数”、“tempFile”,“我”,等等。希望他们能改变应用程序的流程,不知道目的。 |
对手会尝试改变已知的环境变量。 |
利用
操作用户控制变量:一旦敌人发现用户控制器变量(s)到应用程序很重要,他们会操纵它改变正常的行为,有利于对手。
先决条件
一个变量被应用程序服务器暴露给客户端。 |
一个变量被用户应用服务器可以被覆盖。 |
应用程序服务器信任用户提供的数据来计算业务逻辑。 |
应用程序服务器不执行适当的输入验证。 |
技能要求
(等级:低) 恶意用户可以很容易地尝试一些著名的全局变量,找到一个匹配。 |
(级别:中等) 敌人可以使用自动化工具来调查他们可以控制的变量。 |
指标
网络渗透工具探索web服务器可能生成异常活动记录在日志文件中。异常流量等大量的请求来自相同客户机也可以增加警告从监控系统或一个入侵检测工具。 |
后果
这个表指定不同的个体与攻击模式相关的后果。范围确定违反了安全属性,而影响了负面的技术影响,如果敌人成功的攻击。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能有高可能性模式将被用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性 |
修改数据 |
|
保密
完整性
可用性 |
执行未经授权的命令 |
|
保密 |
读取数据 |
|
保密
访问控制
授权 |
获得特权 |
|
缓解措施
不允许覆盖全局变量和全局变量不相信。 如果register_globals选项启用,PHP将创建全局变量为每个GET、POST,和饼干变量包含在HTTP请求中。这意味着恶意用户可能会意外设置变量。例如确保PHP服务器设置为不公开全局变量。 |
软件系统应该不愿意信任变量被初始化外部的信任边界。确保足够的执行检查时依靠从外部输入信任边界。 |
单独的表示层和业务逻辑层。在业务逻辑层变量不应暴露在表示层。这是为了防止计算控制的业务逻辑与用户输入数据。 |
在声明变量时使用封装。这是降低接触你的变量。 |
假设所有的输入是恶意的。创建一个定义所有有效allowlist输入软件系统根据需求规格说明书。输入不匹配allowlist应该拒绝了该计划。 |
例子,实例
PHP是一种糟糕的安全学习。溥PHP的主要思想是“易用性”和咒语“不要让开发人员去任何额外的工作来完成事情”在所有情况下都适用。这是用PHP实现通过删除形式的语言,允许声明的变量在第一次使用,与预设值初始化一切,把每一个有意义的变量从一个事务,使其可用。在碰撞与更技术的情况下,简单的几乎总是在PHP中占主导地位。 这一切的结果之一是,PHP Web应用程序允许用户覆盖环境变量与用户提供的,不可信的查询变量。因此,至关重要的价值观如鹿和搜索路径可以直接覆盖和控制远程匿名用户。 另一个类似的结果是,变量可以直接控制和分配的GET和POST请求中提供的用户控制值字段。所以看似正常的代码,做奇怪的事情:
而(数< 10美元){ / /做某事 美元计数+ +; } 通常,这个循环将执行其身体的十倍。第一个迭代将一个未定义的零,进一步旅行虽然循环将导致增加的变量$计数。问题是编码器没有初始化的变量为零之前进入循环。这很好,因为PHP初始化变量声明。结果似乎函数的代码,不管坏处。问题是,Web应用程序的一个用户能供应请求等
GET / login ?数= 9 并导致计数开始在价值9美元,导致只有一个循环之旅。Yerg。 根据配置,PHP可以接受用户提供的变量的环境变量。PHP为所有过程环境变量初始化全局变量,如路径和主机名美元。这些变量是至关重要的,因为他们可以使用文件或网络操作。如果一个对手可以提供一个新的$ PATH变量(如道路= / var),该项目有可能被利用。 PHP也可以把字段标签中提供GET / POST请求,并将它们转化为全局变量。这是$ count变量的情况我们在前一个例子了。 考虑这个问题的另一个例子中,一个名为$ tempfile程序定义了一个变量。敌人可以提供一个新的临时文件如tempfile美元= " / etc / passwd "。临时文件可能会抹去后通过调用分离($ tempfile);。现在passwd文件已经被抹去,确实一件坏事在大多数OSs。 也考虑到使用包括()和要求()美元优先搜索路径,并使用调用shell可能执行ls等至关重要的项目。通过这种方式,ls可能“木马”(敌人可以修改路径导致美元的木马副本ls加载)。这种类型的攻击也可以适用于可加载库如果$ LD_LIBRARY_PATH被修改。 最后,一些版本的PHP可能将用户数据传递给syslog格式字符串,从而让应用程序格式字符串缓冲区溢出。 参见:文件上传允许任意文件读通过设置隐藏表单变量匹配内部变量名(cve - 2000 - 0860) |
引用
[REF-1] g·霍格伦德和g·麦格劳。“利用软件:如何打破代码”。addison - wesley。2004 - 02。 |
|
马尔科姆克兰西(ref - 521)。“十安全检查PHP,第1部分”。2003-03-20。 |
|
内容的历史
提交 |
提交日期 |
提交者 |
组织 |
2014-06-23
(版本2.6) |
CAPEC内容团队 |
manbetx客户端首页 |
|
修改 |
修改日期 |
修饰符 |
组织 |
2017-01-09
(版本2.9) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Related_Attack_Patterns |
2019-04-04
(版本3.1) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Related_Attack_Patterns |
2020-07-30
(版本3.3) |
CAPEC内容团队 |
manbetx客户端首页 |
Execution_Flow更新,移植,Skills_Required |
2020-12-17
(版本3.4) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Related_Weaknesses |
2022-02-22
(版本3.7) |
CAPEC内容团队 |
manbetx客户端首页 |
更新描述、Example_Instances Execution_Flow Skills_Required |
2022-09-29
(版本3.8) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Example_Instances |
|