AWD神器—watchbird后台rce挖掘

news2025/2/28 18:20:46

简介

在传统的AWD攻防中,Waf扮演着重要的角色,Watchbird作为一款专门为AWD而生的PHP防火墙,具有部署简单,功能强大等特点,一出世便受到了广大CTFer的喜爱,目前在GitHub上已有600多star。本篇则详细介绍如果拿到watchbird后台,怎么利用watchbird后台进行rce。

项目部署

版本:除了最新版(两周前发布的新版本中此漏洞已修复)
具体部署细节可参考官方文档
Watchbird项目地址:https://github.com/leohearts/awd-watchbird

漏洞挖掘

获取后台账户密码

使用过watchbird的师傅应该都有所了解,watchbird的操作都是有鉴权的

图片

没有拿到用户的cookie或者密码,就谈不上后台rce了
这里只能通过爆破获取密码
可能很多人有疑问,watchbird不是有防DDOS,爆破不直接给封了吗?

图片

就像上面这样,短时间频繁访问会直接返回一个watchbird的logo,不会正常返回网站内容
watchbird确实是有这个功能,如果爆破目标网站就会被封,但是爆破watchbird密码就不会,因为,只是单纯验证watchbird密码的话,代码根本就走不到防DDOS这一步。所以,师傅们放心爆破吧,从比赛开始一直爆破到比赛结束都没问题!

图片

上面的示例中可以看到,当密码为123456时,返回长度不一样,说明爆破成功了
当然,还有一种方法就是打xss钓鱼,这里就不过多阐述具体细节了,我们直接入正题

修改配置的方法

进入后台后是这样的页面

图片

watchbird算是一个rasp(应用运行时自我保护)的waf,php程序是这样的。
也就是说,每次访问网站的时候,代码都是从头到尾重新运行一次,watchbird又没用到数据库,它是怎么存储用户信息和配置的呢?
开发常用方法,就是用序列化来保存用户配置
代码开头就定义了配置文件的路径
$config_path='/tmp/watchbird/watchbird.conf'

图片

图片

打开看一下,都是类序列化后的内容,这个类就是下面要讲的

图片

watchbird定义了一个configmanager类用来实现有关配置的一切功能,暂且叫它配置类

图片

图片

这个类的成员对应waf所有功能的开关状态,文件路径,过滤规则等等
同样这个类还有一个方法

图片

change方法接受一个$key和一个$val
接着把当前配置类的$key赋值为$val
最后用file_put_contents函数将当前配置类进行序列化后写入到配置文件watchbird.conf中,由此实现用户配置更新
但问题就在这里,他没有对这个$key和$val进行校验
所以$key和$val可以任意写入到配置文件中,我们可以更改原有配置,也可以新添配置
而且,调用这个change方法也很简单

图片

只需要验证用户身份,就可以直接调用。

修改密码(示例)

举个简单的例子,watchbird没有提供修改密码这一功能,总有人问密码忘了怎么修改,下面就演示一下
保存用户密码的是配置类中的$password_sha1属性

图片

它的初始值是unset
当用户第一次登录时

图片

它会先将前端ui输出出来,然后将配置类的password_sha1赋值给ui类的passwdhash,接着调用了ui的show方法

图片

在show方法中,他会判断这个passwdhash的值是不是unset,如果是的话,就会调用配置类的change方法初始化密码。
因此,只需要传参
?watchbird=change&key=password_sha1&value=unset

图片

password_sha1就被更改为unset了
删掉cookie后刷新一下

图片

就再次回到了初始化界面。
当然也可以到watchbird.conf中直接去改序列化后的数据

图片

这样就实现了用户密码修改

修改配置文件路径

但仅仅这样任意修改配置文件还不足以拿到shell
重点在文件最初运行时的操作

图片

当程序运行时
首先会检查配置文件路径是否存在,不存在则创建(这对应首次访问的情况)
接着会检查配置文件是否存在,不存在则将配置类序列化后写入配置文件中(同上)
然后反序列化读取配置,赋值给config变量
重点就在下面的foreach
这个foreach获取了config中的所有属性,并变成key=>val的形式
用了两个$,将config中的属性放到了全局中
前面说了,配置我们是可以随意更改的
如果我们在之前的操作中新增了一个config_path属性并写入到配置文件中
那么当代码走到这里的时候,从配置文件中读取的config_path会被写入到全局中
这样就覆盖了watchbird开头定义的congfig_path的值

