Vulnhub打靶记录:raven_2
相关信息
kali:10.0.0.7/24
靶机:10.0.0.10/24
靶机介绍:Raven: 2 ~ VulnHub
靶机下载:https://download.vulnhub.com/raven/Raven2.ova
目标:4个 flag
+ root
权限
难度:中
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现 端口扫描
- 信息搜集:通过源码发现域名是非常关键的步骤 路径爆破 远程代码注入
- exp代码修改非常重要
- 反弹shell 内核漏洞枚举(也是可以提取的,只是在本次打靶中没有使用)
- 本地信息收集:查看root启用的程序
- MYSQL_UDF提权:流程还是非常简单的
下意识的操作
- 在使用
exp
一定一定要先看看exp
,因为大量的exp
是需要一定的修改后才能使用的 exp
使用不成功也可能是exp
写入的后门代码被过滤掉了,有时候通过简单更改变量名,文件名可能就能上传成功- 如果进入靶机能够查看网页数据库的配置获取数据库的密码,那么进行数据库提权就是非常必要的了
- 密码复用,密码复用,密码复用。
主要的知识点
WordPress,phpmailer
两个框架的重点理解和掌握- 如何利用 root的mysql来进行文件的移动,接收,写入和执行。
- 虚拟机,
burpsuite
如何设置代理 mysql
命令的熟悉
具体流程
信息搜集
-
主机发现,端口扫描,服务探测。其中
rpcbind: 111
开放的这个日常生活不常见的服务,通过nmap
脚本扫描也是没有什么漏洞发现的。所以开放的80
端口依然是渗透测试的重点。 什么是rpcbind -
虽然在浏览
80
端口网页能够快速访问,但是浏览器还在一直尝试加载资源,这个时候进行抓包分析就很有必要了。(浏览网站大致内容,发现是提供网络安全服务的一家公司。)明显网页是请求了一些外网的资源导致访问速度非常缓慢。那么就可以对 虚拟机内部的
burpsuite
进行socks
代理设置,让其能够使用宿主机上的clash for windows
的代理。 -
burpsuite
代理的设置:-
在宿主机上的
clash for windows
上将下列功能打开,同时记住宿主机的ip
和下面的Port: 7891
-
再在
burpsuite:setting
中找到下面的选项,更具上述的端口和ip
填写到下面对于的输入框内。 -
像虚拟机整个机器的vpn代理也是可以通过这种方式实现的
-
-
在
burpsuite
设置完成后,再次访问页面也是没有什么搜获的(只是加载速度快了)。但是当对blog
这个功能进行访问的时,发现网址不仅重定向到/wordpress
还出现了加载问题。当查看源码不难发现,是由于网页请求了一个
//raven.local
地址。再结合打的靶机名字为Raven
不难推测这个域名很有可能就是靶机的域名。当修改
/etc/hosts
将该域名和靶机ip
绑定后可以发现网页成功的渲染。 -
对于网页的手动测试并没有太大搜后,由于靶机是
wordprss
搭建下面进行路径爬取和使用wpscan
工具就很有必要了:-
键入
wpscan --url http://10.0.0.10 -e vt,vp
对靶机进行框架漏洞的测试,没有发现什么漏洞。 -
dirb http://10.0.0.10
进行路径爬取,发现几个重要的路径:/vendor,/wordpress/wp-admin,/wordpress/wp-includes
。其中有个非常重要的路径:/wp-content/uploads
,记得对wp-admin
这个后台网站进行密码爆破,即使没有成功😭
-
-
挨个浏览爬取到的路径和其中包含的其他网页,是会发现下面
flag1, flag3
。其中flag1
尤为关键,包含了当前网站发布的绝对路径:/var/www/html/vendor
。还有一下的重要文件和相关信息:/vendor:
PATH:
upload:
PHPMailerAutoload.php/README.md:
- 由于是个
php
网站打开是会渲染的,但是我们通过百度搜索不难发现是个php
搭建的一个邮件网站。通过README.md
也不难看出,这是个PHPMailer
框架的网页。 - 项目源码:GitHub - PHPMailer/PHPMailer: The classic email sending library for PHP
SECURITY.md/VERSION:
-
当前
PHPMailer
版本为:5.2.16
-
提示在
5.2.18
前是具有一个漏洞的CVE-2016-10033
,这是作者给的明显提示。
- 由于是个
漏洞利用
漏洞脚本的使用非常非常建议先阅读源码,判断是否需要进行相应的修改来让exp成功运行
-
根据上面的推导,我们对相关的漏洞脚本进行搜索。
searchsploit phpmailer
,我们可以选择sh,py
结尾的远程执行的脚本尝试执行。 -
40968.sh
是没有成功的即使进行一定的修改后,但是当使用40974.py
(修改后)是可以成功的。-
target
:用来指定攻击对象,注意通过在网上的检索我们可以发现这个漏洞的产生具体地点如下功能的页面,对应到靶机发布的网页上就是/contact.php
对应功能。所以target
不能简单的就使用目标靶机的ip
-
/s.php
:源代码为/backdoor.php
但是多次使用该脚本都无法成功,尝试将其更改为s.php
的命名后发现可以成功的使用该脚本 -
10.0.0.7
:确认反弹shell
的ip
和端口 -
/var/www/html/s.php
:在更改后门文件名字的同时还要修改后门的保存路径
-
-
通过
python3
调用该脚本成功的执行,易知后门文件s.php
写入到靶机的网站更目录下。如果我们成功的访问到s.php
就会自动的反弹shell
,结果显而易见成功突破边界。
信息搜集
- 先看靶机的内核版本是比较老的,对应的版本也是具有内核漏洞的(该靶机具有多个提权漏洞)。
-
键入
ps -aux | grep root
查看靶机上有哪些程序,其中mysqld_safe
应该引起高度重视。表明mysql
数据库的权限也是root
,进而想到通过数据库进行提权是非常非常重要的一个思路。是MySQL数据库服务器的启动脚本程序。它是一个用于在Unix和类Unix系统上启动和管理MySQL服务器进程的脚本。
-
升级
shell
:python -c 'import pty;pty.spawn("/bin/bash")'
,然后直接访问www/html
下网站的相关配置:cat wp-config.php
,获取的到数据库的登陆密码和用户为:root: R@v3nSecurity
。(使用这个密码进行ssh爆破是非常重要的一个步骤,不过很可惜没有成功。密码复用非常重要,非常重要,非常重要) -
成功登陆数据库
数据库提权
-
第一种提权自接使用
\! /bin/bash
这个最简单的提权尝试,结果失败还是为www用户。 -
通过
udf
提权,在kali
上搜索相关mysql_udf
提权的文件,键入下列命令查找我们需要的脚本。find / -iname "*mysqludf*" -type f 2>/dev/null
通过刚刚的uname命令知靶机为
x86 64
为靶机,将对应链接库更改为udf.so
然后通过python
传到靶机的/tmp
目录下。同时键入mysql
命令来得到靶机插件的位置:show variables like '%plugin%'
-
但是当我们使用
cp
命令将udf.os
复制到/usr/lib/mysql/plugin/
发现www
用户是没有权限的,那么我们就需要使用mysql
命令来帮助我们实现文件的拷贝。-
use mysql;
:到数据库自带的数据库中 -
create table exp(line blob);
:创建一个exp
表,其中有个为line
的列类型为blob
(是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。)MySQL的四种Blob类型(除了在存储的最大信息量上不同外,他们是等同的)。
类型 大小(单位:字节) TinyBlod 最大255 Blod 最大65K MediumBlob 最大16M LongBlob 最大4G -
insert into exp values(load_file('/tmp/udf.so'));
:将udf.so
。在MySQL中,LOAD_FILE()函数读取一个文件并将其内容作为字符串返回。 Mysql注入中的outfile、dumpfile函数详解 - gxy* - 博客园 (cnblogs.com)
-
-
os
文件成功的导入成功,接下来就是进行udf
的构造,create function sys_exc returns interger soname 'udf.so'
returns interger
:表示sys_exc
函数返回的是整形soname 'udf.so'
:表示共享文件为udf.so
select sys_exec('id > /tmp/out.txt')
:之所以这样构造函数,调用函数都是比较固定的渗透流程。也时间建立在udf.so
这个分享文件基础上的。表示会在shell
中执行id > /tmp/out.txt
该命令。
-
翻阅
/tmp
目录, 虽然www
用户无法查看生成的out.txt
文件,但是可以明确我们的udf
漏洞是可以利用的 -
反弹
shell
就是非常容易,然后再通过find
命令查找剩下的两个flag
,到处打靶结束。
相关工具/命令
命令
less
-
what?
它提供了一种方便的方式来查看大型文本文件,而无需将整个文件加载到内存中。
-
相关使用
- 浏览文件:一旦文件打开,你可以使用
less
的各种导航键来浏览文件内容。例如,使用向下箭头键向下滚动一行,使用向上箭头键向上滚动一行。 - 搜索文本:按
/
键后输入要搜索的文本,然后按回车键,less
将会高亮显示匹配的文本,并定位到第一个匹配的位置。按n
键可以跳到下一个匹配项。 - 跳转页面:使用
Ctrl + F
快捷键向前翻页,使用Ctrl + B
快捷键向后翻页。 - 退出
less
:按q
键即可退出less
- 浏览文件:一旦文件打开,你可以使用
工具
wpscan
-
what? 返回
用于探测
wordpress
框架网站漏洞的工具,主要是对网站插件的扫描。就是wordpress
使用的实在太广泛了,专门对其产生了一种扫描工具。 -
具体实例
wpscan --url http://10.0.0.10 -e vt,vp
-e
:表示枚举各个漏洞是否有漏洞vp
:只枚举漏洞的插件vt
:只枚举漏洞的主题
反弹shell生成器
一个格式反弹shell命令的生成器网址:https://shell.nctry.com/
相关payload
mysqludf
-
what?
kali自带的用于
mysql——udf
提权用的文件,可以通过下面的命令确定准确的位置:find / -iname "*mysqludf*" -type f 2>/dev/null
复盘/相关知识
重要
udf提权
-
what? 返回
User-Defined Function(用户自定义函数)
-
如何防范
- 限制UDF的使用权限:确保只有受信任的用户或角色可以创建和执行UDF。限制UDF的使用范围可以降低潜在攻击者利用UDF进行提权的风险。
- 审查UDF代码:对于由用户创建的UDF,管理员应该审查其代码以确保其安全性。检查UDF中是否存在任意代码执行、系统命令执行或其他危险操作的漏洞。
- 保持数据库软件更新:及时安装数据库供应商提供的补丁和安全更新,以修复已知的漏洞和提升数据库的安全性。
- 实施访问控制策略:使用数据库的访问控制机制,如角色、权限和访问控制列表(ACL),以确保只有授权用户能够执行敏感操作和访问关键数据。
- 监控和日志记录:定期监控数据库的活动,并记录和分析日志以检测潜在的异常行为和安全事件。
了解
rpcbind
-
what? 返回
在计算机上提供远程过程调用(RPC)的绑定和映射功能。RPC是一种通信机制,允许不同的进程在网络上相互通信和交换数据。rpcbind服务使用标准的RPC绑定协议,并且是与操作系统紧密关联的。它通常在启动过程中自动启动,并在计算机上运行作为后台进程。rpcbind服务的端口号通常是
111
,多用于企业级网络。
.so和.dll的区别
-
what? 返回
.so
文件是Linux下的动态链接库,类似于Windows下的.dll
文件。动态链接库是一种可执行文件,它在运行时才被载入内存,并被映射到进程的地址空间中。动态链接库可以被多个进程共享,从而节省内存空间。其中,.so.y
表示版本号。Linux下的库必须以lib开头,用于系统识别(如:libjpeg.a libsdl.so
)