渗透或CTF中使用请求头绕过认证模式

前言

为了提升下英语水平,尝试翻译篇比较简单的文章,还望各位大佬轻喷。

在渗透过程中,如果想要找到绕过认证机制的漏洞问题,我们需要对登录后也就是认证后的每一个功能和请求进行如下验证:

是否可以未授权访问登录后的路径从而获取一些敏感数据;是否退出登录后,cookie仍然有效,从而获取敏感数据;是否存在水平与垂直越权问题;

如何进行测试

例如,AddUser.jsp是一个管理页面,需要管理员登录后,通过如下链接“” 访问。

抓取访问该页面的请求包,如下:

POST /admin/addUser.jsp HTTP/1.1 Host: www.example.com [...] userID=fakeuser&role=3&group=grp001

如果一个普通用户执行上述请求会发生什么?会不会也创建一个用户呢?如果能创建,新用户能使用管理员的权限吗?

测试方式一:指定不同角色获取同一个资源

举个例子,分析一个使用共享目录分享存储的临时文件给不同的用户的应用。比如说现在有个ABC.pdf文件,该文件只能由”角色A“用户获取到,验证”角色B“是否能获取到该文件。

测试方式二:使用特殊的请求头

有些应用会支持非标准的请求头,比如:允许”X-Original-URLorX-Rewrite-URL“覆盖目标url值。这种方式适合于权限控制是基于请求链接限制的情况,比如:应用程序的后台地址”/console“或者"/admin"禁止通过互联网访问。但是探测到请求头支持”X-Original-URLorX-Rewrite-URL“,可以使用以下方式绕过该限制:

发送正常请求,如下:GET / HTTP/1.1 Host: www.example.com [...]发送一个不存在的路径且带有”X-Original-URL“请求,如下:GET / HTTP/1.1 Host: www.example.com X-Original-URL: /donotexist1 [...]发送一个不存在的路径且带有”X-Rewrite-URL“的请求,如下:GET / HTTP/1.1 Host: www.example.com X-Rewrite-URL: /donotexist2 [...]

如果使用了”X-Original-URL”或者“X-Rewrite-URL“请求的响应包中提示”不存在的路径信息“或者是404状态,或者是”资源未发现“等相关内容,表明应用程序支持这两种特殊的请求头。此时我们可以指定”X-Original-URL”或者“X-Rewrite-URL“为”/console“或者”/admin“,尝试绕过禁止互联网访问的限制。

测试方式三:其他请求头

通常网站的后台管理都是对内网ip开放的,此时可以使用各种各样代理转发相关的http请求头来绕过内网ip访问限制。可以用如下请求头做尝试:

X-Forwarded-ForX-Forward-ForX-Remote-IPX-Originating-IPX-Remote-AddrX-Client-IP

对应的参数值可以是如下形式:

127.0.0.1127.0.0.0/8::1/128localhost与渗透目标相关的私有网络地址:10.0.0.0/8;172.16.0.0/12;192.168.0.0/16链路本地地址:169.254.0.0/16

另:在地址或者主机名中加上端口信息,有时候也可以绕过防火墙,比如:127.0.0.4:80,127.0.0.4:443,127.0.0.4:43982等形式。

感觉这篇文章翻译完,好像更适用于打CTF的选手查看。

原文地址:

WSTG - Latest | OWASP​owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/02-Testing_for_Bypassing_Authorization_Schema