目录
本文详细讲解CTF-PTE靶场远程控制关卡的渗透实战全流程。首先通过分析Cookie值发现IsAdmin=false和Username=Guest,经过URL和Base64解码确认当前为访客账户。随后演示如何伪造管理员权限:将明文"admin"进行Base64和URL编码后修改Cookie值(IsAdmin=true;Username=YWRtaW4%3D),并使用Burp Suite抓包篡改。最后通过添加X-Forwarded-For:127.0.0.1字段绕过IP限制,成功获取flag。整个过程展示了如何利用失效的访问控制安全风险进行权限提升。
一、渗透准备
1、打开靶场
开启bp,浏览器代理指向bp,打开靶场,页面提示"失效的访问控制, 指未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据( 直接的对象引用或限制的URL ) 。例如: 访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。请使用admin用户访问权限获取KEY",如下所示。

2、开始答题
点击开始答题,第一次访问靶场,如下所示。
http://challenge-6cded9b41f819508.sandbox.ctfhub.com:10800

3、右键查看cookie
右键元素,通过提示可知只有admin才可以拿到flag。


4、重新载入页面获取cookie值
点击重新载入或者刷新页面,此时第二次访问靶场首页,如下所示。

5、分析cookie值
(1)原始cookie值
cookie中有两个元素(分别是IsAdmin=false; Username=R3Vlc3Q%3D),其中IsAdmin=false 以明文布尔值标识当前用户非管理员身份,存在通过修改为true进行权限提升的安全风险;而Username=R3Vlc3Q%3D 为经过URL编码的Base64字符串,解码后得到明文用户名"Guest"。具体分析过程如下所示。
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| // 原始Cookie IsAdmin=false Username=R3Vlc3Q%3D 原始值 → URL 解码 → Base64 解码 → 明文用户名 // 解码后 IsAdmin = false Username= Guest * 步骤1:URL解码 输入:R3Vlc3Q%3D 处理:将百分比编码 %3D 解码为对应的字符 = 输出:R3Vlc3Q= * 步骤2:Base64解码 输入:R3Vlc3Q= 处理:将Base64编码字符串解码为原始文本 输出:Guest 最终结果:Guest |
(2)admin账户cookie设计
- 原始的IsAdmin = false,说明不是admin账户。它是一个权限标识 。当用户是"访客(guest)"身份时,服务器设置IsAdmin = false。很可能,当用户成功登录或以管理员身份访问时,服务器会设置IsAdmin =true。另外一个值username解码后为Guest,这说明如果我们想以管理员账户登录,应该将其设置为admin,但是还需要对其进行 base64编码和URL编码。
- 如下流程详细展示了从明文用户名admin到最终Cookie值的完整编码转换过程。首先通过Base64编码将可读的"admin"转换为"YWRtaW4=",此步骤将二进制数据转化为ASCII字符序列,但生成的等号在URL传输中属于特殊字符。随后进行URL编码处理,将等号转换为"%3D"形式,确保其在HTTP协议中安全传输而不被歧义解析。
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 明文用户名 → Base64 编码 → URL 编码 → 最终值 步骤1:Base64编码 输入:admin 处理:将明文用户名转换为Base64编码 输出:YWRtaW4= 步骤2:URL编码 输入:YWRtaW4= 处理:将特殊字符=进行URL编码 输出:YWRtaW4%3D 最终Cookie值: Username=YWRtaW4%3D 完整Cookie: IsAdmin=true; Username=YWRtaW4%3D |
二、渗透实战
接下来通过简单地篡改该Cookie的值(将Cookie改为IsAdmin=true; Username=YWRtaW4%3D)来尝试提升自己的权限,从而以管理员身份访问未授权功能。
1、bp抓包
在burpsuite中找到此请求报文,将其发送到repeater模块,如下所示。

发送到repeater后报文如下所示,下图中左边红框内容就是我们需要替换的,关注右边红框就是与我们分析一致,解密后为Guest。

2、修改cookie值
Cookie改为IsAdmin=true; Username=YWRtaW4%3D
修改后如下所示,注意下图中右侧部分,这说明我们修改的是正确的,username就是admin经过base64加密再进行URL编码后的值。

点击发送后,页面提示"No,只允许本地访问",这说明我们还需要加入X-Forwarded-For:127.0.0.1字段,代表本地ip进行访问。

3、增加本地访问字段
在HTTP请求的首部字段中增加X-Forwarded-For: 127.0.0.1,旨在伪造客户端的源IP地址为本地回环地址127.0.0.1,用于绕过服务器的IP限制策略,欺骗应用程序使其认为请求来源于本机而非真实远程客户端,如下所示即可在响应报文中获取到flag值。如下即为请求报文的完整payload,相对于上一个步骤增加了如下内容。
X-Forwarded-For: 127.0.0.1
该request报文的特征如下所示,通过组合使用身份伪造和IP欺骗技术,试图获取本应受限资源start目录的访问权限。该请求可以渗透成功暴露出目标系统可能存在三重安全风险:基于Cookie的身份验证可被篡改、IP验证机制过度依赖可伪造的HTTP头部、权限校验逻辑存在设计缺陷。
- 首先,请求通过Cookie字段伪造管理员身份,将IsAdmin设置为true,并将Username通过Base64+URL编码设置为"admin",试图欺骗系统授予高权限访问。
- 其次,请求头中设置了X-Forwarded-For: 127.0.0.1,刻意伪造客户端IP为本地回环地址,旨在绕过服务器的源IP限制策略,制造"本地访问"的假象。
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| GET /start/ HTTP/1.1 Host: 610c99b0.clsadp.com User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://610c99b0.clsadp.com/ Cookie: IsAdmin=true; Username=YWRtaW4%3D DNT: 1 X-Forwarded-For: 127.0.0.1 Connection: close Upgrade-Insecure-Requests: 1 |
按照正常逻辑这样发包后就可以求得flag。