thewall靶机

includes.php 内有文件读取漏洞
image



一开始是想着直接用为协议写入一句话木马但是后来发现不行
因为他的文件读取方式长这样

点击查看代码
<?php
include ('/var/www/html/waf.php');
$page = str_replace(array('%','<','?','\\'), '',$_GET['display_page']);
if(file_exists($page)) { include($page); }
?>

是先判断你是否是个存在的文件再include的




直接利用日志注入

image



用蚁剑连
连上之后我们发现我们具有如下使用权限
能用john的身份 使用exifftool的命令
image

搜索一下
image
发现能直接创建写入文件




那么我们直接写入ssh的公钥给这个john用户
我们已经将自己的ssh公钥写在tmp里面了 然后就将tmp内容写入/home/john/.ssh/authorized_key

sudo -u john /usr/bin/exiftool -filename=/home/john/.ssh/authorized_keys tmp

ssh登录
image




然后我们会发现连wget都没有
我们就利用scp 将busybox传到靶机
image




然后我们用busybox wget一下linpeas.sh脚本
使用linpeas.sh
发现 /usr/sbin/tar 具有cap_dac_read_search的能力
image




这里解释一下linux的关于文件能力(capabilities)的概念:
关于文件能力(capabilities)的概念
在 Linux 系统中,文件能力(capabilities)是一种比传统的用户、组和权限位(如rwx)更细粒度的权限管理机制。传统的权限管理基于用户、组和简单的读(r)、写(w)、执行(x)权限位,但对于一些复杂的操作和安全需求,这种方式可能不够灵活。文件能力允许将特定的权限独立地分配给可执行文件。

