使用 HTTP 动词篡改的认证旁路 (Http Verb Tempering: Bypassing Web Authentication and Authorization)
Http Verb Tempering: Bypassing Web Authentication and Authorization(使用 HTTP 动词篡改的认证旁路
什么是HTTP动词(HTTP VERB)?
超文本传输协议(HTTP)提供了可以用于在web服务器上执行操作的方法列表。
这些方法中的许多都旨在帮助开发人员在开发或调试阶段部署和测试HTTP应用程序。
如果web服务器配置不当,这些HTTP方法可能被用于恶意目的。
此外,还将检查一些高脆弱性,如跨站点跟踪(XST),这是一种使用服务器的HTTP跟踪方法的跨站点脚本编制形式。
在HTTP方法中,开发人员最常用GET和POST来访问web服务器提供的信息。
HTTP还允许其他一些不太为人所知的方法。
以下是一些方法:
- HEAD
- GET
- POST
- PUT
- DELETE
- TRACE
- OPTIONS
- CONNECT
这些方法可能会对一个web应用程序构成重要的安全风险,因为他们允许攻击者修改存储在web服务器的文件,删除服务器上的web页面,并上传一个web壳到服务器,导致偷窃合法用户的凭据。
此外,当翻寻服务器时,必须禁用的方法是:
PUT 该方法允许客户端在web服务器上上传新文件。攻击者可以通过上传恶意文件(例如通过调用cmd.exe执行命令的ASP或PHP文件)利用它,或者简单地使用受害者的服务器作为文件存储库。
DELETE 该方法允许客户端删除web服务器上的文件。攻击者可以利用它作为一种非常简单和直接的方法来破坏web站点或发起拒绝服务(DOS)攻击。
CONNECT 这种方法允许客户端使用web服务器作为代理
TRACE 此方法简单地将发送到服务器的任何字符串回传给客户机,主要用于开发人员的调试目的。这种方法最初被认为是无害的,现在可以用来发动一种称为跨站点追踪的攻击,这种方法被Jeremiah Grossman发现。
如果应用程序需要上述任何一种方法,比如在大多数情况下REST Web服务可能需要PUT或DELETE方法,那么检查它们的配置/使用是否正确地限制在可信的用户和安全的环境中是非常重要的。
许多web环境允许基于谓词的身份验证和访问控制(VBAAC)。
这基本上只是使用HTTP方法(如GET和POST)的安全控制(通常使用)。让我们举个例子让你更好地理解。
[JAVA EE web XML file]
[xml]
<security-constraint><web-resource-collection><url-pattern>/auth/*</url-pattern><http-method>GET</http-method><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>root</role-name></auth-constraint>
</security-constraint>
[/xml]
在上面的示例中,规则仅限于/auth目录的根角色。
但是,即使在对上述角色的访问受到限制之后,也可以使用HTTP谓词调整绕过这个限制。正如我们看到的,上面提到的配置只限制了使用GET和POST方法。
我们可以很容易地绕过这个使用头部方法;您还可以尝试任何其他HTTP方法,如PUT、TRACK、TRACE、DELETE等。
此外,您还可以尝试通过发送任意字符串(如ASDF)作为HTTP谓词(方法)来绕过相同的问题。
以下是一些条件,是有可能绕过的:
- 它的GET功能不是幂等的,也不是执行任意的HTTP方法
- 它使用列出HTTP谓词的安全控件
- 安全控制无法阻止HTTP方法,不列在这些是最常见的场景,你可以绕过相同的。它还取决于规则的错误配置。
我们怎样绕过VBAAC与HTTP方法
1. 使用HEAD方法
如上所述,HEAD方法用于获取与GET相似但没有响应体的结果。假设您的应用程序中有一个URL受到安全约束的保护,该约束仅使用GET和POST限制对/Auth目录的访问。
http://httpsecure.org/auth/root.jsp?cmd=adduser
如果您尝试在浏览器中强制浏览到该URL,则安全约束将检查规则,以查看所请求的资源和请求者是否得到了授权。
第一个规则将检查来自浏览器的HTTP方法,因此它应该是一个被安全约束阻止的GET或POST方法。
如果您使用浏览器代理(如BurpSuite)拦截请求,并通过更改GET to HEAD方法来生成它,因为HEAD方法没有在安全约束中列出,所以请求将不会被阻止。
因此,adduser函数将被成功调用,并且由于HEAD功能,您将在浏览器中获得空响应。
2. 使用任意的HTTP谓词
大多数平台都允许使用任意的HTTP动词,比如PHP、JAVA EE。
这些方法的执行类似于GET请求,这使您能够绕过相同的请求。
最重要的是,使用任意方法的响应不会像HEAD方法那样被剥离。您可以很容易地看到内部页面。
用任意方法,代替HEAD 方法可以查看页面源代码。
3. 一些供应商允许HEAD头部动词
许多服务器供应商默认允许头动词,例如:
- APACHE 2.2.8
- JBOSS 4.2.2
- WEBSPERE 6.1
- TOMCAT 6.0
- IIS 6.0
- WEBLOGIC 8.2
允许使用HEAD方法根本不是一个漏洞,因为它是RFC中的一项需求。
让我们看看一些最流行的过时的应用程序安全机制,看看我们是否可以使用它们绕过VBAAC。
以下是可能受到谓词篡改技术影响的服务器。
JAVA EE
允许HTTP动词在策略中—YES
绕路可能—YES
HEAD可以在policy中—YES
.htaccess
允许HTTP谓词在Policy中—YES
Bypassing Possible绕路可能—YES(如果没有设置)
HEAD可以在policy中—YES
ASP.NET
允许在策略中使用HTTP动词—YES
绕路可能—YES(如果没有设置)
HEAD可以在policy中—YES
Java EE容器
让我们考虑以下安全约束策略:
[bash]
<security-constraint><display-name>Example Security Constraint Policy</display-name><web-resource-collection><web-resource-name>Protected Area</web-resource-name><!– Define the context-relative URL(s) to be protected –><url-pattern>/auth/security/*</url-pattern><!– If you list http methods, only those methods are protected –><http-method>POST</http-method><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>GET</http-method></web-resource-collection>…
</security-constraint>
[/bash]
在上面提到的代码中,列出的方法是受保护的,因此只有当对/auth/security目录中的任何内容的请求使用<http-method> 列表中的谓词时,该规则才会触发。
实现此策略的最佳方法是阻止未列出的任何方法,但这不是这些机制当前的行为方式,并且您可以看到HEAD动词不在此列表中。
因此,转发HTTP HEAD请求将完全绕过此策略,在此之后,应用服务器将把请求传递给GET处理程序。
确保JAVA EE安全的正确方法是从该策略中删除所有< HTTP -method>元素,这只是将该规则应用于所有HTTP方法,但是如果您仍然希望限制对特定方法的访问,那么您需要设置下面提到的两个策略。
[java]
<security-constraint><web-resource-collection><web-resource-name>site</web-resource-name><url-pattern>/*</url-pattern><http-method>GET</http-method></web-resource-collection>…</security-constraint><security-constraint><web-resource-collection><web-resource-name>site</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection>…
</security-constraint>
[/java]
因此,第一个策略拒绝GET访问请求,第二个策略拒绝所有访问请求。
ASP.NET Authorization
让我们来看看ASP.NET授权安全机制配置,容易被VBAAC绕过。
[vb]
<authorization><allow verbs="POST" users="joe"/><allow verbs="GET" users="*"/><deny verbs="POST" users="*"/>
</authorization>
[/vb]
在上述规则中,用户JOE只能提交POST请求。
在本例中,这是不能绕过的,原因是GET方法允许所有人使用。
因此,没有保证绕过使用HEAD 方法。
[bash]
<authorization><allow verbs="GET" users="root"/><allow verbs="POST" users="joe"/><deny verbs="POST,GET" users="*" />
</authorization>
[/bash]
这是容易绕过使用头部方法。
这是可能的,因为. net隐式地在每个授权中插入了一个“允许所有人”规则。
在适当地列出他们的角色权利之后,附加一个“拒绝所有”规则。
[bash]
<authorization><allow verbs="GET" users="root"/><allow verbs="POST" users="joe"/><deny verbs="*" users="*" />
</authorization>
[/bash]
这将确保通过授权检查的请求只有那些在授权规则中具有特定HTTP谓词的请求。
需要记住的几点
1)始终启用deny all选项
2)配置你的网络和应用服务器,完全不允许HEAD请求
感谢您的阅读
References
https://www.owasp.org/index.php/Test_HTTP_Methods_%28OTG-CONFIG-006%29
http://www.aspectsecurity.com/research-presentations/bypassing-vbaac-with-http-verb- tampering
https://resources.infosecinstitute.com/topic/http-verb-tempering-bypassing-web-authentication-and-authorization/
使用 HTTP 动词篡改的认证旁路 (Http Verb Tempering: Bypassing Web Authentication and Authorization)相关推荐
- 网络安全-使用HTTP动词篡改的认证旁路
这个东西去年的安全扫描都没有,今天就扫出来了,非常奇怪的一个东西.好吧,找资料找原因.结果可能应为搜索名词的原因,这个问题在群友的帮助下解决了. 在我理解中servlet只有post和get方法,然后 ...
- 后端架构token授权认证机制:spring security JSON Web Token(JWT)简例
后端架构token授权认证机制:spring security JSON Web Token(JWT)简例 在基于token的客户端-服务器端认证授权以前,前端到服务器端的认证-授权通常是基于sess ...
- k8s安全 认证 鉴权 准入控制之二:授权(Authorization)
系列文章链接 k8s安全 认证 鉴权 准入控制之一:认证(Authentication) k8s安全 认证 鉴权 准入控制之二:授权(Authorization) k8s安全 认证 鉴权 准入控制之三 ...
- 身份认证系统(一)单WEB应用的身份认证
身份认证技术,也就是所谓的登录功能,是现代WEB系统最常见的功能之一.本系列文章就试图为大家详细的介绍身份认证技术. Basic认证模式 Basic认证模式是较早被广泛应用的一种HTTP标准提供的认证 ...
- php 登录安全认证,介绍几种常用的web安全认证方式
本文为大家介绍了五种常用的web安全认证方式,具有一定的参考价值,希望能对大家有所帮助. 1.Http Basic Auth 这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问 ...
- java web认证考试_用Java实现Web服务器HTTP协议
一.HTTP协议的作用原理 HTTP协议的作用原理包括四个步骤: 1.连接:Web浏览器与Web服务器建立连接.2.请求:Web浏览器通过socket向Web服务器提交请求.3.应答:Web浏览器提交 ...
- 网页防篡改技术_阿里云云安全中心和web应用防火墙的网页防篡改功能有什么不同...
阿里云云安全中心和web应用防火墙(WAF)产品都具备网页防篡改的功能,但两者实现防篡改的原理不同,导致用户在使用时需要根据自身业务情况选择. 我们先看看阿里云官方对此功能的说明: 云安全中心:&qu ...
- HTTP认证模式:Basic and Digest Access Authentication
一. Basic 认证 客户端以" : "连接用户名和密码后,再经BASE64编码( Base64 Content-Transfer-Encoding )通过Authorizati ...
- python token认证_理解JWT(JSON Web Token)认证及python实践
最近想做个小程序,需要用到授权认证流程.以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式. 这一篇主要内容是 JWT 的认证原理,以及p ...
- 全面分析RHCE7(红帽认证工程师)考试题目之 ----WEB 服务器 篇
HTTP服务基础 独立Web服务 Web通信基本概念 基于B/S 服务端提供网页 浏览器下载并显示网页 Hyper Text Markup Language (HTML)超文本标记语言 Hyper T ...
最新文章
- 网页中Google Map的使用
- 第二章:用户登录管理模块
- angularjs input标签用一个日期插件后数据不能双向绑定了_微信如何定时发朋友圈?(最方便最好用的办法!)...
- Redis中使用Lua语言
- IComparable和Icomparer接口
- object对象进行深拷贝
- 微信客服我是这样管理的
- 单片机实验板 c语言 打包下载,《AVR单片机开发板 实验板 C语言 视频教程 》
- 山石sg6000e1700配置手册_Hillstone SG-6000安装手册.pdf
- Nginx的请求转发使用步骤
- 事务的四大特性(ACID)
- 计算机已从异常关机中恢复,win7系统经常遇到“windows已从异常关机中恢复”的解决方法...
- 计算机英语趣味知识竞赛,(经典)精华版 英语趣味知识竞赛.ppt
- yolov5facce-landmarks(98点)
- 小米progtx笔记本快捷键驱动安装
- 第四周:基于图像相似度比较的分镜头
- CSS小应用(圆形关闭按钮、大于号、可旋转三角箭头)
- 今天,公众号留言功能开通啦!| 文末乔迁福利
- 软件测试经典面试题总结文库,软件测试经典面试题总结
- 对于JAVA中count=count++的理解