前言
为了提升下英语水平,尝试翻译篇比较简单的文章,还望各位大佬轻喷。
在渗透过程中,如果想要找到绕过认证机制的漏洞问题,我们需要对登录后也就是认证后的每一个功能和请求进行如下验证:
- 是否可以未授权访问登录后的路径从而获取一些敏感数据;
- 是否退出登录后,cookie仍然有效,从而获取敏感数据;
- 是否存在水平与垂直越权问题;
如何进行测试
例如,AddUser.jsp
是一个管理页面,需要管理员登录后,通过如下链接“https://www.example.com/admin/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-URL
orX-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-For
- X-Forward-For
- X-Remote-IP
- X-Originating-IP
- X-Remote-Addr
- X-Client-IP
对应的参数值可以是如下形式:
- 127.0.0.1
- 127.0.0.0/8
- ::1/128
- localhost
- 与渗透目标相关的私有网络地址: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的选手查看。