当前位置:   article > 正文

Bugku -----Web-----全题目解析 (一) 超详细步骤_bugku里的web篇的题怎么做

bugku里的web篇的题怎么做

目录

1.Simple_SSTI_1

2.Simple_SSTI_2

3.滑稽

4.计算器

5.矛盾

————————————————————分割线————————————————————

1.Simple_SSTI_1

SSTI是服务器端模板注入 

F12查看下源码 

Flask 中,双大括号 {{ }} 用于表示动态内容的占位符,该内容将由模板引擎渲染。这被称为模板语法。 当你在 Flask 模板中使用双大括号把变量或表达式括起来时,它告诉模板引擎去计算该表达式并将其值插入到渲染后的 HTML 文档中。 例如,你提供的代码 flag={{config.SECRET_KEY}} 将会在 HTML 文档中的该位置渲染 Flask 应用程序的秘密密钥。

在Flask项目的配置中都是通过app.config对象来进行配置的。比如要配置一个项目的SECRET_KEY,可以使用app.config['SECRET_KEY'] = "xxx"来进行设置。

所以综上所诉 我们直接尝试去在url试着访问 config 

注意语法格式 ?flag={{config}}

也可用查询语法?flag={{config.SECRET_KEY}}

2.Simple_SSTI_2

打开题目让传入一个flag参数 我们试着看看config文件里

但是好像没有有用的东西 我们试着用模板注入看看怎么个事

?flag={{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}

使用了模板引擎的功能来访问Python的config对象,通过链式属性访问(__class____init____globals__)来获取对Python标准库的os模块的访问权。一旦获得对os模块的访问,攻击者就可以通过popen方法执行任意的系统命令。

_class_:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。

__init__ :初始化类,返回的类型是function。

__globals__[]:使用方式是函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。

os.popen()方法:用于从一个命令打开一个管道。

open() 方法:用于打开一个文件,并返回文件对象。

结果发现app 这个文件 好像不是常见的内部文件名字 我们试着去访问看看 发现了flag文件

cat一下获取flag

3.Flask_FileUpload

Flask是一个轻量级的‌Python ‌Web框架,主要用于构建和维护Web应用程序。它提供了一组工具和功能,使开发者能够快速轻松地创建动态Web应用程序

一个提交框 查看下网页源码 提示 说是要上传个文件 并且固定了上传文件类型 需要时jpg和png的图片

于是写一段python的脚本文件 并且将后缀名改成jpg

  1. import os: 这一行导入了Python的内置模块osos模块提供了许多与操作系统交互的功能,比如读写文件、更改和识别路径等。

  2. os.system('ls / '): 这一行使用os模块中的system函数来执行一个外部命令。这里执行的是ls /命令。在Unix和类Unix系统中,ls是一个用于列出目录内容的命令,而/代表系统的根目录。因此,ls /会列出根目录下的所有文件和子目录。

上传成功后 页面没有什么特别的回显 我们看一下源代码 发现了我们要找的flag

 首先对于这个有flask构建的web文件上传程序,其中包含了一个文件上传的端点 /uploader。当客户端通过 POST 请求发送文件到 /uploader 时,服务器会检查是否有文件被上传,然后将文件保存到指定的上传文件夹中。在文件保存后,os.system(' ls /') 这行代码被执行,它会在服务器上执行 ls / 命令,列出根目录下的所有文件和文件夹。

所以我只需要利用这个漏洞再去修改下我们的python代码重新上传一下我们的文件即可

  1. import os
  2. os.system('cat /flag ')

4.滑稽

进入环境 右键查看源代码

5.计算器

 让输入验证 但发现只能数一个字 打开源代码发现有输入长度限制是1  

将源代码中限制从1改一下 再次输入 正确验证即可获得flag

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号