linux基础提权总结
基础知识:
我们先看一下文件的详细信息

回顾一下这每一列的意思.
第一列:drwx——
这一共10位字符。可以分为四个部分。
第一部分是第一个字符。这是文件类型标识:
–:表示这是一个普通文件。除了普通文件,还有其他类型的文件标识,例如:
d:代表目录(directory)。
l:表示符号链接(symbolic link)。
c:字符设备文件,通常用于与字符设备(如终端)进行交互。
b:块设备文件,一般用于与块设备(如硬盘)进行交互。
第二部分是2-4这三个字符。这是规定文件所有者的权限
r:代表读权限(对应数值是4)
w:代表写权限(对应数值是2)
x:表示执行权限(对应数值是1)
–:表示无权限(对应数值是0)。
第三部分是5-7这三个字符。这是规定文件所属组的权限
第四部分是2-4这三个字符。这是规定其他用户的权限
例如:drwx——就表示:这是一个目录文件。文件所有者有读写执行权限(对应数值4+2+1=7),文件所属组和其他用户都是没读写执行权限的(对应数值0)
我们可以使用 chmod 命令结合这个数字来设置文件权限。例如:
chmod 700 file
第二列:1(表示硬链接数)
硬链接是文件系统中指向同一个文件数据的多个文件名。这里的 1 表示该文件只有一个硬链接,即当前显示的这个文件名是指向该文件数据的唯一引用。
第三列:root:文件所有者
这表明该文件的所有者是名为 root 的用户
第四列:root:文件所属组
说明该文件属于名为 root 的用户组。
第五列:4096:文件大小
表示该文件占用的磁盘空间大小为 4096 字节。
第六列:3月 7 10:53:文件最后修改时间
说明该文件最后一次被修改的时间是 3 月 7 日 10 点 53 分。
第七列:. :文件名(这里是表示目录)
提权方式
1.脏牛提权(内核溢出)
脏牛漏洞影响Linux内核版本 2.6.22 至 4.8.3。如果系统内核版本在此范围内,可能存在该漏洞。可以试试能否提权。原理是偏pwn的知识,我们会操作就行。下面开始模拟渗透提权过程
vulhub靶机下载地址链接
下载后进入虚拟机装好并启动。

打开我们的攻击机kali,查看ip

扫描整个网段
nmap -sS 61.139.2.0/24
发现了我们的受害机。

接着扫描全端口

发现除了ssh和http服务的端口外,还有一个1898端口,浏览器访问61.139.2.132:1898查看:

页面最下面有个powered by drupal
查找资料发现

这个CMS是爆过CVE的。
利用msf开始渗透!
msfconsole进入msf
寻找模块

这里我用第二个,查看选项

设置靶机的ip和端口,然后运行

可以看到下图,我们成功运行拿到shell,渗透成功,但是是www-data用户,这个权限太低。但是linux内核版本为4.4.0-31,可能存在脏牛提权。接下来开始脏牛提权

我们另起一个终端,下载攻击工具
git clone https://github.com/mzet-/linux-exploit-suggester

先利用msf切到靶机的/tmp目录( 一般来说在/tmp目录下 , 是可以进行可读写可执行的 )。然后将sh脚本上传到靶机上。


再切换到shell交互,给文件加个权限(因为这个文件是我们自己上传上去的所以自己就是文件所有者,可以加权限)然后运行。

执行脚本后扫描到了许多cve,可以看到有脏牛

kali机另起终端下载该提权工具

同样上传dcow.cpp脚本到受害机

然后开启shell,输入
g++ -Wall -pedantic -o2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
将dcow.cpp编译为dcow(可执行文件)

然后开启一个bash shell(msf开启的shell无法运行dcow文件,所以要通过其他方式在受害机开启bashshell交互)
python -c 'import pty; pty.spawn("/bin/bash")'
最后执行编译好的dcow即可

可以看到成功拿到了root账号的密码。

成功以root账户登入。
大致过程很好理解。就是信息收集然后通过Drupal的漏洞拿到shell。拿到shell后通过上传恶意工具扫描发现了有脏牛提权的cve。便利用cve脚本开始提权以拿到root账号的密码。
2.suid提权
SUID(Set User ID)提权的原理是通过设置可执行文件的SUID位,使程序在执行时以文件所有者的权限运行,而非执行者的权限
使用chmod u+s <filename>命令为文件设置SUID位。
设置后,文件权限中会显示s,如-rwsr-xr-x

