拿到题目,首先观察页面有没有提示,经过观察页面和生成的图片,发现并没有可疑之处。那么该题考察的点应该不在于图片方面。那么按住F12,查看源代码,第一个页面并无可以之处。但是第二个页面中,发现可疑链接 download/file=xxxxx.jpg,此时以其为切入点进行测试:
直接输入flag作为参数查看,发现并未获得flag值
那么随便输入一张不存在的图片,查看是否能够获得更多信息,可以看到页面使用了app.py文件,此时我们可以考虑将其下载到本地:
这里我直接复制文件路径,发现报错路径不存在。观察报错路径发现页面使用了路径的拼接。
那么我改用相对路径进行测试:
看到文件已经被成功下载:
打开文件,并分析源代码:
可以看到针对不同的输入路径,app.py文件调用了不同的函数。
如果路径为 “/” ,使用index函数
如果路径为"/getwifi",使用getwifi()函数
...
通过分析代码得知,我们想要获得flag值,就需要运行getflag()函数,那么此时我们需要将路径设置为"secret_path_U_never_know"
但是直接输入该路径不会输出flag值
这是因为getflag函数中有一个判断:
if session['isadmin']:
return jsonify({"msg":flag})
这句话要求我们的session["isadmin"]值为True,那么我们可以考虑使用bp抓包并修改session的值:
为了构造session的值,我们使用了工具 flask-session-cookie-manager-master(该工具在git上可以直接下载) session生成过程中的秘钥在app.py文件中可以看到:
那么我们的session可以直接以'tanji_is_A_boy_Yooooooooooooooooooooo!' 为秘钥,以"{'isadmin': True}"为字典进行构造:
在命令提示行中输入:
python flask_session_cookie_manager3.py encode -s "tanji_is_A_boy_Yooooooooooooooooooooo!" -t "{'isadmin': True}"
则可以生成session的值:eyJpc2FkbWluIjp0cnVlfQ.ZmufEg.vF6jyYAmenDHHQ6L9EyqeaYZqTM
然后使用生成的session值构造Cookie,然后在发包,则可以看到response中返回了flag的值:
"ctfshow{aa30a3e1-f93e-4c60-9bfa-b3285e879d6b}"
(Content是在发包完成后自动生成的,我只添加了一行信息:
Cookie:session=eyJpc2FkbWluIjp0cnVlfQ.ZmufEg.vF6jyYAmenDHHQ6L9EyqeaYZqTM
)