https://portswigger.net/业务web-security/logic-flaws 学习地址
在线计算字符串长度-开发者工具网 线上字符串长度计算;
在线时间戳转换工具 时间戳在线换算
Base64笔记 - 阮一峰的网络日志 base64讲解
先说问题:
1、希望懂加密算法的朋友,帮忙留言,文章中的问题;base64 解码后,hex 处理,留下的字符数应该是一样的,为什么长度却不一样??
本题难点是对加密原理的理解,和对base64 解码内容修改;
解题思路:
1、登录用户时,使用题解给的账号密码登录,且勾选保持登录;
2、在保持登录的情况下,对文章进行评价;在提交的时候,如果邮件的格式不对,会产生 /post?postId=1 响应,其中
提示信息,显示如下:可见 显示内容是: Invalid email address: 邮件提交内容; 通过观察知道 stay-logged-in 和 notification 加密方式一致;
3、通过 使用 burp 中继功能 ,将 stay-logged-in 的内容,替换到notification ,得到解析内容:
wiener:1598530205184 这样一个内容; 1598530205184 这个是时间戳(时间戳生成在线工具链接在上面)
4、现在构建管理员的 stay-logged-in :administrator:时间戳 ; 利用邮件报错 对构建内容生成秘钥字符串;
Invalid email address: administrator:时间戳 ---解析后是这个内容;
5、对生成的秘钥字符串,修改去掉“Invalid email address: ” 这个内容----注意冒号后有空格;字符长度为23
对生成的秘钥字符串 url和base64解码---删除32个字节,重新编码提交
注:下面仅是例子,是成功得到的例子:administrator:1656740167
共24个字符
6、提交后报如下错误:要求base64 编码内容长度必须是16 的倍数!----即上图第3行内容,是16倍数;
7、构造如下字符串: xxxxxxxxxadministrator:your-timestamp,开头加了9个字符;
注:我也不知道为啥加的是9个,需要对加密原理了解;
使用该字符串,通过邮件错误,获取到加密字符串;
8、url和base64 解密 新获取到的加密字符串----删除 开头32 (23+9=32)个字符,正好如上图的成功图--是16的倍数;
然后 base64 和url 加密,测试一下是否是想要的格式: administrator:时间戳
9、获取到符合格式的加密字符后,从历史记录中 发送 get / 请求到中继器(repeater)里, 删除
session cookie 完全,并替换 stay-logged-in cookie 与您自制的 cookie 的密文。 发送请求。 观察您现在以管理员身份登录并可以访问管理面板。
10、 得到管理员界面,删除指定用户,完成实验!