Oopsie【hack the box】
Oopsie
解题流程
文件上传
首先开启机器后,我们先使用 nmap -sC -SV
来扫描一下IP地址:
-sC
:使用 Nmap 的默认脚本扫描(通常是 NSE 脚本,Nmap Scripting Engine)。这个选项会自动执行一系列常见的脚本,进行更为详细的探测,比如检查服务版本、漏洞扫描、系统信息等。
-sV
:探测服务版本。这会使 Nmap 在扫描时尝试识别目标主机上运行的服务及其版本信息。
可以看到开放了两个端口:22和80端口,既然开放了80端口,说明我们可以使用web浏览器进行访问。
那么我们此时使用kali自带的火狐浏览器进行访问,访问对应的IP地址,显示页面如下:
页面继续往下划,我们看到了这样的一段话,我们需要登录才能访问这个访问:
那么此时我们就可以猜到这个页面应该应该是存在子目录能够进行登录操作的,那么此时我们就需要找到这个子目录。此时我们我们使用burpsuit自带的抓包功能进行看一下页面的子目录有哪些,由于burpsuit是kali自带的,操作起来也方便。为了方便操作,这里我直接打开burpsuit自带的浏览器:
输入目标IP之后,burpsuit可以不进行拦截操作,因为burpsuit会自动收集打开过程中的数据包,就在旁边的 HTTP history
中,抓到的数据包如下所示:
此时我们看到有个 cdn-cgi/login
的目录,很像我们需要的登录目录,那么此时我们访问一下这个目录,显示页面如下,果真就是我们想要的登录窗口:
尝试了一些弱口令爆破之后,没有成功,发现下方还有一个 Login as Guest
的选项,我们可以当做游客进行登录:
进入之后,我们就可以看到游客界面的导航栏了
查看导航栏,发现有一个 uploads
的栏目,难道可以进行文件上传吗?我们点进去看看,发现需要超级管理员用户才可以访问:
那么我们就需要想办法来提升用户的权限,有一个方法就是右键页面,然后打开检查元素:
然后我们就可以查看用户的cookie信息,我们观察到,有role=guest 和 user=2233。我们可以假设,如果我们以某种方式知道超级用户的数量admin 作为 user 变量,我们也许能够访问上传页面:
然后返回刚才的 Account
栏目信息,根据上面的url信息,发现此时发id=2
,那么我们尝试一下id=1
会发生什么?
修改id=1
,我们成功知道了admin
的id
值,此时我们就可以尝试修改一下cookie值来尝试提高用户的权限:
此时我们修改了cookie的值,然后刷新一下页面,发现我们已经拥有了上传文件的权限:
现在我们已经可以访问上传表单了,我们可以尝试上传 PHP 反向 shell。对于本题,我们将使用 /webshells/php/php-reverse-shell.php,这里提供了下载地址,然后将该PHP文件上传:
好了到了这一步,现在我们需要找到刚刚上传的php文件所在的目录,我们可以自己猜测目录位置,这里我使用gobuster来暴力破解一下目录名:
gobuster一下子就找到了 uploads
目录,然后尝试看一下该目录的内容,发现我们没有查看该目录的权限,但是我们可以尝试访问一下我们上传到该目录的文件:
反弹shell
首先,我们建立一个 netcat
的连接,如下图所示:
然后我们在网页中访问我们上传的文件的地址:
然后就可以发现我们成功监听到了(这里需要注意的是,我们在此过程的每个页面访问到需要修改cookie值,包括上传和重新访问,否则监听不到呜呜呜,所以推荐上传的过程中每次都使用burpsuit修改一下cookie值):
好,现在我们我们成功拿到shell了,现在为了使页面看起来更加美观,我们使用下述命令:
python3 -c 'import pty;pty.spawn("/bin/bash")'
提升权限
接下来,我们查看一下 .php
的文件后缀,看是否有敏感信息泄露,输入命令 find / -type f -name *.php 2>/dev/null
:
作为用户 www-data
,该角色对系统的访问受到限制。由于网站正在使用 PHP 和 SQL,我们可以进一步枚举可能泄露的 Web 目录
或配置错误。经过一番搜索,我们可以在 /var/www/html/cdn-cgi/login
目录下找到一些 php 文件。我们可以手动查看所有页面的源代码,也可以尝试搜索使用 grep 工具可以得到有趣的字符串。输入命令:cat * | grep -i passw*
:
我们确实得到了密码:MEGACORP_4dm1n!!
。我们可以通过以下方式检查系统上的可用用户读取 /etc/passwd
文件,以便我们可以尝试重用此密码,输入 cat /etc/passwd
:
发现一个可用用户robert,此时我们切换到robert用户,结果发现登录不上…:
怎么判断用户是否可用?
格式:用户名:密码:用户ID:组ID:描述信息:家目录:登录Shell
检查 UID 是否大于等于 1000。
检查登录Shell 是否有效(非
/sbin/nologin
或/bin/false
)。检查用户的家目录是否存在。
那我们再找找,发现在db.php中找到了密码:
赶紧使用这个密码试一下,没有问题,这个密码是正确的:
然后我们在该用户的主目录找到了一个user.txt
文件,我们查看一下,发现了第一个flag:
好了现在还有一个flag应该是在root用户中,我们尝试提权来查看一下。
在运行任何权限提升或枚举脚本之前,让我们检查一下用于提升权限的基本命令sudo
和 id
等权限:
我们观察到用户 robert
是 bugtracker
组的一部分。让我们尝试看看里面是否有任何二进制文件,输入命令:find / -group bugtracker 2>/dev/null
:
我们发现一个名为 bugtracker
的文件。我们检查它的权限和文件类型ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker
:
该二进制文件上设置了一个 suid,这是一个很有用的利用路径。
SUID 是一个强大的工具,它允许文件以文件所有者(通常是 root)身份执行,从而使某些需要特权的程序能够由普通用户执行。
当一个文件具有 SUID 权限时,无论哪个用户执行该文件,该文件将以文件所有者的身份运行,而不是以执行文件的用户身份运行。
如果文件的所有者是
root
用户,那么任何人执行该文件时,都会以root
用户的身份来执行。
然后我们运行该应用程序观察其行为:
该工具接受用户输入作为将使用 cat
命令读取的文件名,但是,它没有指定文件 cat
的完整路径,因此我们可以利用它。
我们将导航到 /tmp
目录并创建一个名为 cat
的文件,其中包含以下内容:
/bin/sh
然后我们设置改文件的执行权限:
chmod +x cat
为了利用这一点,我们可以将 /tmp
目录添加到 PATH
环境变量中,/tmp
目录将被添加到 PATH
变量的最前面:
export PATH=/tmp:$PATH
然后我们检查一下环境变量:
echo $PATH
然后我们再次执行一下该二进制文件,提权成功:
然后我们找到 /root
目录下的 root.txt
,由于cat
查看不了,那我们使用more
来查看一下:
最后成功获取root用户的flag。
题目答案
task 1
With what kind of tool can intercept web traffic?(用什么工具可以拦截网络流量?)
答案:proxy
task 2
What is the path to the directory on the webserver that returns a login page?(返回登录页面的网络服务器上的目录路径是什么?)
答案:/cdn-cgi/login
task 3
What can be modified in Firefox to get access to the upload page?(可以在 Firefox 中修改哪些内容才能访问上传页面?)
答案:cookie
task 4
What is the access ID of the admin user?(管理员用户的访问 ID 是什么?)
答案:34322
task 5
On uploading a file, what directory does that file appear in on the server?(上传文件时,该文件出现在服务器上的哪个目录中?)
答案:/uploads
task 6
What is the file that contains the password that is shared with the robert user?(包含与 robert 用户共享的密码的文件是什么?)
答案:db.php
task 7
What executible is run with the option “-group bugtracker” to identify all files owned by the bugtracker group?(使用选项“-group bugtracker”运行什么可执行文件来识别 bugtracker 组拥有的所有文件?)
答案:find
task 8
Regardless of which user starts running the bugtracker executable, what’s user privileges will use to run?(无论哪个用户开始运行 bugtracker 可执行文件,都将使用什么用户权限来运行?)
答案:root
task 9
What SUID stands for?(SUID 代表什么?)
答案:Set owner User ID
task 10
What is the name of the executable being called in an insecure manner?(以不安全方式调用的可执行文件的名称是什么?)
答案:cat
task 11
Submit user flag(提交用户flag)
答案:f2c74ee8db7983851ab2a96a44eb7981
task 12
Submit root flag(提交root的flag)
答案:af13b0bee69f8a877c3faf667f7beacf
相关文章:

