「配枪朱丽叶。」

RootのCTF学习笔记。

HCTF 2018-admin(unicode 欺骗)

每天练练BUU,天天学到的新姿势.JPG
查看源码发现一行注释:

考虑到应该是登录以admin登录。先以test/test注册,登录康康,在/change这里发现题目给了一处源码:

不管是login、register还是change页面,只要是关于session['name']的操作,
都先用了strlower函数将name转成小写,而没有用python自带的转小写函数lower。

strlower()函数

def strlower(username):
    username = nodeprep.prepare(username)
    return username

跟进nodeprep.prepare函数获得新姿势

nodeprep.prepare函数会将unicode字符ᴬ转换成A,
而A在调用一次nodeprep.prepare函数会把A转换成a

https://panda1g1.github.io/images/865.png

所以所以当我们用ᴬdmin注册的话,后台代码调用一次nodeprep.prepare函数,把用户名转换成Admin,我们用ᴬdmin进行登录,可以看到index页面的username变成了Admin,证实了我们的猜想,接下来我们就想办法让服务器再调用一次nodeprep.prepare函数即可。

改密码函数代码里,也用到了nodeprep.prepare函数,也就是说,我们在这里改密码的话,先会把username改为admin,从而改掉admin的密码。

改掉了密码重新登录即可。