『渗透测试』提权
基本概念
-
什么是提权
在渗透测试的时候,我们通过漏洞获取到目标主机系统上的 shell 用于执行系统命令,从而达到控制目标主机的目的。但是我们获取到的初始 shell 可能为低权限用户,这时我们需要想办法提升权限为高权限用户,这个过程就叫做提权(系统权限提升)。
-
为什么 shell 会有高低权限的区别?
因为通常情况下 Web 服务架构中:后端 linux 服务器通过 Tomcat 中间件提供 Web 服务。
如今的计算机操作系统都是基于多用户设计的,通常一台计算机上同时存在着多个不同权限的系统用户,而在 Linux 服务器上,每个服务都需要先赋予某个用户权限才能运行。假设 tomcat 服务以普通用户
www-data
的权限运行并提供 Web 服务,此时如果黑客通过 Web 漏洞获取到 shell,此 shell 就是一个www-data
用户权限的 shell——此时就需要提权。反之,若 tomcat 是以
root
用户权限运行,那黑客获取到的 shell 就是 root 权限。 -
为什么需要提权
获取更高权限的 shell,能为渗透测试后期的工作带来便利。
- 高权限能对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
- Linux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展
- Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透
linux提权方法
暴力破解
-
信息收集
在前期对目标的信息搜集可能会得到一些存储着用户密码的文件,或者是可能会获取到一些如数据库、后台 web 密码。
极有可能管理员会复用这些密码。于是便可以直接在 shell 中使用 sudo 命令(SSH 中不可用)尝试提权至管理员权限。还有就是查看一下桌面上的文件,有时候管理员为了方便记忆,会把一些账号密码放在桌面上的文件里。还有浏览器里面可能会存密码!
-
历史记录
通过查看历史记录,查看是否有有用的信息,有的管理员为了方便登陆mysql或其他软件时,不经意间加上参数
-p
,从而将密码暴露出来或者一些.sh
脚本连接mysql、vpn等,查看对应的配置文件即可拿到账号密码1
2# 保存了当前用户使用过的历史命令
cat ~/.bash_history
内核漏洞提权
-
原理
利用操作系统内核中的安全漏洞,将当前用户的权限提升到 root。由于内核拥有对整个系统的控制权限,一旦被利用成功,攻击者几乎可以掌控整台主机。
-
具体流程
获取目标系统的内核信息及版本信息。
1
2
3
4
5
6# 查看linux内核版本和架构信息
uname -a
# 查看内核版本及其编译器信息
cat /proc/version
# 查看操作系统发行版本信息
lsb_release -a根据内核版本获取对应漏洞以及exp
1
2# 利用exploitdb搜索相关漏洞
searchsploit Ubuntu 16.04使用exp对目标进行攻击,提权
-
工具
- 信息收集配合kali提权
- Linux Exploit Suggester
- LinPEAS
-
例子:Dirty COW 脏牛漏洞
Dirty COW 是一个特权升级漏洞,可以在每个
Linux发行版
中找到。这个漏洞的特别之处在于,防病毒和安全软件无法检测,一旦被利用,根本无从知晓。
sudo提权
-
原理
sudo 允许普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。但是在一些场景下,管理员为了平常运营方便给sudoer文件配置不当,从而导致权限提升的问题产生。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
-
sudo提权方法
输入下面命令,可以根据
/etc/sudoers
文件中的配置,显示允许当前用户可以通过sudo
执行的命令清单。1
sudo -l
可以看到,当前用户可以通过sudo执行echo、find等命令,二无需密码
然后再分别地利用这些命令,实现提权
各种命令的sudo提权利用方式,参考:Linux提权-70种sudo提权汇总
SUID提权
-
原理:SUID(set UID,设置用户ID)是一种LINUX的权限机制,在执行有SUID权限的文件时,会使调用者暂时获得这个文件拥有者的权限。例如:当我们以一个普通用户的身份去运行一个root用户所有的SUID文件,那么在执行该文件的时候我们就可以获取到root权限
-
条件
- 只有可以执行的二进制程序文件才能设定SUID权限
- 命令执行者对二进制程序文件有执行(x)权限
- SUID权限只在该程序执行过程中有效
-
SUID提权方法
1)全局搜索有SUID权限的文件
1
find / -perm -4000 -type f 2>/dev/null
2)常见的具有提权功能的linux可执行文件
1
2
3
4
5
6
7
8nmap
vim
find
bash
more
less
nano
cp各种linux可执行文件的SUID提权方式:【安全科普】Linux提权——利用可执行文件SUID
Passwd 文件提权
-
原理:
/etc/passwd
和/etc/shadow
文件是 Linux 系统登录认证的关键文件,一般passwd
里面储存了用户(用户可读但不可修改),shadow
里面是密码的hash(用户不可读且不可修改),如果系统运维人员对passwd
或shadow
文件的内容或权限配置有误,则可以被利用来进行系统提权。 -
/etc/passwd
文件功能/etc/passwd
文件用于保存用户信息,每一行代表一个用户,每一行通过冒号:
分为七个部分:-
这里的字段 x 表示该用户密码哈希存放在
/etc/shadow
文件中,如果密码不用存在/etc/shadow
中,可以直接将x
替换为「密码」
即可。打开
/etc/passwd
文件可以发现,大部分的密码字段都是x,表示存储在shadow
文件中,但是因为管理员的失误,passwd
文件中可能也会有加密后的密码。在这种情况下,可以使用hash 破解神器——
john
来进行破解
在用户登录的时候:
1)检测「输入的用户名」是否与
/etc/passwd
文件中某一行第一个字段匹配。2)若匹配成功,再对比该行第二个字段的密码,如果均匹配成功即登录成功。
3)登录成功之后所具有的权限,通过第三个字段
UID
和第四个字段GID
确定。其中UID=0
代表 root 用户,也就是说——无论第一个字段代表的用户名是什么,只要 UID=0,则该账户就拥有 root 权限——这点在提权中非常重要。可见,如果我们能够对
/etc/passwd
文件内容进行伪造、篡改,那就能很轻易的登录成功并获取任意用户权限。 -
-
通过 /etc/passwd 文件提权
适用场景:/etc/passwd 具有写权限
使用下面的命令查看
/etc/passwd
和/etc/shadow
文件的权限:1
ls -alh /etc/passwd /etc/shadow
假如输出的结果如下,表示
/etc/passwd
文件的权限为:所有者可以读写、组用户可以读、其他用户可以读。/etc/shadow
文件的权限:所有者可读写、组用户可读、其他用户无权限一般的权限类型:
字符 权限类型 含义 r
read 可读取内容 w
write 可修改内容 x
execute 可执行(或进入目录) -
无权限 没有任何权限 如果其他用户对密码文件具有“写”权限,我们可以构造一行用户数据添加到 passwd 文件中,将
UID
设置为0
( root 权限),例如:1
syl-passwd:x:0:0:root:/root:/bin/bash
x 表示该用户密码加密后存放在
/etc/shadow
文件中,如果我们不想存在文件中,而是直接输入密码的化,需要输入加密之后的密文字符串,例如这里我们使用 openssl 创建一个密码pass1231
openssl passwd -1 -salt ignite pass123
- -1 :使用 MD5 hash 算法
- -salt :对 hash 算法加 “盐”
将生成的密码添加到 passwd 文件中:
1
echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd
再查看一下是否添加成功
1
cat /etc/passwd|grep syl-passwd
确认添加成功后,切换成刚创建的用户,就获取到root权限
计划任务提权
-
原理
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出。
-
方法
运行下面的命令列出一些计划任务
1
2ls -l /etc/cron*
cat /etc/crontab可能发现存在root权限运行的计划任务
查看这个文件的权限
1
cd /sbin;ls -l test.sh
如果我们对这个文件存在写权限的话,那么我们就可以直接修改这个脚本,以root的权限执行恶意代码