图片

这样一来,配置文件的路径和文件格式就被改变了
如果我们将他改为/var/www/html/shell.php
那么接下来用户的操作中,如果需要更改配置,用户的配置信息会被写入到/var/www/html/shell.php中

图片

而根据代码流程很容易看到,接下来就可以直接调用change方法来实现配置文件重新写入
我们来实现一下

图片

最初网站根目录下是没有其他文件的

图片

接着我们调用change方法添加一个config_path配置,并将他的值设为网站的根目录
这里要执行两次
第一次,是将config_path写入到/tmp/watchbird/watchbird.conf中
第二次,就会读取配置,覆盖config_path变量,将配置写入到shell.php中了

图片

查看根目录,果然他出现了
访问shell.php

图片

没问题,很nice

写入木马

因为配置我们可以随便写入,我们直接将配置名写为php程序

图片

像这样,我写入了一个php程序用于输出当前目录下的文件
查看一下shell.php文件

图片

写入成功
访问shell.php

图片

执行成功
到这一步ctfer都已经轻车熟路了,后面的环节就不再多说了,尽情写马吧!

总结

闲来无事,偶然翻阅源码发现的小tips,因为省事自己用本机windows的phpstudy搭的,真实awd比赛一般都是linux环境,所以以上仅供参考!欢迎师傅们多多交流!

更多网络安全优质免费学习资料与干货教程加v

送渗透工具、技术文档、书籍,面试题、视频(基础到进阶。环境搭建,HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等)、应急响应笔记、学习路线。

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

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

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

相关文章

传输层UDP协议

传输层UDP协议 1. 再谈端口号2. UDP协议1.1 UDP协议字段1.2 将报头和数据进行分离 3. UDP的特点 1. 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在 TCP/IP 协议中, 用 “源 IP”, “源端口号”, “目的 IP”, “目的端口号”, “协议号” 这样一个五元…

AI大模型评测方法总结!

大语言模型评测对应用和后续发展至关重要,其评测范式包括经典和新型两种。经典评测范式涵盖自然语言理解和生成任务,本文介绍了流行的经典评测基准及新型评测范式下的代表性基准和实例,并总结了现有评测的不足。随后,文章提出了全…

不入耳耳机和入耳耳机哪个好?四款不入耳蓝牙耳机推荐指南

那当然是不入耳耳机好啦,那先讲讲入耳和不入耳的区别: 佩戴舒适度: 入耳蓝牙耳机是直接插入耳道,所以同时也会堵塞耳道长期积攒耳垢、造成耳道不适。 不入耳蓝牙耳机则通常设计为耳挂式或耳廓式,挂在耳朵外部能保持…

antd pro实现后台管理系统的建立(一)

一、初始化项目 1、全局安装pro-cli初始化脚手架 # 使用 npm或者cnpm或tyarn npm i ant-design/pro-cli -g这里建议使用npm或者tyarn,cnpm和npm部分不兼容,创建项目时会报部分依赖缺失的问题 2、创建项目pro create myapp pro create myappsimple 是基…

本地部署 Llama 3.1:Ollama、OpenWeb UI 和 Spring AI 的综合指南

、 本文介绍如何使用 Ollama 在本地部署 Llama 3.1:8B 模型,并通过 OpenWeb UI 和 Spring AI 来增强模型交互体验和简化 API 的调用过程。 Ollama Ollama 是一个开源的大语言模型服务工具,旨在简化大模型的本地部署和运行过程。用户只需要输入一行命令&…

学习008-02-04-03 Group List View Data(组列表查看数据)

Group List View Data(组列表查看数据) This lesson explains how to group the Employee List View data by department and position. 本课介绍如何按部门和职位对员工列表视图数据进行分组。 Note Before you proceed, take a moment to review the …

从零开始使用YOLOv8——环境配置与极简指令(CLI)操作:1篇文章解决—直接使用:模型部署 and 自建数据集:训练微调

目录 一、Yolov8源码下载 二、虚拟环境创建与必要包的安装 1.虚拟环境 2.Pytorch安装 3.Ultralytics安装 3.环境测试 三、简单命令行指令(CLI)使用 1.模型配置(关键指令)——cfg (1)选择任务场景——ta…

收藏丨企业官网一般选择什么类型的SSL证书比较好?