常见查找suid文件的命令:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
find / -perm -4000 2>/dev/null
已知的可用来提权的linux可行性的文件列表如:
nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget
这里我以find为例:

可以看到find是s权限。
利用find来执行命令:

成功显示root,因为我们执行find时,find是以root权限运行的,所以whoami的结果就是root。
我们利用find执行命令开启root的shell。

提权成功
3.计划任务提权
如果计划任务以高权限(如 root)运行,且任务内容可以被普通用户修改或利用,攻击者可以通过篡改可写的计划任务脚本等方式实现提权。
当获取一个linux普通用户时,可以查看计划任务,看看有没有可以篡改的任务脚本
cat /etc/crontab
这里以一道CTF题为例
我们渗透成功拿到www-data权限后,读取flag发现权限不够

开始计划任务提权,我们先进入crontab目录

发现root文件。大胆猜测这个root文件一定是一个以root用户运行的计划任务脚本。

我们读取后发现有个sh脚本,该脚本是以root权限每分钟执行一次。查看该脚本的权限。

权限为777,很大,那么我们篡改脚本内容来提升flag文件权限即可

提权成功,实战中可以修改脚本为执行反弹shell来获取root权限。
4.sudo提权
sudo 提权的原理是利用 sudo 命令的特性,允许普通用户以 root 或其他高权限用户的身份执行命令。如果配置不当或存在漏洞,攻击者可以通过 sudo 实现权限提升
配置文件:sudo 的权限配置存储在 /etc/sudoers 文件中,也可以通过 /etc/sudoers.d/ 目录下的文件进行配置。
权限验证:用户执行 sudo 命令时,系统会验证用户的权限(通过 /etc/sudoers 文件)并要求输入当前用户的密码(除非配置了 NOPASSWD)
例如:/etc/sudoers中有:
user1 ALL=(ALL) NOPASSWD: ALL
表示user1无需密码即可执行任何命令
也可以执行执行root shell

5.shadow提权
/etc/shadow 是 Linux 系统中存储用户密码哈希值的文件,是系统安全的重要组成部分。它包含用户的加密密码以及其他与密码相关的信息
当我们普通用户可以访问 /etc/shadow文件时,有几率拿到root密码的hash 然后进行暴力破解
6.password提权
原理是当我们普通用户对 /etc/passwd 具有写入权限时
我们就可以新建伪造的"root"用户 还有就是 /etc/passwd里边不小心存储了root密码的hash值
我们就可以进行john破解密码进行登录
提权工具
介绍几个提权工具
1.linux-exploit-suggester(主要针对内核)
我在上面的脏牛提权用的就是这个。这个脚本会输出内核等信息,然后输出可能存在的漏洞,包括exp的下载地址,可以下载对应的exp来测试。有橙色标签的说明更符合目标机情况。
使用方法:
拿到shell后上传该脚本到受害机.然后执行下列命令
chmod +x linux-exploit-suggester.sh ##添加执行权限
./linux-exploit-suggester.sh ##执行脚本
该脚本会检查存在的cve漏洞。在通过脚本的判断后可以通过给予的信息下载exp进行提权

这里扫到的cve,我们下载脚本后可能会遇到下载的c语言环境的脚本,需要c语言进行编译,而服务器上可能很少会安装c语言环境,我们可以本地进行编译,将编译完的exp再上传上去执行。
2.linux-exploit-suggester-2
和上面那个类似,算是稍微强化版。用法和上面一样。
3.LinEnum
Linux枚举及权限提升检查工具,该工具除了RCE无法收集,其它的信息都能收集,主要收集:内核、发行版本、系统信息、用户信息、特权访问、环境、作业、任务、服务、web服务的版本、默认/弱口令、搜索等
使用方法
拿到shell后上传该脚本到受害机/tmp目录下.然后执行下列命令
chmod +x LinEnum.sh ##添加执行权限
./LinEnum.sh ##执行脚本
可以看到返回的信息很多,可以看到SUID提权用到的信息等,以及历史命令等等