Oopsie【hack the box】
Oopsie 解题流程 文件上传 首先开启机器后,我们先使用 nmap -sC -SV来扫描一下IP地址: -sC:使用 Nmap 的默认脚本扫描(通常是 NSE 脚本,Nmap Scripting Engine)。这个选项会自动执行一系列常见的脚本&am…...
详细介绍 React 中 i18n 的完整使用流程:
接下来按照步骤,让我们来完成! // 1. 首先安装必要的依赖 // npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector// 2. 创建 i18n 配置文件 (src/i18n/index.js) import i18n from i18next import { initReactI…...

部署:上传项目代码 配置数据库
一、上传代码 1、使用git 可以使用Git Clone。使用前,在服务器上也要创建秘钥对。这里的密钥对,是专门用来读取Git仓库的。 在宝塔上,点击终端。进来后,运行 ssh-keygen还是一路回车,密钥对就建好了。 接着用命令…...

C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
11. C 语言 作用域与变量使用技巧
本章目录: 前言一、作用域的分类局部变量示例: 全局变量示例:示例: 形式参数示例: 二、作用域的细节与常见误区块级作用域示例: 静态变量与全局变量的对比示例: 未初始化变量的影响示例: 三、实…...

【机器学习案列】学生抑郁可视化及预测分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
Perl语言的循环实现
Perl语言的循环实现 引言 Perl是一种强大的脚本语言,以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程,还是在Web应用开发中,Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念,它允许程序重复…...
SpringBoot项目——使用Spark对爬虫爬取下的数据进行清洗
随着互联网信息呈爆炸式增长,爬虫技术被广泛用于从海量网页中抓取有价值的数据。然而,爬取到的数据往往存在格式不规范、重复、噪声等诸多问题,需要高效的数据清洗流程来保障数据质量,Spark 在其中发挥了关键作用。 什么是Spark …...
分布式锁 Redis vs etcd
为什么要实现分布式锁?为什么需要分布式锁,分布式锁的作用是什么,哪些场景会使用到分布式锁?分布式锁的实现方式有哪些分布式锁的核心原理是什么 如何实现分布式锁redis(自旋锁版本)etcd 的分布式锁(互斥锁(信号控制)版本) 分布式锁对比redis vs etcd 总结 为什么要实现分布式…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
Angular结合C#
在 Angular 2 及以上版本与 C#结合使用 REST API 的示例中,我们将分别展示前端 Angular 服务和后端 C# Web API 的实现。 一、前端:Angular 服务 生成 Angular 服务 使用 Angular CLI 生成一个新的服务,例如user.service.ts: ng…...

