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数据库来管理网站内容。