Vulnhub打靶记录:nagini
相关信息
kali:10.0.0.9/24
靶机:10.0.0.15/24
靶机介绍:HarryPotter: Nagini ~ VulnHub(Nagini为哈利波特伏地魔的一个魂器,为一条大蛇)
靶机下载:https://download.vulnhub.com/harrypotter/Nagini.ova
目标:1个 flag + root权限
难度:中高(打点较难)
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现 端口扫描
- WEB信息搜集:路劲爬取很关键
- HTTP3协议:不需要太过于深入的了解,会访问就可以,主要客户端软件的下载
- 域名绑定
- SSRF漏洞(Gopher + Mysql): Server-Side Request Forgery(服务器端请求伪造)的缩写。它是一种常见的网络安全漏洞,发生在服务器端的应用程序中。SSRF 漏洞通常出现在允许用户输入 URL 或发起网络请求的功能中,攻击者可以通过构造恶意请求,使服务器在攻击者指定的目标上执行请求。这样可能导致以下问题
- Joomla漏洞:非常的简单,这是个
cms突破边界的常见操作,但是一定需要牢记 - SSH公钥登陆
- 浏览器密码还原:这个操作可以了解一下😄
下意识的操作
- 当发现靶机存在域名解析时,一定将其添加如
hosts文件中,再以域名重新来一遍web信息搜集。 - 很多时候在进行密码破解,
ssh登陆,密码绕过的时候可以问问自己:能否直接进行密码覆盖?这将省去我们很大一部分时间。 .ssh中的authorized_keys文件是有权限要求的,最好将其设置为600。
主要的知识点
gopher协议的使用http3客户端的下载方式和使用软件firefox用户密码的提取cms常规的突破边界的方法利用主题文件
具体流程
信息搜集
-
发现主机,端口扫描,版本发现。可以发现靶机为
Debian系统,开启了22,80两个端口,此外并没有太大的收获。
-
访问主机就是一个单纯的一个图片的
html静态网站,源码也没有任何的提示点。
-
那么路径爬取几乎成了唯一的途径,使用如下工具和字典:
dirsearch -u http://10.0.0.15 -f -e txt,html,php -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt

其中重点关注
Joomla路径。Joomla是一个免费的开源内容管理系统(CMS),用于构建和管理网站。它是全球使用广泛的CMS之一,由志愿者社区开发和维护。Joomla使用PHP编程语言和MySQL数据库来管理网站内容。
-
note.txt:明显为一个提示路径,可以发现靶机使用的web协议为http3,而非现在流行的常规的http2协议,所以一般的浏览器无法正常的访问。同时通过文本还发现靶机可以进行域名访问的:quic.nagini.hogwarts。(hagwarts:霍格沃兹)
-
joomla访问后为一个Joomla的登陆界面
-
administrator:明显为CMS的后台登陆界面
两个登陆界面进行弱密码和常规万能密码的注入都是无法成功进入的
-
HTTP3网页访问
由于
http3为非主流的web协议,在一般的浏览器和web程序中无法正常使用,在百度后可以发现quiche这个工具可以访问http3的网站。
-
先将发现的域名:
quic.nagini.hogwarts,添加的hosts文件中。 (完成这个步骤后一定要以域名的形式将web路径爬取,页面访问等步骤重新操作一遍,极有可能会有新的发现)
-
进入
quiche的相对路径中的程序,以域名的形式访问目标靶机。返回一个html网页的内容:- 存在一个
internalResourceFeTcher.php一个内部资源获取的网页 - 靶机上极有可能存在备份文件

- 存在一个
-
以域名的方式尝试访问
internalResourceFeTcher.php,发现为一个内部网路资源请求网页。由于是网络资源的获取所以使用url资源请求格式:file,http,尝试进行访问,不难发现靶机上存在ssrf漏洞。
发现
snape, hermoine,mysql这几个敏感的用户。
-
尝试使用
gopher协议来靶机直接访问一下自己开放的22 :ssh端口,发现可以连接只是协议不够匹配而已。
通过前面对
Joomla应用的了解,不难发现它是可以管理数据库的,只是比较奇怪的是nmap并没有扫描出来3306端口。可能是靶机对其访问ip做了防护,导致以 只能以127.0.0.1连接,所以使用gopher来尝试连接靶机的3306 : mysql端口。gopher协议了解
虽然返回结果乱码,但可以确定靶机是开放了
127.0.0.1:3306端口的。
-
通过浏览
Joomla的开源代码,知存在/joomla/configuration.php配置文件,尝试添加.bak, .backup, .back后缀名的方式进行访问。无论是通过浏览器直接访问还是internalResourceFeTcher.php页面中使用file协议都可以获得这个文件的内容。-
直接访问:

-
file协议:
-
在配置文件中发现一个 秘密:
$secret = 'ILhwP6HTYKcN7qMh',数据库的名字:goblin其密码为空,外加日志路径和临时文件路径。(goblin为哈利波特中一种小妖)

