前言
今天这道题完全没接触过,算是学到两种新的解题方法,挺开心的。没有思路,只能按照大佬的wp来记录了。
1、注册admin,但是显示已注册,不能注册,感觉这里应该有大作用。
2、那就随便注册一个。看源码,说不是管理员。
3、又找了其他功能,没发现有啥。4、但是改密码的时候,发现一个链接。
5、访问
6、发现admin,但是密码加密了,没得用。
7、不会了,看wp吧。
解法一:unicode欺骗
1、参考文章
Unicode欺骗
2、nodeprep.prepare()漏洞原理
使用nodeprep.prepare()函数之后,如果先使用unicode编码的字符,如 ᴬ ,使用该函数之后,会先改为大写的A,再使用一次就会变成小写的a。
3、验证。但是报错了,不知道如何解决。
4、实战
①、 /app/routes.py
②、注册一个账户ᴬᴰmin,按照源码nodeprep.prepare()处理,先转换成小写即ADmin,数据库没有该用户名,绕过admin已注册。此时记录在数据库的是ADmin。
③、用 ᴬᴰmin 登录,经过nodeprep.prepare()处理,此时ᴬᴰmin变成ADmin,数据库中有该用户名和密码,登录成功。此时session[“name”]=ADmin。
④、login时session[“name”]=ADmin,经过change函数的nodeprep.prepare()处理,Admin转换成admin,此时修改的是admin的密码,达到目的。
⑤、退出登录,以admin和刚刚修改的密码登录,即可得到flag。
⑥、得到flag