企业官网在选择SSL证书时,应综合考虑网站的安全性需求、用户信任度、成本效益以及管理便捷性等因素。一般来说,企业官网比较适合选择以下几种类型的SSL证书: 1. 企业型SSL证书(Organization Validated, OV) 特点&…

初识MyBati s

J D B C 编 程 和 O R M 模 型 加 载 驱 动 导 入 J D B C 连 接 数 据 库 的 j a r 包 , 利 用 C L A S S . f o r N a m e 加 载 驱 动 ; 获 取 连 接 利 用 D r i v e r M a n a g e r 获 取 C o n n e c t i o n , 然 后 创 建 S t a t e…

生成式人工智能的第一课,揭开她那神奇的面纱

一、人工智能(Artificial Intelligence) 从1940年代开始,科学家们在数学推理的基础上发明了可编程数字计算机,这一突破激发了他们对创建“电子大脑”的探索热情,为后续的人工智能发展奠定了坚实的基础。1956年&#x…

2024西安铁一中集训DAY23 ---- 模拟赛(类括号匹配dp + baka‘s trick 优化双指针 + 组合数学/高斯消元 + 图上性质题)

文章目录 前言时间安排及成绩题解A. 稻田灌溉(类括号匹配dp)B. 最长模区间(bakas trick 优化双指针)C. 三只小猪和狼(组合数学,高斯消元)D. 黑色连通块 前言 感觉是开始集训以来最难的一场了&a…

睿考网:中级会计师和注册会计师哪个难?

中级会计师和注册会计师两个资格证书对比下来,后者具有更高的挑战性,主要原因有以下几点: 1. 考试科目和内容: 注册会计师考试包含专业阶段与综合阶段,共涉及六个科目,考察的内容覆盖范围更广泛&#xff…

最新Yiso智云搜索引擎系统源码/开源PHP源码/修复版

源码简介: 最新Yiso智云搜索引擎系统源码/开源PHP源码/修复版。Yiso 是一个性能非常好的搜索引擎,不仅免费开源,还能当作收录网址的平台来用呢!只需要输入关键词,就能轻松找到相关的搜索结果内容。 1、Yiso 用的是自…

脚本: 监控Oracle数据库中正在运行的SQL(Oracle DBA的工作利器)

英文原文网址:[Script: Monitoring Running SQL in Oracle Database in Real Time] (https://byte-way.com/2024/07/24/script-monitoring-running-sql-in-oracle-database-in-real-time/) 以下SQL查询活动会话及其正在执行的SQL语句的信息,并提供有关其…

生成式AI 未来发展的两大要素:数据和开发者

这一年来,生成式 AI 领域的发展可谓日新月异。大语言模型 (LLM) 已经从学术研究圈的新宠,变成了开发者、产品经理、IT 决策者、高管等所有人都密切关注和亲身参与的重要课题。 一年间,这类问题在新闻报道、技术大会、开发者闲聊、同事讨论、…

【Dash】Hello World

一、最简单的 Dash Building and launching an app with Dash can be done with just 5 lines of code. Open a Python IDE on your computer, create an app.py file with the code below and install Dash if you havent done so already. To launch the app, type into yo…

DBeaver如何连接本地的mysql服务

要使用 DBeaver 连接本地的 MySQL 服务,可以按照以下步骤进行设置: 1. 下载和安装 DBeaver 首先确保已经下载并安装了 DBeaver。你可以从官方网站 DBeaver 官网 下载适用于 macOS 的安装包,并按照提示安装。 2. 打开 DBeaver 并添加新的数…

Python编程的思维导图

创建一个Python编程的思维导图是一个很好的方式来组织和理解Python编程的核心概念、语法、库和应用领域。下面是一个简化的Python编程思维导图的概要,可以根据需要进行扩展或修改: Python编程 ├── 基础概念 │ ├── 变量与数据类型 │ │…

基于 YOLO V10 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V10 在本专栏的前面几篇文章中,我们使用 ultralytics 公司开源发布的 YOLO-V8 模型,分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务,实验后发现效果都非常的不错,但它已经不是最强的了。最新的 YOLO-V10 已经…

如何看待储殷教授说的“现在的码农和纺织工人没区别“

储殷教授的观点认为现代的程序员(通常被称为“码农”)与过去的纺织工人没有本质的区别。这种说法引发了一些讨论和争议,码哥从几个角度来探讨这一观点: 工作性质的比较 重复性劳动 储殷教授可能认为,就像过去纺织工人…