渗透测试之linux提权技术梳理

admin 2024年2月15日16:03:28评论12 views字数 3176阅读10分35秒阅读模式

前言

在做测试的过程中,拿到的shell通常都是低权限的。如果想要进一步得进行操作,不可避免得要进行提权操作,将shell权限提升至root。本篇文章总结了在linux上常见的提权方式以及如何去检测提权。

文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~

linux提权常用方法

linux提权大致可以分为下面的几种方式,我们最常见的应该就是内核提权。

渗透测试之linux提权技术梳理

在进行linux提权时,一般都要先进行信息收集,包括linux的内核版本,运行的应用,文件等信息,然后根据收集到的信息,选择适当的方式进行提权操作。

下面再来看看具体每种方式如何去利用

内核提权

内核漏洞是我们最先想到的提权方法,也是最常用的方式。如果机器的内核存在提权漏洞,那么可以通过内核漏洞进行一键提权。

需要注意的是内核漏洞一般利用的溢出,条件竞争等方式,在使用的过程中,有一定的几率使机器宕机。要选择那种成功率高危害性小的漏洞进行利用。

渗透测试之linux提权技术梳理

下面以自己搭建的虚拟机为例,来演示如何利用内核漏洞提权。

1)收集信息

内核版本:uname -r

渗透测试之linux提权技术梳理

查看发行版本:cat /etc/issue cat /etc/*-release

渗透测试之linux提权技术梳理

查看目前权限和用户:whoami id

渗透测试之linux提权技术梳理

得到信息:内核版本:2.6.32-431.el6 cpu架构(x86_64) 发行版:rehad 6.5

2)查找内核是否存在提权漏洞

查找内核漏洞可以通过各种公开的漏洞库进行查找,在kail中可以通过searchsploit命令来查找是否存在相关的漏洞。

searchsploit linux 2.6.32-431.el6

本次利用选择的是CVE-2016-5195(脏牛漏洞)

(Linux kernel>2.6.22 (released in 2007))

上下载相应的exp下,上传到服务器然后执行即可得到管理员权限。(注意提权以后原来的root用户可能不能正常登陆)

直接添加了一个新的用户。

渗透测试之linux提权技术梳理

系统应用漏洞提权

除了利用内核提权以外,还可以利用系统上的应用进行提权,如2021年报出来的polkit漏洞。

查看polkit是否在漏洞影响版本内

渗透测试之linux提权技术梳理

执行脚本,提升到root权限

渗透测试之linux提权技术梳理

通过获取ssh私钥或者写入ssh公钥提权

果系统用户配置了ssh免密登录并且该用户的家目录设置为其它用户可访问,那么可以通过获取目标系统的ssh私钥或者写入公钥,达到通过ssh登录系统的目的。

拿到shell后,检查那些用户的家目录是可以被访问的,如果可以被访问,看有没有.ssh的隐藏目录。如果有的话,获取id_rsa文件。还可以将自己公钥写入到这个id_ras的文件中。

ssh秘钥所在的位置:~/.ssh/

渗透测试之linux提权技术梳理

如下:

首先检查存在bash的用户:cat /etc/passwd |grep bash

检查这些用户的家目录是否可以访问:cd /home/user1/

如何存在ssh私钥文件,则可以将其复制下来

渗透测试之linux提权技术梳理

复制 id_rsa的内容,设置权限:chmod 600 id_rsa。然后尝试登录目标:ssh -i id_rsa user1@ip

明文密码提权

看当前用户对passwd和shadow文件的权限。一般分为下面的两种:

1)如果这两个文件可写,可以写入一个已经知道的hash值

2)如果两个文件可读,利用hash、john等对其进行爆破

渗透测试之linux提权技术梳理

密码复用

如果管理员的安全意识比较低,可能会出现密码复用的情况。可以查看系统上web,数据库等应用的配置文件去查找密码,有可能也就是root的密码。

计划任务提权

非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,并且默认这些程序以 root 权限执行。

渗透测试之linux提权技术梳理

如果计划任务执行了某个脚本,幸运的是这个脚本,当前用户可写。那么可以通过修改该脚本去创建一个root权限的bash文件。如写入下面的内容:

import os os.system('cp /bin/sh /tmp/sh') os.system('chmod u+s /tmp/sh') 

SUID提权

SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行,比如passwd命令,就是以root权限运行来修改shadow的。可以通过这种类型的文件来进行提权。

渗透测试之linux提权技术梳理

通过下面的命令查找具有SUID属性的文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

具有SUID权限的文件,一般有三种利用方式:程序具有交互功能,劫持环境变量,修改SUID文件内容

1)借助程序功能

nmap就曾出现过提权漏洞。低权用户通过打开nmap交互模式以root执行任意系统命令。

2)劫持环境变量

如果发现带有suid的程序使用了system函数,可以采用劫持环境变量的方式,system函数是继承环境变量的,因此我们通过替换环境变量可以达到执行任意命令的效果。

如下面的文件suid-exp,该代码中使用了system函数cat。

#include<stdlib.h>
#include <unistd.h>
int main()
{
setuid(0);//run as root
system("id");
system("cat /etc/shadow");
}

系统在查找命令的时候,是根据环境变量来查找的

渗透测试之linux提权技术梳理

如果我们设置一个同名的cat文件,并把该文件放到路径的最前方,那么程序就会先执行我们设置的命令,这就是劫持环境变量

cat >> /tmp/cat <<EOF
#!/usr/bin/python
print "this is not the true cat"
print "here is a root shell!"
import pty;pty.spawn("/bin/sh")
EOF

将上面我们创建的cat命令放到环境变量的前面

PATH=/tmp:$PATH#设置PATH,优先从/tmp查找程序

./suid-exp#执行suid程序,因为PATH被劫持,system("cat /etc/shadow");会执行我们的假cat

3)修改SUID文件

带有SUID权限的文件如果可写,可以直接修改其文件内容来获取高权限。

sudo提权

sodu 全称 Substitute User and Do,用来临时赋予root权限运行某个程序。在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令。

理可能为了方便对/etc/sudoers进行编辑成sudo免密码,此时可以直接修改sudoers,赋予用户sudo权限

vim /etc/sudoers;添加:test ALL=(ALL:ALL) NOPASSWD:ALL #test为我们的用户

另外,一些命令可以使用sudo提权到root权限,如果知道当前用户的命令也可以提升到root权限,如find命令提权

sudo find . -exec /bin/sh ; -quit

第三方服务提权

提权时还可以利用第三方服务进行提权,如NFS,mysql等

渗透测试之linux提权技术梳理

提权漏洞的检测方式

上面说了提权的一些方式,那么如何对提权的行为进行检测呢?

可以从下面的几个方面去做

1)监控passwd和shadow文件是否出现了除root以外uid或gid为0的用户

2)监控进程权限的变动。如进程的euid为0,它的父进程euid不等于0并且父进程的pid不为0或者1,这种可以认为为提权进程,但是这种会产生很多误报,还需要根据实际情况排除掉正常的情况。

总结

本篇文件简单总结了一下linux常用的提取方式,上面的只是一部分还有很多的方式没有写出来,欢迎各位师傅来交流。

原文始发于微信公众号(疯猫网络):渗透测试之linux提权技术梳理

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日16:03:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试之linux提权技术梳理http://cn-sec.com/archives/2188302.html

发表评论

匿名网友 填写信息