攻防世界-web-ics-05

题目描述: 其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统
题目链接点进去如下:

可以看到界面上有一个设备维护中心,点击设备维护中心,跳转到如下界面

再次点击,发现变成这样了

1. 思路分析

从已知信息来看,就只有一个page参数可利用,且输入的参数如果是字符串和数字的话就会回显在界面上。尝试输入一些特殊字符,发现无回显,说明注入命令之类的方式大概率行不通。这种回显的问题和之前的一道题unserialize3有点类似,但是这里没有php源码。

前端也只有一个页面,没有其它额外的信息提供,到这里没有思路了,网上参考其它人的解法

攻防世界web进阶区ics-05详解_無名之涟的博客-CSDN博客

这里提到了使用php伪协议可以获取到源码(这个在知识面外了,了解这个充当知识积累)

知道了关键点就ok了,获取到源码,然后根据源码逻辑进行绕过即可

2. 解题过程

2.1 先使用php伪协议获取源码 page=php://filter/convert.base64-encode/resource=index.php

使用base64进行解码(Base64 编码/解码 - 在线工具),解码出来后关键代码如下:

 

2.2 分析源码,确定POC

不携带page参数的情况下,源码中存在几个点可以构造

a. X_FORWARDED_FOR头部字段必须是127.0.0.1

b. 会传入三个参数,pat, rep和sub,然后执行preg_replace函数进行字符串替换

我们先试试随机构造X-Forwarded-For以及pat, rep和sub,这个时候要去掉page,结果如下:

既然进入到这里的逻辑了,那么该如何利用呢? 唯一的利用点就是preg_replace函数了,不过对这个函数不了解,不清楚该如何利用,搜索这个函数的漏洞(慎用preg_replace危险的/e修饰符(一句话后门常用)_php技巧_脚本之家),发现这个函数存在一个危险的/e修饰符,通过/e修饰符可以实现命令注入

 2.3 通过preg_replace实现命令注入

既然知道了preg_replace有个/e参数,那么我们构造如下POC实现命令注入

GET /index.php?pat=/(\w )/e&rep=system('ls')&sub=abc

从结果来看,存在回显,命令已经执行。

ok,既然存在命令执行,那没啥好说的,直接find我们的flag

GET /index.php?pat=/(\w )/e&rep=system('find / -name *flag*')&sub=abc

这里第一行的应该就是我们要找的flag了,将其内容输出即可(经验证flag为第二个文件/var/www/html/s3chahahaDir/flag/flag.php)

GET /index.php?pat=/(\w )/e&rep=system('cat /var/www/html/s3chahahaDir/flag/flag.php')&sub=abc

 最终获取到flag:cyberpeace{1ce2c80d4459c731bfe0fa97c2a007bf}

总结:这道题的关键点主要有三个,一个是通过php伪协议获取源码,一个是X-Forwarded-For头部字段伪造,还有一个是利用preg_replace的/e修饰符进行命令注入(PS:扩充了我的知识面)

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

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

相关文章

算法与数据结构(一)--算法复杂性

一.算法复杂性的概念 算法的复杂性是指运行算法所需要的计算机资源的量。需要的时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。 这个量应该集中反映算法的效率,而从运行该算法的实际计算机中抽象出来。换句话说,这个量应该…

【算法集训之线性表篇】Day 08

文章目录 题目基本设计思想思路一思路二 代码实现效果 题目 已知一个整数数列A{a0,a1,a2,…,an-1}&#xff0c;其中0<ai<n(0<i<n)。若存在ap1ap2ap3…apmx且m>n/2(0<pk<n,1<k<m)&#xff0c;则成x为A的主元素。例如A{0,5,5,3,5,7,5,5}&#xff0c;…

【后端面经-架构】RabbitMQ简介

【后端面经-架构】RabbitMQ简介 1. MQ介绍2. RabbitMQ2.1 简介2.2 架构&#xff1a;组件解释2.3 特点2.4 优缺点 面试模拟参考资料 1. MQ介绍 MQ&#xff08;Message Queue&#xff09;用于在应用程序之间相互通信&#xff0c;在消息中发送数据进行通信&#xff0c;而不需要特…

【视觉SLAM入门】3. 相机模型,内外参,畸变推导

"瑾瑜匿瑕" 1. 相机模型和内参1.1 内参推导1.2 外参推导 2. 畸变2.1 径向畸变2.2 切向畸变 3. 深度信息3.1 算法测距3.2 物理测距 本节讨论围绕这个问题展开 机器人如何观测外部世界&#xff1f; \quad\large\textcolor{red}{机器人如何观测外部世界&#xff1f;} 机…

C++结合EasyX写扫雷(new)

【游戏】C结合EasyX写扫雷&#xff08;时隔半年后重写&#xff09; 上一次写扫雷这一次实现思路设置全局变量Grid类Grid类的成员函数启动画面死循环监听鼠标事件 全部代码其他 上一次写扫雷 大约半年之前的寒假期间&#xff0c;我接触了EasyX这个图形库&#xff0c;于是试着写…

数据结构--树和森林的遍历

数据结构–树和森林的遍历 树的先根遍历 void PreOrder(TreeNode* R) {if (R ! NULL){visit(R);while (R还有下一个子树T)PreOrder(T);} }树和二叉树的转化后》 树的先根遍历序列与这棵树相应二叉树的先序序列相同。 \color{red}树的先根遍历序列与这棵树相应二叉树的先序序列相…

串口的再认识

常用函数介绍 串口发送/接收函数 HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制&#xff08;即在发送成功前一直阻塞&#xff09; HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART…

C++ 变量类型

C 变量类型 变量其实只不过是程序可操作的存储区的名称。 在 C 中&#xff0c;有多种变量类型可用于存储不同种类的数据。 C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量…

Pytorch实现warm up和consine decay

在深度学习领域&#xff0c;模型训练过程中的不稳定性是一个常见的问题。为了解决这个问题&#xff0c;在Resnet这篇论文也提及了Warm Up的方法&#xff0c;通过逐渐增加学习率&#xff0c;引导模型在训练初期更稳定地收敛。同时在warm up之后结合consine decay的方法让训练变得…

辅助驾驶功能开发-功能规范篇(22)-3-L2级辅助驾驶方案功能规范

1.3.3 TLA系统功能定义 1.3.3.1 状态机 1.3.3.2 状态迁移图 1.3.3.3 功能定义 1.3.3.3.1 信号需求列表 1.3.3.3.2 系统开启关闭 1&#xff09;初始化 车辆上电后&#xff0c;交通灯辅助系统&#xff08;TLA&#xff09;进行初始化&#xff0c;控制器需在 220ms 内发出第一帧…

Spring-Interceptor拦截器

使用步骤 申明拦截器bean&#xff0c;并实现HandlerInterceptor接口 true为放行&#xff0c;false为拦截 2.定义配置类&#xff0c;继承WebMvcConfigurationSupport&#xff0c;实现addInterceptors方法&#xff0c;该方法调用具体的拦截器进行拦截 也可以在配子类通过实现W…

JMeter进行WebSocket压力测试

背景 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端&#xff0c;支持服务端主动向客户端发送消息&#xff0c;同时也支持客户端请求&#xff0c;服务端响应方式。本文主要想了解一下服务端的性能怎么样&#xff0c;…