发帖
 找回密码
 立即注册
搜索
0 0

WEB bp官方靶场Business logic vulnerabilities 业务逻辑漏洞11

CTF练习 750 0 2025-8-13 23:01:12

第十一关 通过加密预言机绕过身份验证

这一关就是通过加密机绕过这个认证,使用管理员去登录,从而把其他用户carlos删除

提示:1、该实验环境存在一个逻辑漏洞,会向用户暴露加密预言机(encryption oracle)。

2、要完成本实验,请利用此漏洞获取管理员面板的访问权限并删除用户carlos。

3、自己的帐户:wiener:peter

具体操作:

1、在启用 “保持登录状态” 选项的情况下与应用程序交互

2、找到触发的数据包,发现选择的保持登录选项是加密的,把这个加密数据发到Decoder

stay-logged-in=OxGHYYPqh7mnTvZm8vNfIIGt5vKnwaclr6Kj9xZ%2b3rQ%3d

3、加密数据发到Decoder解码,先进行URL解码,看到等于号就有可能是base64编码,那就进行base64解码

OxGHYYPqh7mnTvZm8vNfIIGt5vKnwaclr6Kj9xZ%2b3rQ%3d

解码后看着文本格式base64编码是一堆乱码

现在知道一堆加密的乱码,但是不知道加密机制

看了下这个网站,发现是一个博客类的网站,那就去文章下面发表评论,看能不能找到它的加密解密的功能,也就是说能不能找到这个加密预言机,找到这个网站提供的加密功能

怎么去找到这个加密功能呢?

那就使用 Burp 的手动测试工具研究相应的请求和响应。注意,保持登录状态的 Cookie 现在已经是加密的

4、随便进入一篇博客发表评论

填写的是正确的邮件地址格式

然后跳转到“Thank you for your comment!”页面

找到发表评论的相关数据包

POST /post/comment  没有任何异常

GET /post?postId=2 没有任何异常

上面就是发表了一个正常评论的流程

那么在应用程序交互的时候,可以尝试下填写邮件地址的文本框,填写一个错误的邮件地址格式看下

demo.g.cn

跳转页面:显示无效的邮件地址

尝试使用无效的电子邮件地址提交评论时,收到了一个纯文本错误:

Invalid email address: demo.g.cn

再去看POST /post/comment数据包:

与之前相比多了一个通知的cookie:

notification:通知的意思

​
​
Set-Cookie: notification=RX%2f1BWuLCVtxR3xz7bfTYHXnMnJwEf42IDYkQI9Y9awOuKovbVumwRXzgVAGYWbu; 

发现这是经过加密的,那这里就是一个加密的功能

再去看GET /post?postId=7数据包

这里多了一个:也是收到了通知的cookie

notification=RX%2f1BWuLCVtxR3xz7bfTYHXnMnJwEf42IDYkQI9Y9awOuKovbVumwRXzgVAGYWbu;

将找到的POST /post/comment和GET /post?postId=7数据包(包含通知 Cookie),都发往repeater:

改变写名字:encrypt(加密) decrypt(解密)

在 Repeater 中,可以看到可以使用 POST 请求的 email 参数来加密任意数据

也就是使用stay-logged-in的cookie给邮件 email 参数进行加密

stay-logged-in=rop1KXZ4pG9ojDkq5AGwzkjk2wOTqDwWhnVbf1CWGGg%3d;

使用notification的cookie进行解密

notification=RX%2f1BWuLCVtxR3xz7bfTYHu%2fKoSJRjetAp%2bzPGI6RMI%3d;

5、知道了加密和解密怎么发生的

在Decrypt(解密)请求中,复制您的保持登录状态 cookie 并将其粘贴到通知 cookie 中

原来的:
Cookie: notification=RX%2f1BWuLCVtxR3xz7bfTYHu%2fKoSJRjetAp%2bzPGI6RMI%3d; 
stay-logged-in=rop1KXZ4pG9ojDkq5AGwzkjk2wOTqDwWhnVbf1CWGGg%3d; session=ZUstJsGnrZbGikGyxeNz6qygHzrLnulT
​
替换之后的:
Cookie: 
notification=rop1KXZ4pG9ojDkq5AGwzkjk2wOTqDwWhnVbf1CWGGg%3d; 
stay-logged-in=rop1KXZ4pG9ojDkq5AGwzkjk2wOTqDwWhnVbf1CWGGg%3d; session=ZUstJsGnrZbGikGyxeNz6qygHzrLnulT
​
就是说现在notification和stay-logged-in内容一样

解密后的:wiener:1755084637643(时间戳) 这个就是stay-logged-in的cookie加密后的内容

也知道了解密后的数据,就是说cookie的格式是采用 username:timestamp

那么直接来伪造用户凭据:administrator:1755084637643

因为尝试的是无效的邮件位置出现的异常所以:

在 Repeater (Encrypt 选项卡)中,,将email 的值更改为 administrator:1755084637643并发送请求

email=administrator:1755084637643

将加密得到的:

Set-Cookie: notification=RX%2f1BWuLCVtxR3xz7bfTYCRhqeseEwbsDwT4YNoESfT4llfhIMVH7%2bYzpZa4VZSSOrOB1xOFa%2bKY0fP5obdYdw%3d%3d;

复制到:

notification=RX%2f1BWuLCVtxR3xz7bfTYCRhqeseEwbsDwT4YNoESfT4llfhIMVH7%2bYzpZa4VZSSOrOB1xOFa%2bKY0fP5obdYdw%3d%3d;

进行解密得到:Invalid email address: administrator:1755084637643

但是这里多了个前缀:Invalid email address: 这有23位

因为现在计算机一般都是32位为一组

所以在前面加9个无效字符凑成32,到时候编辑的时候就可以把这32个给删除掉,剩下的就得到密文: administrator:1755084637643

email=xxxxxxxxxadministrator:1755084637643

得到密文:

Set-Cookie: notification=RX%2f1BWuLCVtxR3xz7bfTYMu7mo2m9Zf3i8cnD%2bgUFtrf%2fu3x9nu9qTYkitw86WXFlo6b48gjdbV8fWE5hh1h3w%3d%3d

然后把得到的密文复制到Decoder那边进行解码后,去掉多余的前缀Invalid email address:

再进行重新编码

重新编码得到:

%33%2f%37%74%38%66%5a%37%76%61%6b%32%4a%49%72%63%50%4f%6c%6c%78%5a%61%4f%6d%2b%50%49%49%33%57%31%66%48%31%68%4f%59%59%64%59%64%38%3d

接下来记得是回到首页面****点击home,然后抓取这个数据包

在路径中直接访问 /admin,去到管理面板

这句话插入到stay-logged-in里面:

%33%2f%37%74%38%66%5a%37%76%61%6b%32%4a%49%72%63%50%4f%6c%6c%78%5a%61%4f%6d%2b%50%49%49%33%57%31%66%48%31%68%4f%59%59%64%59%64%38%3d

放包之后,刷新页面,就到了管理界面

如图靶场过关:

本实验中简化的漏洞利用逻辑:

──── 0人觉得很赞 ────
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回