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函数会将unicode字符ᴬ转换成A,
而A在调用一次nodeprep.prepare函数会把A转换成a
所以所以当我们用ᴬdmin注册的话,后台代码调用一次nodeprep.prepare函数,把用户名转换成Admin,我们用ᴬdmin进行登录,可以看到index页面的username变成了Admin,证实了我们的猜想,接下来我们就想办法让服务器再调用一次nodeprep.prepare函数即可。
改密码函数代码里,也用到了nodeprep.prepare函数,也就是说,我们在这里改密码的话,先会把username改为admin,从而改掉admin的密码。