添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

引言

这几天有个 GACTF,本来这几天有点事情没打算来看的,结果队里师傅突然扔来个代码,还以为是帮 debug,后来才发现是个 CTF 题目。。 (坏耶

于是随意来看看题目了,就佛系做了几个题嘤嘤嘤,顺便来学点东西就是了。

Misc

crymisc

8.25 is Chinese Valentine’s Day.Yesterday my brother told me he was refused by a beautiful girl.He was sooooooooooooo sad and bursted into tears.
链接:
https://pan.baidu.com/s/1EZzhnAa5Q4OD8y-YEAcjzQ
提取码:866h
https://drive.google.com/drive/folders/1gDfMBrtqwvi7f9BaB1ixjogeLDascjED?usp=sharing

下载下来一个 crymisc.docx ,一看打不开果然改成 zip,发现有伪加密。

1.txt 内容为:

I'm going to tell her how i feel.DO YOU WANT TO KNOW WHAT I TOLD HER?

另外是一张图片,发现结尾有东西,至少有个压缩包。

提取出来。

SSB3YXMgcmVqZWN0ZWQuLi4uLi5USElTIElTIFRIRSBQQVNTV09SRDpJIFdhbm5hIENyeXl5ISEh

首先对上面这段 base64,得到压缩包密码。

I was rejected......THIS IS THE PASSWORD:I Wanna Cryyy!!!

压缩包需要先补上文件头,即变成 504B0304…

拿密码去解压,文件内容如下。

🔭💙🐰✊🌻🐧💙😘🌻🍶💐🍌🏊🍩🚁🏊👹🐶😀🐶😀😘👹💙🍂💇😀😀😩🌻🍟👂🍶💐🍌🏊🍩👆🏠🙇🍂🍂👼😱🚔🐶👉✊😱🏠🙇🍂🍂👼😱🚊😧💨💙💕
That is what i told her↑↑↑

什么,您就是抽象带师?

想起来在 BJD3rd 里 TaQini 师傅就出过一题,就是 Manual 这题的一部分

参考 那题的思路 ,盲猜就是 Codemoji 了!根据提示key应该就是个哭的表情吧,就😭这个了。

P.S.: codemoji GitHub repo (Mozilla Public License 2.0)

好耶,咱也部署一个!

就在这里了! -> https://codemoji.miaotony.xyz

欢迎来玩呀(

于是构造 payload 如下:

{"message":"🔭💙🐰✊🌻🐧💙😘🌻🍶💐🍌🏊🍩🚁🏊👹🐶😀🐶😀😘👹💙🍂💇😀😀😩🌻🍟👂🍶💐🍌🏊🍩👆🏠🙇🍂🍂👼😱🚔🐶👉✊😱🏠🙇🍂🍂👼😱🚊😧💨💙💕","key":"😭"}

base64encode + URLencode:

eyJtZXNzYWdlIjoi8J%2BUrfCfkpnwn5Cw4pyK8J%2BMu%2FCfkKfwn5KZ8J%2BYmPCfjLvwn4228J%2BSkPCfjYzwn4%2BK8J%2BNqfCfmoHwn4%2BK8J%2BRufCfkLbwn5iA8J%2BQtvCfmIDwn5iY8J%2BRufCfkpnwn42C8J%2BSh%2FCfmIDwn5iA8J%2BYqfCfjLvwn42f8J%2BRgvCfjbbwn5KQ8J%2BNjPCfj4rwn42p8J%2BRhvCfj6Dwn5mH8J%2BNgvCfjYLwn5G88J%2BYsfCfmpTwn5C28J%2BRieKcivCfmLHwn4%2Bg8J%2BZh%2FCfjYLwn42C8J%2BRvPCfmLHwn5qK8J%2BYp%2FCfkqjwn5KZ8J%2BSlSIsImtleSI6IvCfmK0ifQ%3D%3D

而后丢去解密。

https://codemoji.miaotony.xyz/share.html?data=eyJtZXNzYWdlIjoi8J%2BUrfCfkpnwn5Cw4pyK8J%2BMu%2FCfkKfwn5KZ8J%2BYmPCfjLvwn4228J%2BSkPCfjYzwn4%2BK8J%2BNqfCfmoHwn4%2BK8J%2BRufCfkLbwn5iA8J%2BQtvCfmIDwn5iY8J%2BRufCfkpnwn42C8J%2BSh%2FCfmIDwn5iA8J%2BYqfCfjLvwn42f8J%2BRgvCfjbbwn5KQ8J%2BNjPCfj4rwn42p8J%2BRhvCfj6Dwn5mH8J%2BNgvCfjYLwn5G88J%2BYsfCfmpTwn5C28J%2BRieKcivCfmLHwn4%2Bg8J%2BZh%2FCfjYLwn42C8J%2BRvPCfmLHwn5qK8J%2BYp%2FCfkqjwn5KZ8J%2BSlSIsImtleSI6IvCfmK0ifQ%3D%3D

得到flag。

WelcometoGACTF!ThisisthepasswordGACTF{H4ppy_Mi5c_H4ppy_L1fe}

Web

simpleflask

题目每10分钟重启,如遇到无法连接,请稍等片刻10秒左右会全部重启完毕
This topic restart every 10 minitues. If you can’t connect, please wait for a while and the restart will be completed. Do not panic

China:
124.70.153.63 80-89
Overseas:
149.28.80.82 80-89

POST 访问,提示 request.form["name"]

带上参数 name ,尝试 SSTI ,发现有戏。

某次利用报错看到了部分源码。

除了过滤了 flag ,在这个 check 函数里还过滤了许多,尝试发现,包括但不限于 os, system, pwd, popen, eval, import, request, mro, ' , % , + , , , (空格), | , \x 等等关键字或符号都被滤掉了……

单引号不行,但双引号可行,发现利用 "op""en" 的形式拼接字符串可行。

本来想找 PIN 的,但试了试所需的信息整不来(好菜啊),可以参考 Flask debug pin安全问题 这一篇文章。

于是又整了半天绕过……

首先拿到 object

一顿操作拿到 __builtins__

发现 chr 之类的函数并没有,然而并不能用 {% xxx %} 来设置就很难受。

本来想用 os.popen 这一模块来执行命令读取信息的,但不知道为啥 read() 就被拦了。

最后问了队里大师傅,发现换成 open 就完事了,太草了!

Payload:

name={{[].__class__.__bases__[0].__subclasses__()[127].__init__.__globals__.__builtins__["op""en"]("/fl""ag").read()}}

GACTF{fac9165b6a2b5ac8bd3b99fad0619366}

后面再整理一下 flask 的 SSTI 常用 payload 及绕过技巧吧(

大概率会咕咕咕(

EZFLASK

flask&flask

China:
124.70.206.91 10000-10009
Overseas:
149.28.226.175 10000-10009

# -*- coding: utf-8 -*-
from flask import Flask, request
import requests
from waf import *
import time
app = Flask(__name__)
@app.route('/ctfhint')
def ctf():
    hint =xxxx # hints
    trick = xxxx # trick
    return trick
@app.route('/')
def index():
    # app.txt
@app.route('/eval', methods=["POST"])
def my_eval():
    # post eval
@app.route(xxxxxx, methods=["POST"]) # Secret
def admin():
    # admin requests
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8080)

他这个 flask 服务器为 Werkzeug/1.0.1 Python/2.7.18。

访问 /ctfhint ,得到

too young too simple

POST /eval

post eval

没找到哪里能用?

admin 没找到 route 在哪,并不知道怎么用 emmm。

(等复现嘤嘤嘤

大概就这么多,开学了喵呜~

(溜了溜了