-
-
既然已经知道靶机上存在数据库,同时还在到其用户和密码(为空)。使用借助
internalResourceFeTcher.php网页利用gopherus协议对其进行访问就显的非常具有操作性,但是由于我们并不懂gopher协议和数据库的交互格式(gopher其实并不支持直接和数据库进行交互),可以下载一个脚本工具帮助我们实现payload的编写。就为一个简单的
python脚本,使用方法解释的也十分易懂。git clone https://github.com/tarunkant/Gopherus.git
-
构建
payload发现Joomla数据库中有哪些表。
在
internalResourceFeTcher.php上载后,浏览返回的网页源码发现joomla_users这个代表性的表。
同样方法构建
payload其中mysql的查询语句为:use joomla;select * from joomla_users;再上载
payload查看返回的网页源码。结合def(用于定义表的列)定义每个列的含义和获取的查询数据可以得到这样一个数据:- 用户:
site_admin - 邮箱:
site_admin@nagini.hogwarts - 密码:
$2y$10$cmQ.akn2au104AhR4.YJBOC5W13gyV21D/bkoTmbWWqFWjzEW7vay(明显是一种加密算法)


- 用户:
-
这一步就非常的巧妙了,如果我们直接破解这个密文不仅时间长,而且还有可能破不出来。既然通过
gopher可以直接操作数据库,何不直接覆盖这个site_admin这个密码呢?由于mysql支持md5加密,直接按照下图构建payload上载即可。
-
这样以:
site_admin : 1234就可以成功的登陆后台网页。
突破边界
-
由于
joomla是个cms,可以直接在后台修改主题文件。这里我选择修改Beez3这个主题的error.php文件。
-
直接将
error.php的内容修改为kali上反弹shell文件的内容,然后进行简单的修改,保存即可。

