提权 - Linux(二)

Linux 定时任务 & 环境变量

定时任务提权(本地提权)

  定时任务被用来需要被周期性执行的命令。利用它可以设置命令或者脚本,让它们在设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/ 目录。它同样也会检查 /var/spool/cron/ 目录,提权前提:要存在一个执行危险脚本的任务计划,并且这个任务计划执行的执行脚本可以被非root权限用户修改覆盖,并可以正常执行任务计划。
/var/spool/cron/user 用户定时任务在这个目录
/etc/crontab 系统执行定时任务在这个目录
漏洞原理:
  Crontab通常以root权限运行。如果可以成功篡改在定时任务执行的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。

crontab命令用来定期执行程序。
-e   编辑当前的crontab文件,默认保存在/var/spool/cron/用户名下
-r   删除目前的时程表
-l   列出目前的时程表

通过定时任务期权有三种方式:

1.通过路径问题
原理:利用定时任务指向的文件的相对路径解析问题
步骤:
第一步:使用 cat /etc/crontab 查看当前系统的定时任务,寻找定时任务写的是相对路径的任务,有的话就可以使用此方法。发现test.sh 写的相对路径,找到test.sh的路径,假设test.sh绝对路径是/usr/local/bin。
第二步: 在用户目录下写入一个与test.sh同名的文件,执行,此时定时任务以root身份调用的就是我们写的 /home/xxx/test.sh,而不是系统原来的/usr/local/bin/test.sh,从而提权。
test.sh

echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/xxx/test.sh            # 写当前用户主目录
chmod +x /home/xxx/test.sh    # 写当前用户主目录
/tmp/bash  

我在本地演示没有成功,不知道是不是内核版本的问题。

2.命令问题(WS注入)
利用通配符配合命令参数自定义命令实现提权,通配符经常在计划任务中使用,例如文件备份,日志等。

backup.sh

cd /home/undead/script; tar czf /tmp/backup.tar.gz *

制作test.sh

echo 'cp /bin/basn /tmp/bash;chmod +s /tmp/bash' >
/home/undead/script/test.sh

制作–checkpoint-action=exec=sh tesh.sh文件

echo " " > "--checkpoint-action=exec=sh tesh.sh"

制作–checkpoint=1

echo " " >--checkpoint=1

利用第一步:发现可利用的定时任务
查看定时任务列表,挨个查看定时任务是否还有 * 匹配的任务,判断该任务给出的命令是否可以被利用。像上面 backup.sh 后面以 * 结尾的,tar指令的就能够被利用。
分析backup.sh:
cd /home/undead/script 切换目录
tar czf /tmp/backup.tar.gz * 压缩目录下所有文件 , 通配符 * 代表所有
  tar 参数大全中查到 可以利用 --checkpoint=n :每写入n个记录之后设置一个检查点,在检查点可以执行任意的操作,操作由–checkpoint-action指定, --checkpoint-action可以指定执行 exec 那么我们就可以利用exec 执行我们一个shell,来达到提权的目的。
第二步:
制作test.sh,–checkpoint-action=exec=sh tesh.sh,–checkpoint=1
把test.sh,–checkpoint-action=exec=sh tesh.sh,–checkpoint=1三个文件复制到backup.sh这个计划任务执行的路径也就是/home/undead/script下,也可以先切换到该目录在制作那三个文件。
第三步骤:
等待计划任务执行,就可以了。执行完目录中会出现一个test.sh,这个test.sh赋予了S权限,提权完成

如果不是tar命令,而是其他命令,则要看其他命令是否支持调用执行

3.权限问题
利用不安全的权限分配操作导致的定时文件覆盖
漏洞成因:管理员正常创建一个文件test.sh时,默认是没有执行权限的,此时管理员若想执行这文件,必须给它赋执行权限,正常的赋权命令是chmod +x test.sh(所有人都可以执行,更安全的是只有创建用户可以执行:chmod u+x test.sh),这样就可以执行test.sh。
—并且组和其他成员无法修改覆盖这个文件(即写权限),但是粗心的
管理员会直接chmod 777
test.sh,这样虽然也可以实现执行test.sh的目的,但是会导致权限扩大,即组和其他成员都可以对文件修改覆盖,造成风险(写权限风险最大)。

例如:
1.这里的backup.sh其它用户只有执行权限,但是如果其它用户有w权限,我们就可以直接进行覆盖语句提权
在这里插入图片描述
2.登录root账户 赋予chmod 777 backup.sh权限
3.重写覆盖backup.sh,复制bash。
backup.sh

cp bin/bash /tmp/bash; chmod +s //tmp/bash

4.执行bash

环境变量提权

本地提权
提权条件:
需要有可用指令是SUID

1.通过手工或工具查看具有SUID权限的指令。
find / -user root -perm -4000 -print 2>/dev/null
发现ps指令具有SUID权限,可以进行利用。
在这里插入图片描述
2.编写一个shll,调用system执行ps。
dome.c

#include<unistd.h>
void main()
{
	setuid(0);
	setgid(0);
	system("ps");	
}
setuid(0);setgid(0); 是用于设置程序的实际用户ID和实际组ID。在Unix/Linux系统中,0表示超级用户root。因此,这两个函数将程序的用户ID和组ID设置为超级用户,这样程序就可以获得系统的最高权限。
system("ps"); 是用于执行一个shell命令,它将字符串 "ps" 作为参数传递给shell,并让shell执行该命令。

3.编译dome.c

gcc demo.c -o shell

4.替换文件
cp /bin/sh /tmp/ps,把/bin/sh复制给/tmp/ps,ps命令本来是用于显示当前进程的状态,替换后执行./ps就变成了执行sh命令。
在这里插入图片描述
5.增加环境变量

export PATH=/tmp:$PATH

6.chmod u+s shell,./shell执行触发demo.c里面的ps命令
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值