当前位置: 首页 > news >正文

渗透学习-CTF篇-web-BUUCTF

文章目录

  • 前言
  • 一、[WesternCTF2018]shrine


前言

随着学习的不断深入,为了防止自己忘记之前所学的内容,于是我决定再不断的向下学习的同时做一些ctf的题来唤醒自己的记忆!!


一、[WesternCTF2018]shrine

这一关主要是SSTI的内容,再进行打靶场前,先让我们来了解一下什么是SSTI。

基础知识
SSTI 就是服务器端模板注入(Server-Side Template Injection)。漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。

靶场攻打
再大致了解了后,我们启动靶场:
在这里插入图片描述
我们发现一打开靶场就有这一串的代码信息,我们先来分析这部分的代码具体有啥内容:
在这里插入图片描述

  1. 我们看到第一部分这里有个函数flask.render_template_string , 这个函数就是一个模板的调用函数。
    当我们在ctf中看到这个函数时,就可以联想到这很有可能是一道SSTI的题。
  2. 这里会对我们传入的参数进行过滤,也就是说会将传入的参数中的()进行过滤掉,防止我们调用特殊变量或者python内置的函数等等。
  3. 4 这里代码将__name__这个系统变量传入到对应的app变量中,再调用app变量里的config参数调出FLAG的值。

在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。在本关中就有一个config 对象。

且本关由于对输入的参数进行了过滤() 因此,我们可以利用python中的url_for()函数是用于构建操作指定函数的URL。(因为这个函数可以省略(),所以可用)

在分析了传入的pyload的构成后,我们还需要看看在哪个位置处存在注入点:
在这里插入图片描述
在代码中的这一部分,有一个app.route() 这里就是指对应的注入的路径!!!

然后,开始注入:

  1. 那么我们构造如下payload:
/shrine/{{url_for.__globals__}}

效果如下:
在这里插入图片描述
globals 会列出当前的所有的变量。 但是根据题目,我们需要找到当前使用的变量,也就是flask的变量。(这里已经在图中标识了)

  1. 然后,读取当前命名空间中的对应变量信息:当前在flask模板下里的config
/shrine/{{url_for.__globals__['current_app'].config}}

在这里插入图片描述
此时,就可以发现该flag了!!! 但是呢,我们还可以用如下payload进行读取:

/shrine/{{url_for.__globals__['current_app'].config['FLAG']}}

在这里插入图片描述

至此,大功告成!!!


相关文章:

  • 更改网站模板/seo 培训教程
  • 龙口做网站es158/seo服务指什么意思
  • 专做苹果二手手机的网站/高端网站设计公司
  • fsdb DUMP的操作记录
  • linux(debian系列)配置seetaface6
  • 计算机网络 —— TCP篇 三次握手与四次挥手
  • aws cloudformation 在堆栈中使用 waitcondition 协调资源创建和相关操作
  • Memcache学习总结
  • 3、Ubuntu20Server安装远程连接
  • 2022年海南省职业院校技能大赛“网络安全”比赛任务书
  • Python|每日一练|非负数字转字符|非负整数求乘积|按位对齐|竖式乘法计算| 大数计算| reversed 函数:字符串相乘
  • 生信技能1 - windows测序仪电脑文件自动备份至Linux服务器
  • Java泛型全解析
  • Git系列:入门必备指令详解
  • vue3学习笔记之样式穿透(:deep)及CSS 新特性(:soltted、:gloabl、v-bind、mouldCSS)