[HCTF 2018]admin

这题虽然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

发表评论

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