Vulnhub打靶记录:tre_1
相关信息
kali:10.0.0.9/24
靶机:10.0.0.10/24
靶机介绍:Tre: 1 ~ VulnHub
靶机下载:https://download.vulnhub.com/tre/Tre.zip
目标:1个 flag
+ root
权限
难度:中
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现 端口扫描 信息搜集
- 进阶路径枚举:主要就是
dirsearch
对需要验证的目录爬取操作 - exp代码改造:这个能力非常的关键,任何
exp
一定需要阅读了解大概的机制然后进行本土修改 - 边界突破方法1
- 边界突破方法2 边界突破方法3:非常考验密码的复用和发现的能力,重要,重要,重要。
- 权限提升:提权完全可以利用文件系统权限或引用不当的错误进行提权,但是对于我们对查找命令,过滤命令需要进行熟练的掌握。
下意识的操作
exp
的修改或者文本的编辑,最好使用linux
中的编辑器,不要使用vim
。因为vim
对于缩进的显示不准确,会导致py
这样的脚本会有错误。- 在渗透中一定要将邮箱,可疑的字符串,已知的密码进行收集,然后对于任何需要密码的地方进行爆破尝试和密码复用。这个步骤非常非常重要,但又需要极强的敏感度。
- 查看程序之间,程序和脚本之间是否存在相关应用时可以通过查看
/etc
这个配置目录来确定。(符合linux
一切皆文件的哲学思想)
具体流程
信息搜集
- 主机发现,端口扫描。
22
端口为7.9p1
的openssh
,相对于现在最新的9.3
来说还是比较新的版本,不太可能存在漏洞。同时比较奇怪的是80,8082
开放的都是web
,而且发布的内容是相同的唯一不同的便是发布的中间件不同。

- 分别访问
80,8082
端口上的默认web
页面,发现就是单一的图片页面没有任何其他功能。同时查看源码也是一模一样,没任何发现。
-
先对
80
端口进行路径爬取,键入dirsearch -u http://10.0.0.10
,然后进行逐个的访问。-
adminer.php
:为一个adminer
的PHP
后台登陆服务,该服务版本为4.4.7
,通过searchsploit adminer
后相关漏洞利用版本最新也是版本4.3.1
,无法利用。 -
cms
:是个类似音乐的网站,里面的所有功能页面进行尝试后发现都是静态网页html
,而且如Login, Create an account
这样的功能页面也都是无法使用的,查看源码发现的路径也是无关紧要的。 -
info.php
:虽然能获取部分靶机的相关信息,但都是无法利用的相关信息。 -
/server-status
:直接403Forbidden
了,其实可以考虑403
绕过,但是没有什么大的作用。 -
system
:可以看出为401
,表示目标是存在的只是需要身份的验证。访问发现验证的方式就是简单的http
基础身份验证,进行弱密码尝试发现直接以admin :admin
就可以登陆了,当然也可以用burpsuite
抓包来进行401
的爆破。 -
-
exp使用突破边界
方法一:mantis漏洞
- 通过上面发现的
mantis
网页服务,在漏洞库中搜索mantis
。可以大致的发现该应用应该是个bug
调试的相关服务。但由于不知道靶机上运行的是什么版本的mantis
,所以就使最新的一个远程执行,不用认证的一个漏洞利用脚本48818.py
。

- 对
exp
进行阅读,查看相关的使用说明,并对exp
进行相关的修改和使用。首先就是对靶机和kali的ip
修改,其次就是对于mantis
这个登陆网站地址的修改为:/system
。然后就是添加一个headers
认证头,这个认证头就是Authorization Basic YWRtaW46YWRtaW4=
,但注意需要以字典的形式进行写入。

通过对
exp
使用说明的了解,该exp
首先会更改该服务默认用户Administartor
的密码为password
,然后再进行反弹shell
。这个脚本最需要注意的就是self.header
头的添加,其它的修改,注释都有相关说明。
- 运行修改后的脚本。虽然发现有报错,但是我们可以发现
shell
还是成功的反弹了到kali:4444
,然后简单的升级shell
。

