接上一篇:【Linux】常用提权总结-上篇
7、NFS
原理:
nfs类似于windows共享,默认是开启2049端口,用来挂载某个目录来进行共享
利用:
当nfs配置不当时,我们可以用来提权,首先需要有一台机器当客户端,我们把目标机器的nfs共享,挂载过来,然后复制一个bash进去,并给suid权限,然后目标机器里就有一个suid权限的bash了,这时候我们用目标机的普通用户执行bash就是root权限了:
挂载nfs:
mount -t nfs 192.168.1.1:/home/test
然后cd进入该目录,拷贝bash进去
cp /bin/bash .
给suid权限
chmod +s bash
然后使用普通用户去目标机执行即可获取ROOT权限。这里还要注意,我们执行bash的时候需要加上-p参数。
p参数说明:不提供的情况下,打开bash权限是当前实际用户,提供的情况下,会打开特权模式,像上继承euid,因为bash有suid权限,所以这里是root。
8、PATH
原理:
Linux中的PATH是一个环境变量,它指定了可执行程序所在的目录,例如bin和sbin目录,当我们在终端运行一个命令时,系统就会根据PATH来查找相关的可执行文件。
利用:
ps结合PATH提权
首先编译以下c代码,功能为调用ps命令。
void main()
{
setuid(0);
setgid(0);
system("ps");
}
随后以root身份赋予777权限,然后再赋予一个suid权限。
此时普通用户执行这个shell文件,可以看到就是执行的ps命令。
利用:到tmp目录下,把bash写到一个ps文件中,然后修改PATH变量添加tmp目录,再去执行shell,就会获得一个root权限。
过程:root给一个可执行文件赋予了suid,而此文件又调用了ps命令,这时修改PATH把tmp添加到头的位置,系统再执行就会先去tmp目录下找,tmp目录下放的是恶意程序,从而导致恶意程序以root权限运行。
情况:这种情况适用于,给普通用户分配了个可执行程序,且该程序有suid权限,我们又知道该程序会调用哪些命令,那么就可以结合PATH来进行提权。
cp结合PATH提权
除了把bash写到ps文件中以外,还可以把类似于sh的可执行程序复制过来。
符号连接结合PATH提权
还可以通过ln命令来设置一个连接,连接到sh,但条件是当前可执行程序所在目录要有相关权限,我这里就直接sudo创建了。
如果在tmp下创建连接,这里测试并不会调用。
上面以ps为例,其它命令都可以,例如id、whoami、cat、vim等等,方法都一样,只是改下tmp目录下的文件名。
9、LD_PRELOAD
原理:
LD_PRELOAD是Linux下的一个环境变量,程序运行时都会加载一些so文件,类似于windows下程序加载dll,而LD_PRELOAD可以指定程序运行前加载的动态连接库。
10、Cron
原理:
cron jobs是一个计划任务,不止可以用来权限维持,还可以用来提权
利用:
这个就很简单了,就看是否有计划任务在跑,把脚本内容改成赋予权限命令即可,只需要添上一句
os.system('chmod u+s /bin/bash')
等待计划任务运行,直接就有权限了,直接/bin/bash -p来继承上级权限,除此之外还可以修改sudoers或者添加passwd。
11、Lxd
原理:
Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。
Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。
利用链接:https://www.freebuf.com/articles/network/216803.html
12、Capability
原理:
capability可分割root权限,把root特权分割成不同的权限,然后给与普通用户不同的权限:
- CAP_CHOWN:修改文件属主的权限
- CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
- CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
- CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
- CAP_FSETID:允许设置文件的setuid位
- CAP_KILL:允许对不属于自己的进程发送信号
- CAP_SETGID:允许改变进程的组ID
- CAP_SETUID:允许改变进程的用户ID
- CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
- CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
- CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
- CAP_NET_BROADCAST:允许网络广播和多播访问
- CAP_NET_ADMIN:允许执行网络管理任务
- CAP_NET_RAW:允许使用原始套接字
- CAP_IPC_LOCK:允许锁定共享内存片段
- CAP_IPC_OWNER:忽略IPC所有权检查
- CAP_SYS_MODULE:允许插入和删除内核模块
- CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
- CAP_SYS_CHROOT:允许使用chroot()系统调用
- CAP_SYS_PTRACE:允许跟踪任何进程
- CAP_SYS_PACCT:允许执行进程的BSD式审计
- CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
- CAP_SYS_BOOT:允许重新启动系统
- CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
- CAP_SYS_RESOURCE:忽略资源限制
- CAP_SYS_TIME:允许改变系统时钟
- CAP_SYS_TTY_CONFIG:允许配置TTY设备
- CAP_MKNOD:允许使用mknod()系统调用
- CAP_LEASE:允许修改文件锁的FL_LEASE标志
capability和suid的区别在于:suid是针对某个用户给权限,而capability针对的是某个程序。在设置程序能力时,有三个选项可选:
1,inheritable,简称i,表示是否可继承。
2,permitted,简称p,表示是否允许使用。
3,effective,简称e,表示特权是否有效。
setcap命令用来设置能力,例如setcap cap_setuid+ep /home/demo/python3,就表示home/demo/python3这个程序添加了setuid能力,即改变进程uid的能力,+ep就表示能力有效,且允许使用。
都需要特定的环境,用的时候百度吧,懒得做笔记了
往期精彩:
点个在看你最好看
原文始发于微信公众号(澜图安全):【Linux】常用提权总结-下篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论