Spring——自动装配
假设一个场景: 一个人(Person)有一条狗(Dog)和一只猫(Cat),狗和猫都会叫,狗叫是“汪汪”,猫叫是“喵喵”,同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…...
Servlet与JSP:Java的秘密花园入口
1 Servlet概述 Servlet是Java Web应用中的一个核心组件,它是一个运行在服务器端的Java程序,可以响应客户端的请求并生成响应。Servlet为Web应用提供了一个统一的接口来处理HTTP请求。 2 Servlet的生命周期 Servlet的生命周期包括以下几个阶段ÿ…...

【Linux】Linux常见指令(上)
个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统,Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…...

ELFK日志采集实战
一、日志分析概述 日志分析是运维工程师解决系统故障,发现问题的主要手段 日志主要包括系统日志、应用程序日志和安全日志 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因 经常分析日志可以了解服务器的负荷&#x…...
Kubernetes 使用自定义资源(CRD)扩展API
K8s CRD 即 Kubernetes CustomResourceDefinition,是 Kubernetes 提供的一种扩展机制,允许用户在 Kubernetes 集群中定义和使用自定义的资源类型。通过定义 CRD,用户可以在 Kubernetes 集群中创建、读取、更新和删除自定义资源对象࿰…...

用户使用LLM模型都在干什么?
Anthropic 对用户与 Claude 3.5 Sonnet 的大量匿名对话展开分析,主要发现及相关情况如下: 使用用途分布 软件开发主导:在各类使用场景中,软件开发占比最高,其中编码占 Claude 对话的 15% - 25%,网页和移动应…...
MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)
MySQL常用命令汇总 简介 MySQL是一个广泛使用的开源关系型数据库管理系统,由瑞典的MySQL AB公司开发,现属于Oracle公司。 MySQL支持SQL(结构化查询语言),这是数据库操作的标准语言,用户可以使用SQL进…...
六年之约day10
今日开心∶今天部门开了个颁奖大会,看着别人收获的荣誉,还真有些羡慕,什么时候,我也能拥有属于自己的荣誉啊. 今日不开心∶活没干多少,对业务也不是很懂 今日思考∶很多事情,存在即合理.工作,…...

springboot和vue配置https请求
项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...