-
访问
Beez3主题下的error.php文件,便可成功的突破边界。
信息搜集/用户跳转
-
在
www目录中发现第一个flag :horcrux(魂器)。
-
在
home目录中发现两个用户 :hermoine, snape这两个用户(赫敏,斯内普教授)。其中snape的主目录中存在一个身份认证文件:.creds.txt,任何人都可已读取,很明显为一个base64加密。
-
解密后为
Love@lilly(snape暗恋哈利波特的母亲Lilly),进行snape : Love@lilly的ssh登陆,完成账号跳转。
-
不难发现在
hermoine的目录中的horcrux无法读取,但比较奇怪的是在hermoine的主目录中存在一个bin文件(bin里面一般为可执行命令)。里面存在一个su_cp的可执行文件,所有用户都可以执行而且具有hermoine的suid权限,简单使用后发现su_cp就是一个类似cp的命令。
-
结合
hermoine的.ssh目录,就可以尝试利用su_cp这个命令将公钥传输到hermoine的.ssh目录中,从而实现ssh的公钥登陆。先利用ssh-keygen生成一个1234的的秘钥对,由于知道snape账户的密码,直接使用scp进行文件传递到snape的家目录。scp使用介绍
-
利用
snape用户将上传的key.pub文件改名为authorized_keys,并将其权限设置为600。然后利用具有hermoine的suid的su_cp将authorized_keys拷贝到hermoine的.ssh文件中。
-
最后用公钥成功以
hermoine的身份登陆到靶机,并查看第二个flag。
提权
-
以
hermoine的身份登陆后查其主目录,发现了./mozilla/firefox这个存放用户配置的文件夹。一般在服务器中很是使用Firefox这种图形化界面软件,并且可能存在用户密码泄露的风险(可以从配置文件中提取) .mozilla是什么文件夹-
直接利用
scp将靶机上的.mozilla/firefox文件拷贝到kali中
-
-
直接从下面网站下载一个脚本文件,帮助我们自动化的从
firefox文件夹中提取用户密码:root : @Alohomora#123。
-
尝试切换为
root用户,居然成功,同时可以查看第三个flag完成打靶。
相关工具/命令
命令
scp
-
what? 返回
SCP (Secure Copy Protocol) 是一种用于在网络上安全地传输文件的协议,它使用 SSH(Secure Shell)进行加密和身份验证。SCP 命令是基于这个协议实现的,它允许用户在本地主机和远程主机之间复制文件和目录。
-
how to use
-
从本地复制文件到远程主机:
scp local_file.txt remote_username@remote_host:/remote/directory/ -
从远程主机复制文件到本地:
scp remote_username@remote_host:/remote/directory/remote_file.txt local_file.txt -
从本地复制目录及其内容到远程主机:
scp -r local_directory remote_username@remote_host:/remote/directory/ -
从远程主机复制目录及其内容到本地:
scp -r remote_username@remote_host:/remote/directory/ local_directory请注意,使用 SCP 命令进行文件传输时,会使用 SSH 的身份验证机制,因此你需要有目标主机的登录凭据(通常是用户名和密码或 SSH 密钥对)。
使用 SCP 命令进行文件传输是非常方便的,但在处理大量文件或大文件时可能不够高效,可以考虑使用其他更专业的文件传输工具,如
rsync或sftp。
-
-
related parameter
-r:递归地复制整个目录及其子目录。-p:保留源文件的修改时间、访问时间和权限。-P:指定远程主机的端口号(默认为 22)。-i:指定要使用的身份验证私钥文件。-q:静默模式,不显示复制过程信息。-C:使用压缩传输,加快传输速度。
工具
cargo
-
what? 返回
在Linux中,
cargo是Rust编程语言的官方包管理器和构建工具。Rust是一种现代、安全、并发的系统编程语言,由Mozilla Research开发。cargo命令用于帮助开发者构建、测试和管理Rust项目。
cargo还可以自动处理项目的依赖管理,通过Cargo.toml文件来定义项目的依赖关系和配置信息。Cargo.toml文件是Rust项目的配置文件,其中包含了项目的名称、版本号、依赖库等信息。
cargo命令的使用使得Rust开发者能够方便地构建和管理项目,同时轻松管理项目的依赖关系,使得开发过程更加高效和简便。 -
how to use
cargo new: 创建一个新的Rust项目,生成默认的项目目录结构和配置文件。cargo build: 构建当前项目,编译生成可执行文件或库文件。cargo run: 构建并运行当前项目。cargo test: 运行项目中的测试。cargo clean: 清除构建过程中生成的中间文件和输出文件。cargo update: 更新项目的依赖库版本。cargo doc: 生成项目的文档。cargo install: 安装由Rust社区提供的二进制可执行文件。cargo publish: 将自己的Rust库发布到crates.io,Rust社区的包管理服务。
cmake
-
what? 返回
CMake是一个跨平台的开源构建工具,用于管理软件项目的构建过程。它可以根据不同的操作系统和编译器生成对应的构建脚本,使得项目在不同的平台上能够进行简单和一致的构建。 用于
c/c++代码管理
quiche
-
what? 返回
Quiche是一个支持HTTP/3的开源工具库,由Cloudflare开发。它是用Rust语言编写的,旨在帮助开发者实现和支持HTTP/3和QUIC协议。HTTP/3是下一代HTTP协议,它基于QUIC(Quick UDP Internet Connections)协议,旨在改进性能和安全性,特别是在高丢包和高延迟的网络环境下。
-
安装过程:
-
先将
quiche克隆到本地:(recursive:递归的,表示递归的将quiche中的所有的文件下载下来)git clone --recursive https://gitee.com/wx112601/quiche.git -
由于
quiche需要使用到cargo,cmake工具,所以还要提前下载该工具。直接键入下面命令即可: cargo,cmake介绍-
apt install cargo -
apt install cmake
-
-
cd quiche进入到克隆的quiche文件夹中。键入cargo build --examples搭建quiche项目,但是程序会爆出如下错误,提示我们我们rustc工具的版本不符合要求。
-
apt purge rustc键入该命令彻底的卸载rustc,包括它相关的配置文件。然后从rustc的官网上下载它的rustup安装脚本:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh。(安装的过程中选择1默认安装即可)
-
安装完成后会提示我们为这个应用添加环境变量,直接复制它执行即可。
-
最后重新进入
quiche目录,键入cargo build --examples进行项目搭建,就可以成功下载quiche了。还可以键入cargo test来检测是否成功的完整的安装quiche。
-
相关payload
firefox密码提取脚本
gopher协议payload的编写脚本
gopherus
-
一个帮助构建
gopher协议payload的辅助工具:就是一个简单的python脚本git clone https://github.com/tarunkant/Gopherus.git
复盘/相关知识
重要
.mozilla目录
-
what? 返回
.mozilla是 Mozilla 系列应用程序(如 Firefox 和 Thunderbird 等)的配置文件目录。每个用户在其主目录下都会有一个名为.mozilla的隐藏文件夹,用于存储有关该用户在 Mozilla 应用程序中的个性化设置和配置信息。其中最常见的子文件夹是
firefox,其中包含了Firefox的配置文件包括用户密码
gopher
-
what? 返回
Gopher是一种早期的、简单的、文本驱动的网络协议,用于在计算机之间传输信息。它于1991年由University of Minnesota开发,并在当时广泛使用。然而,随着World Wide Web的发展,Gopher在后来的几年逐渐被HTTP协议所取代,逐渐失去了流行度。
-
how to use
和
url的访问方式基本使用方法基本相同,其实gopher是不支持直接和mysql进行交互的。
url协议头部
-
what? 返回
URL(Uniform Resource Locator)是用于标识和定位互联网上资源的字符串。它通常用于在Web浏览器中访问网页,下载文件,或者与其他网络资源进行交互。URL的语法可以分为以下几个部分:
- 协议头:
http://, https://, ftp://(ftp服务器文件的读取), file://(本地文件的读取), ssh:// - 用户名和密码(可选)
- 主机名
- 端口号
- .....
- 协议头:
了解
joomla的web框架
Joomla是一个免费的开源内容管理系统(CMS),用于构建和管理网站。它是全球使用广泛的CMS之一,由志愿者社区开发和维护。Joomla使用PHP编程语言和MySQL数据库来管理网站内容。


浙公网安备 33010602011771号