能力细分表
CAP_CHOWN(更改文件所有者和所属组能力)
含义:允许进程更改文件的所有者(UID)和所属组(GID)。通常,只有超级用户(root)能够执行此类操作。
应用场景:例如在文件共享系统中,特定的文件管理模块可能需要修改文件的归属关系,但不需要完整的 root 权限。如果被授予 CAP_CHOWN 能力,就可以在一定范围内进行这些操作。
CAP_DAC_OVERRIDE(自主访问控制覆盖能力)
含义:进程可以绕过文件和目录的常规自主访问控制(DAC)限制。在正常的 DAC 规则下,用户对文件和目录的访问受所有者、所属组以及权限位(如rwx)的约束。具有此能力的进程可以突破这些限制进行读、写和执行操作。
应用场景:在某些系统管理工具中,可能需要访问其他用户拥有的文件或目录来执行维护操作。如果该工具被授予 CAP_DAC_OVERRIDE 能力,并且对目标文件或目录所在的父目录有基本的访问权限(例如执行权限),就可以操作这些文件或目录。
CAP_DAC_READ_SEARCH(自主访问控制读和搜索能力)
含义:使进程能够绕过常规的 DAC 限制进行读操作和搜索操作(例如遍历目录结构来查找要操作的文件)。
应用场景:对于文件搜索工具,若需要在不违反基本安全策略的情况下搜索用户可能无常规权限访问的目录,可以被授予此能力。
CAP_FOWNER(模拟文件所有者能力)
含义:进程在操作文件时可以模拟文件所有者的权限。例如,对于某些文件操作,即使实际执行进程的用户不是文件所有者,也能以文件所有者的权限进行操作。
应用场景:在文件备份或恢复系统中,执行备份或恢复操作的进程如果被授予 CAP_FOWNER 能力,可以像文件所有者一样进行文件的读取、写入等操作,而不需要实际拥有文件所有者的身份。
CAP_FSETID(设置文件标识符能力)
含义:允许进程设置文件的标识符(fsetid)。文件标识符通常用于确保文件在某些操作(如执行 execve 系统调用)后的唯一性识别。
应用场景:在安全相关的文件操作中,例如确保某些加密文件在解密和执行过程中的唯一性标识,具有此能力的进程可以设置文件标识符。
CAP_KILL(发送信号能力)
含义:使进程能够向任何进程发送信号,而通常情况下,用户只能向自己拥有的进程发送信号。
应用场景:在系统监控和管理工具中,如果需要终止其他用户的进程,可以被授予 CAP_KILL 能力。
CAP_SETGID(设置组 ID 能力)
含义:允许进程设置其实际组 ID(GID)、有效组 ID(EGID)和保存的组 ID(SGID)。
应用场景:在多用户系统中的用户组管理工具中,可能需要临时改变组 ID 来执行特定的组相关操作,如加入或离开某个用户组。
CAP_SETUID(设置用户 ID 能力)
含义:允许进程设置其实际用户 ID(UID)、有效用户 ID(EUID)和保存的用户 ID(SUID)。
应用场景:类似于 CAP_SETGID,在需要临时改变用户身份以执行特定操作的情况下,如以另一个用户的身份进行文件访问或系统操作。
CAP_SETPCAP(设置能力能力)
含义:使进程能够对其他进程授予或删除 capabilities。这是一种对 capabilities 进行管理的高级能力。
应用场景:在系统的 capabilities 管理框架内,特定的系统管理进程可能被授予 CAP_SETPCAP 能力来调整其他进程的 capabilities。
CAP_LINUX_IMMUTABLE(设置文件不可变能力)
含义:允许进程设置文件的不可变(immutable)属性,具有此属性的文件不能被修改、删除或重命名。
应用场景:在系统安全策略中,为了保护关键的系统文件,可以使用具有 CAP_LINUX_IMMUTABLE 能力的进程来设置文件为不可变状态。
CAP_NET_BIND_SERVICE(网络绑定服务能力)
含义:使进程能够将网络服务绑定到特权端口(小于 1024 的端口),而通常只有超级用户(root)可以将网络服务绑定到这些端口。
应用场景:在网络应用开发中,如 Web 服务器、邮件服务器等需要绑定到特权端口提供服务的程序,如果被授予 CAP_NET_BIND_SERVICE 能力,就可以以普通用户身份运行并绑定到特权端口,提高了安全性。
CAP_NET_BROADCAST(网络广播能力)
含义:允许进程进行网络广播操作。在网络环境中,广播是将数据发送到网络中的所有主机的一种通信方式。
应用场景:在网络监控或某些网络协议(如 DHCP,它需要进行广播来发现客户端和服务器)相关的应用中,可能需要此能力。
CAP_NET_ADMIN(网络管理能力)
含义:授予进程执行各种网络管理操作的能力,如配置网络接口、设置路由表等。
应用场景:网络管理工具,如用于配置网络连接、设置防火墙规则等的工具,需要此能力来执行相关操作。
CAP_NET_RAW(原始网络能力)
含义:使进程能够使用原始套接字(raw sockets)进行网络通信。原始套接字允许直接访问网络层协议(如 IP 协议),可以用于创建自定义的网络协议或进行网络层的监控和调试。
应用场景:网络安全监控工具、自定义网络协议开发工具等可能需要 CAP_NET_IGNORE_NETLINK_CON 此能力。
CAP_IPC_LOCK(进程间通信锁定能力)
含义:允许进程锁定共享内存段和信号灯等进程间通信(IPC)资源,防止其他进程对这些资源的访问。
应用场景:在多进程并发访问共享内存或信号灯的场景中,需要对这些资源进行独占性保护的进程可以被授予此能力。
CAP_IPC_OWNER(进程间通信所有者能力)
含义:进程在操作进程间通信(IPC)资源时可以模拟 IPC 资源所有者的权限。
应用场景:类似于 CAP_FOWNER 在文件操作中的作用,在 IPC 资源管理和操作中,如果需要以 IPC 资源所有者的权限进行操作,可以被授予此能力。
CAP_SYS_MODULE(系统模块能力)
含义:允许进程加载和卸载内核模块。内核模块是扩展 Linux 内核功能的动态可加载组件。
应用场景:在系统更新或定制内核功能时,相关的系统管理工具可能需要此能力来加载或卸载内核模块。
CAP_SYS_RAWIO(系统原始 I/O 能力)
含义:使进程能够执行原始的输入 / 输出(I/O)操作,例如直接访问硬件设备的 I/O 端口和内存映射的 I/O 区域。
应用场景:设备驱动开发工具、硬件诊断工具等可能需要此能力来直接与硬件设备进行交互。
CAP_SYS_CHROOT(系统改变根目录能力)
含义:允许进程执行 chroot 系统调用,即将进程的根目录改变为指定的目录,这在创建隔离的运行环境(如容器化技术的早期实现)中非常有用。
应用场景:在创建安全的测试环境、应用程序沙箱等场景中,相关进程可以被授予此能力来改变根目录。
CAP_SYS_PTRACE(系统进程跟踪能力)
含义:使进程能够使用 ptrace 系统调用对其他进程进行跟踪,包括查看其他进程的内存、寄存器状态等信息。
应用场景:调试工具(如 gdb)需要此能力来跟踪和调试其他进程的运行。
CAP_SYS_PACCT(系统进程记账能力)
含义:允许进程进行进程记账操作,例如记录进程的资源使用情况等。
应用场景:在系统资源管理和监控工具中,可能需要此能力来收集进程的资源消耗数据。
CAP_SYS_ADMIN(系统管理能力)
含义:这是一个比较宽泛的能力,授予进程执行多种系统管理操作的能力,如管理文件系统、设置系统时间等。
应用场景:系统管理工具,如用于磁盘管理、系统时间同步等操作的工具,可能需要此能力。
CAP_SYS_BOOT(系统启动能力)
含义:允许进程执行与系统启动相关的操作,如修改启动参数等。
应用场景:在系统维护和修复过程中,特定的工具可能需要此能力来调整系统启动相关的设置。
CAP_SYS_NICE(系统调整优先级能力)
含义:使进程能够调整其他进程的优先级(nice 值)。
应用场景:在系统资源调度和管理工具中,可能需要此能力来优化系统性能,例如根据任务的紧急程度调整进程的优先级。
CAP_SYS_RESOURCE(系统资源管理能力)
含义:允许进程管理系统资源,如设置进程的资源限制等。
应用场景:在资源受限的系统环境中,如云计算环境中的容器资源管理,相关工具可能需要此能力来设置资源限制。
CAP_SYS_TIME(系统时间管理能力)
含义:使进程能够设置系统时间和时钟。
应用场景:在需要进行时间同步或调整的系统管理场景中,如网络时间协议(NTP)客户端或手动调整系统时间的工具,需要此能力。
CAP_SYS_TTY_CONFIG(系统终端配置能力)
含义:允许进程配置终端设备,如设置终端的波特率、字符编码等属性。
应用场景:在终端管理工具中,可能需要此能力来对终端设备进行配置。
CAP_MKNOD(创建特殊文件能力)
含义:使进程能够创建特殊文件,如块设备文件、字符设备文件和命名管道(FIFO)。
应用场景:在设备驱动开发和文件系统管理工具中,可能需要此能力来创建特殊类型的文件。
CAP_LEASE(文件租约能力)
含义:允许进程在文件上设置租约(lease)。文件租约是一种机制,用于在文件被其他进程访问之前获取独占性的访问权限。
也就是说/usr/sbin/tar 具有root的读取能力


又发现在根目录下有 id_rsa 的ssh登录秘钥
image



我们可以利用/usr/sbin/tar 将id_rsa重新压缩并 然后再解压缩
这样我们就可以读取和使用该秘钥文件
将id_rsa文件压缩到tmp目录下面
/usr/bin/tar -zcvf /tmp/c.tar /id_rsa 这一步之后压缩的c.tar文件就属于当前用户了
tar xvf b.tar 解压文件




ssh -i id_rsa root@127.0.0.1 ssh登录root用户
image
提权成功

posted @ 2024-09-16 16:58  WSssSW  阅读(12)  评论(0编辑  收藏  举报