zoukankan      html  css  js  c++  java
  • 攻防世界-web-Confusion1(python模板注入SSTI、沙箱逃逸)

    题目来源:XCTF 4th-QCTF-2018
    题目描述:某天,Bob说:PHP是最好的语言,但是Alice不赞同。所以Alice编写了这个网站证明。在她还没有写完的时候,我发现其存在问题。(请不要使用扫描器)

    进入界面

    首页是一张图片,蛇缠住了大象,猜测此系统使用了php+python,并且是Python代码问题(php的标志是大象,Python的标志是蛇)。

    进入登录和注册页面均报404,不过在源码错误信息中提示了flag的位置。

    然后就没有其他信息了。

    猜测本题存在Python SSTI漏洞,验证一下,在url后面添加{{1+1}},回车显示如下

    界面返回2,我们输入的1+1被执行了,说明服务器执行了{{}}里面这一段代码,存在SSTI漏洞。

    猜测这里使用的应该是 Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 。

    所以本题的思路就是,利用SSTI读取flag文件。

    尝试使用经典payload直接读取flag

    ''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read()

    报错

    说明系统进行了过滤。

    经过尝试,发现系统过滤了class、 subclasses、 read等关键方法。

    但是并未过滤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

    得到flag

    SSTI学习:https://www.guildhab.top/?p=1248

    参考:https://blog.csdn.net/qq_41954384/article/details/103830832

  • 相关阅读:
    Linux的Service/Daemon你真的懂了吗?
    linux下关于svn提交的时候强制写注释
    protobuf C++ 使用示例
    du 使用详解 linux查看目录大小 linux统计目录大小并排序 查看目录下所有一级子目录文件夹大小 du -h --max-depth=1 |grep [
    USVN
    关于分布式系统的数据一致性问题
    Linux环境下SVN服务器端的安装与配置
    linux下svn服务器安装配置与启动
    HTML5 直播协议之 WebSocket 和 MSE
    CDN的实现原理
  • 原文地址:https://www.cnblogs.com/zhengna/p/13964561.html
Copyright © 2011-2022 走看看