当前位置: 首页 > news >正文

渗透作业3


一,环境搭建
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虚拟机上安装对应的安装包
3
安装完后,根据vulhub官方文档上的操作执行。

第一步:执行如下命令启动一个Cacti 1.2.22版本服务器:
第二步:环境启动后,访问主机IP:8080端口,进入到cacti登录页面:

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

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

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

3,测试

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

虽然响应包里没有回显,但是进入容器中即可发现/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 鉴权函数

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

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

  // 判断action的值,action的默认值为2
通过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:计算字符串出现的次数。// 字符串被简化,因此输出 1
// 字符串被简化为 's i',所以输出 0
echo substr_count($text, 'is', 3, 3), PHP_EOL;

// 输出 1,因为该函数不计算重叠字符串
所以抛出异常filter_var:使用特定的过滤器过滤一个变量。这个过滤器可以验证IP是否合法。当这里的验证绕过后,代码就可以执行。

2,创建一个test.php测试代码:
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,抓包

开启burp suite

在浏览器中访问

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

修改部分数据后,send

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

3,构造命令行

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

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


http://www.dtcms.com/a/309108.html

相关文章:

  • Kafka Streams 并行处理机制深度解析:任务(Task)与流线程(Stream Threads)的协同设计
  • kafka快速部署、集成、调优
  • 超越 ChatGPT:智能体崛起,开启全自主 AI 时代
  • 中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
  • 阿里云微服务引擎 MSE 及 API 网关 2025 年 7 月产品动态
  • 单变量单步时序预测:CNN-LSTM卷积神经网络结合长短期记忆神经网络
  • MybatisPlus如何用wrapper语句灵活连接多查询条件
  • SpringBoot+LangChain4j解析pdf文档,不使用默认解析器
  • 解决VScode加载慢、保存慢,git加载慢,windows11系统最近异常卡顿的问题
  • 高端房产管理小程序
  • 【Ubuntu】安装使用pyenv - Python版本管理
  • ORACLE函数
  • JVM垃圾回收算法和分代收集算法的区别
  • 插件升级:Chat/Builder 合并,支持自定义 Agent、MCP、Rules
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • Day 28:类的定义和方法
  • 属性的运用和理解
  • 赛博算命之八字测算事业运势的Java实现(四柱、五行、十神、流年、格局详细测算)
  • Redisson实现Redis分布式锁的原理
  • Windows和Linux的tree工具
  • 【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能
  • 渗透测试报告通常包含哪些关键内容?
  • redis快速部署、集成、调优
  • Linux通用SPI作为Master——回环测试
  • Redis学习-----Redis的基本数据类型
  • Dify版本升级实操
  • Edge中如何找到原IE浏览器的Internet选项
  • 基于html,css,jquery,django,lstm,cnn,tensorflow,bert,推荐算法,mysql数据库
  • 8月1日RED指令强制生效,您的设备准备好了吗?
  • uniapp 开发微信小程序,获取经纬度(uni.getLocation)并且转化详细地址(‌高德地图逆地理编码API、‌腾讯地图逆地理编码)