源码
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-19 07:12:57
*/
include("flag.php");
error_reporting(0);
highlight_file(__FILE__);
class CTFSHOW{
private $username;
private $password;
private $vip;
private $secret;
function __construct(){
$this->vip = 0;
$this->secret = $flag;
}
function __destruct(){
echo $this->secret;
}
public function isVIP(){
return $this->vip?TRUE:FALSE;
}
}
function __autoload($class){
if(isset($class)){
$class();
}
}
#过滤字符
$key = $_SERVER['QUERY_STRING'];
if(preg_match('/\_| |\[|\]|\?/', $key)){
die("error");
}
$ctf = $_POST['ctf'];
extract($_GET);
if(class_exists($__CTFSHOW__)){
echo "class is exists!";
}
if($isVIP && strrpos($ctf, ":")===FALSE && strrpos($ctf,"log")===FALSE){
include($ctf);
}
思路
log不能用了,不过如果有足够权限的话包含/proc/self/environ也能getshell,可惜这题不行
仔细查看源码,会发现 class在
public function isVIP(){
return $this->vip?TRUE:FALSE;
}
已经闭合了.
__autoload() //在代码中当调用不存在的类时会自动调用该方法。
class_exists也能触发,不过在于怎么给$__CTFSHOW__
赋值,因为下划线被过滤了,只要能绕过下划线就可以了
之前的题遇见这个问题,记录下了
这里我们可以用.来转换
题解
?..CTFSHOW..=phpinfo
成功显示phpinfo页面,
发现cleanup是开启的
下一步也没办法了,题库限制速率
看了一下wp,发现flag在phpinfo里,害
总结
以后看到phpinfo就找下有没有flag