[HCTF 2018]admin

/ 0评 / 0

这题虽然BUU一分,但是知识点居多。拿出来单独总结一下(700多个师傅都做出来了TTTTQL)
这题有三种解法

  1. flask session 伪造
  2. unicode欺骗
  3. 条件竞争

其中最简单的不需要太多步骤的即第二种,unicode欺骗,我们来详细解释一下这题怎样使用
打开靶机,题目只有登录和注册吗,在源码中发现,<!-- you are not admin -->,我们可以理解为登录账户为admin,即可获得flag
在修改密码界面还发现了<!-- https://github.com/woadsl1234/hctf_flask/ -->
下载下来看看

@app.route('/code')
def get_code():
@app.route('/index')
def index():
@app.route('/register', methods = ['GET', 'POST'])
def register():
@app.route('/login', methods = ['GET', 'POST'])
def login():
@app.route('/logout')
def logout():
@app.route('/change', methods = ['GET', 'POST'])
def change():
@app.route('/edit', methods = ['GET', 'POST'])
def edit():

1我们可以发现她只有简单的几个功能,
在观察源码后,我们发现,在修改密码的时候先将name转成小写,跟进一下register、login
发现都用strlower()来转小写,但是python中已经自带转小写函数lower(),跟进
之后利用就清晰了
假如我们注册ᴬᴰᴹᴵᴺ用户,然后在用ᴬᴰᴹᴵᴺ用户登录,因为在login函数里使用了一次nodeprep.prepare函数,因此我们登录上去看到的用户名为ADMIN,此时我们再修改密码,又调用了一次nodeprep.prepare函数将name转换为admin,然后我们就可以改掉admin的密码,最后利用admin账号登录即可拿到flag。


HCTF 2018 ADMIN

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注