方法二:ssh登陆
-
通过对发现的
system
再次进行目录的迭代爬取,但是注意添加--header
这个文件头来进行身份的验证,否则无法成功的爬取目录。目录的迭代爬取非常非常重要,切记不要忘记dirsearch -u http://10.0.0.10/system --header="Authorization: Basic YWRtaW46YWRtaW4="
其中有个非常重要的目录
system/config
目录,进行访问后里面有个非常重要的文件a.txt
。在其中发现了web
数据库的相关配置信息。 -
再结合先前发现的
adminer.php
网页,尝试利用获取的数据库密码进行登陆。注意Server
的填写方式,需要为localhost
的形式。 -
进入数据库后台后进行相关数据库的查看,然后对
mantis_user_table
数据库进行查看。administrator
的password
解密为:password
tre
的hash
无法解密,但是有个非常值得注意的字段realname
。熟悉ssh
命令登陆格式的话应该会有所联想,而且该字符串非常符合一个高复杂度密码的格式要求,加之靶机开放了ssh
的登陆方式,不妨大胆的进行尝试登陆。
-
由于我打的多台靶机的
IP
设置都为10.0.0.10
,以前进行的ssh
连接时保存的秘钥依然存在。导致再次使用ssh
登陆这个靶机时提示:连接的主机验证秘钥已经更换。所以键入ssh-keygen -R 10.0.0.10
来重置10.0.0.10
这个IP
的ssh
秘钥,然后再进行ssh
登陆的尝试,发现成功的突破边界。
方法三:通用漏洞的利用
-
还是进行
searchsploit mantis
漏洞搜索,发现一个密码重置的漏洞41890.txt
利用说明,而且该漏洞的适用版本非常的广。 -
通过对于漏洞的相关阅读,大致意思如下:
当修改一个用户密码时,服务器会对请求修改的用户进行
hash
验证,如果通过允许修改。通过源码可以看出验证逻辑存在漏洞,虽然我们不知道正确的hash
。但是用一个没有验证的用户(hash
为空),在请求修改密码的时候我们将需要对比的hash
也设置为空,这样可以完成逻辑绕过进入到密码修改的页面。即使大致的原理不懂,但是其中也给出了
bypass
的url
示例,我们只需要修改相关的url
路径即可。 -
使用下面的
url
:http://10.0.0.10/system/verify.php?id=1&confirm_hash=
就可以进入下面界面,将密码修改为1234
,mantis
的administrator
用户的默认id=1
。 -
进入后台,通过查看相关信息,再次发现和方法二一样的用户信息,所以可以再次进行
ssh
登陆。
再次信息收集
-
发现
tre
用户可以通过sudo
使用shutdown
命令,从而控制靶机启动。然后键入下面的命令来查看:属主是
root
,但同时其他用户可以对该文件进行写的敏感文件。排除/sys/kernel/security
这样的关于内核的文件,将目标重点放在/usr/bin/check-system
这个文件上。由于所有用户可以对其进行读写,查看后发现就是个简单的shell
脚本。命令解析find / -type f -perm -o=w -user root -ls 2>/dev/null | grep -v "/proc\|sys/fs"
-
不难发现这个脚本是
root
创建,所以很有可能会有root
的相关程序对其进行引用。在/etc
目录下键入grep -Ri "check-system" . 2>/dev/null
来查看,可能对其进行引用的程序。 命令解析不难发现两个程序都是通过
bash
来执行这个脚本的,而这且都是开机自启动。结合前面搜集的信息:tre
用户可以读写check-system
- 可以重启靶机
check-system
开机是会运行。
所以对该脚本进行修改,让其在重启是反弹
shell
。而且由于开机是高权限,大概率是root
用户的shell
。
root's shell反弹
-
在对脚本修改时,最好将反弹代码写入循环中,确保一定成功反弹
shell
,如果只写上部分反弹shell
代码是无法在重启后成功反弹的。 -
利用
sudo shutdown
使靶机重启,进而成功的反弹root
的shell
,拿下root
和flag
完成打靶。
相关工具/命令
命令
敏感文件查找
find / -type f -perm -o=w -user root -ls 2>/dev/null | grep -v "/proc\|sys/fs"
用于在文件系统中查找所有属于root用户、具有其他用户可写权限的文件,并将其输出到标准输出
[==返回==](#back3)<a id='tag3'></a>
-type f
: 这是find
命令的选项之一,指定只搜索普通文件(排除目录和其他特殊文件)。-perm -o=w
: 这是另一个find
命令的选项,用于指定搜索具有其他用户可写权限的文件。-perm
选项用于匹配特定的文件权限。-o=w
表示其他用户具有写权限。-user root
: 这是find
命令的选项之一,用于指定搜索属于root用户的文件。-ls
: 这是find
命令的选项之一,用于以类似ls -l
的格式打印匹配到的文件信息。2>/dev/null
: 这是将错误输出重定向到/dev/null
,即丢弃错误消息。|
: 这是管道操作符,将前一个命令的输出作为后一个命令的输入。-v "/proc\|sys/fs"
: 这是使用grep
命令进行过滤的部分。-v
选项表示只输出不匹配的行。"/proc\|sys/fs"
表示不匹配包含/proc
或sys/fs
的行,即排除这两个路径。\|
正则表达式的or
,之所以排除这两个目录是为了排除干扰。
文本文件的查找
root@root:/etc$ grep -Ri "check-system" . 2>/dev/null
因此,该命令的作用是在
/etc
目录下递归地搜索包含字符串"check-system"的文本,并将匹配的行输出到标准输出,同时忽略权限相关的错误消息。由于/etc
是各个程序配置文件的存放目录,可以对里面文本内容的查找,从而实现理清程序间互相引用的目的。 返回
grep
: 这是用于在文件中搜索文本的命令。-R
: 这是grep
命令的选项之一,表示递归地搜索指定目录下的文件和子目录。-i
: 这是grep
命令的选项之一,表示忽略大小写进行匹配。"check-system"
: 这是要搜索的文本字符串,即要在文件中查找的内容。.
: 这是要搜索的起始路径,即从当前目录(/etc
)开始搜索。2>/dev/null
: 这是将错误输出重定向到/dev/null
,即丢弃错误消息。在这种情况下,它会将由于权限限制或其他原因导致的无法访问的文件或目录的错误消息屏蔽掉,只输出匹配的行。
复盘/相关知识
重要
401
指示身份验证是必需的,没有提供身份验证或身份验证失败。 如果请求已经包含授权凭据,那么401状态码表示不接受这些凭据。
/proc
/proc
目录是一个特殊的虚拟文件系统(procfs),它提供了对内核和运行中进程的信息的访问。它不是一个真正的文件系统,而是通过内核动态生成的文件和目录的集合。
一般敏感文件的查找是可以排除
/sys/kernel/security
在Linux系统中,/sys/kernel/security
目录是用于访问内核安全模块相关信息和配置的路径。它提供了与内核安全模块相关的接口和文件。
/etc/systemd/system
是Systemd服务管理器的配置文件目录。Systemd是一种Linux系统初始化和服务管理系统,它负责启动、停止和管理系统中的各种服务和单元。返回