网址:KCTF
第一关:闯关游戏
-.--/---/..-/.--/../-.
摩斯密码,Morse code,放到在线网站上:http://www.hiencode.com/morse.html
如果不能识别把 / 替换成空格
第二关:二维码
二维码修复,三个角为定位标志,固定形式,找个正常的二维码替换掉三个角的图标
识别修复后的二维码得到flag
flag{62d0cbb2c69133b52f386701726f29c1}
第三关:错误的MD5
base64解码得flag,直接提交是错识误的,题中说"错误的md5",一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,所以把里面的唯一可能有问题的字符修改一下提交,正确
正确的flag{b9768a37b47beb2d88e2db0e76a39bb3}
第四关:盲文参照
这题卡的有点久,开始一直想0和1去替换,最后发现以列为观察,盲文对照解出
答案:IKANXUE
第五关:看雪的历史
下载附件得到一个txt文件,字符实有列数目明显不对,用vim打开可见
很显然是零宽度字符隐写,在上图中可以看到共有(<200c><200d><202c><feff>)四种零宽度字符,在线网站弄一下:https://330k.github.io/misc_tools/unicode_steganography.html
勾选对应的字符编码
得到flag:flag{6af971a42782115a594ba2318c0417ad}
第六关:凯撒留下了什么?
下载info.txt文件,全部为二进制,放到CyberCher会自动转码为文本:iodj{7115i261eig7i42d5fg7412fh86ded7h},{}有这两个符号,位置也对,题意很明确,凯撒加密,放到在线网站,偏移量可以根提第一个字符对应f去计算,也可以一个个数字去试,最后是3
flag{7115f261bfd7f42a5cd7412ce86aba7e}
第七关:110米要跨几个栏?
下载文本文件,根据提示想到栅栏密码,栅栏密码有传统形和W型,这个是W型
key为10的时候=号在最后,可base64解码得到flag
第八关:WinXor
逆向题,取字符集进行异或,超哥解出
第九关:请看附件,一位土著告诉了你应该去哪里寻找你想要的当地特产 “振金”
下载png图片,010查正常,无隐写
图片的名字为wakanda,找到一张瓦坎达文字对照表
找到图案对应文字即为答案:YOUGOTIT
第十关:中午时分,云的影子比其它时刻小了许多。提交格式:flag{}.
821010841088421108841022104084210884021084210841
下载txt文件,只含有5个数字01248,题目中又有云和影的提示,云影编码无疑
python脚本跑出来
#!/usr/bin/python
# -*- coding=utf8 -*-
def de_code(c):
dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
flag = []
c2 = [i for i in c.split("0")]
for i in c2:
c3 = 0
for j in i:
c3 += int(j)
flag.append(dic[c3 - 1])
return ''.join(flag)
def encode(plaintext):
dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
m = [i for i in plaintext]
tmp = [];flag = []
for i in range(len(m)):
for j in range(len(dic)):
if m[i] == dic[j]:
tmp.append(j + 1)
for i in tmp:
res = ""
if i >= 8:
res += int(i/8)*"8"
if i%8 >=4:
res += int(i%8/4)*"4"
if i%4 >=2:
res += int(i%4/2)*"2"
if i%2 >= 1:
res += int(i%2/1)*"1"
flag.append(res + "0")
print ("".join(flag)[:-1])
c = input("输入要解密的数字串:")
print (de_code(c))
#m_code = input("请输入要加密的数字串:")
#encode(m_code)
KAMXUEDOTCOM直接提交还是不对,这个题目提示很有深意,我当时是“看”的拼音不对,就把M改为N,提交正确KANXUEDOTCOM
第十一关:伪加密
还需要密码吗?看题目想到伪加密
用010editor打开,修改压缩文件加密标志位为00,保存后就没有密码了
flag{d9ae4d859de9b941af40f91f69b13f31}
第十二关:经典RSA
p=1074058774204108249701494602945344702257295575959111855899071
q=88986629334781577655493187325102894512564116681307655782184342573939069819137
e=9540011292252897217c=41548063605430288432470295597098485988788870848095534515875709414720207762389334011819123356492264118935214420228741427986850823373300101
已知N、e、c或已知p、q、e、c求m,直接上代码
import gmpy2
p = 1074058774204108249701494602945344702257295575959111855899071
q = 88986629334781577655493187325102894512564116681307655782184342573939069819137
e = 9540011292252897217
c = 41548063605430288432470295597098485988788870848095534515875709414720207762389334011819123356492264118935214420228741427986850823373300101
n = p * q
fn = (p - 1) * (q - 1)
d = gmpy2.invert(e, fn)
h = hex(gmpy2.powmod(c, d, n))[2:]
if len(h) % 2 == 1:
h = '0' + h
s = str(bytes.fromhex(h))
print(s)
第十三关:流量分析
下载流量包文件,wireshack打开,FTP流量。统计--》协议分级
data上右键,查找,找到对应数据包,追踪TCP流直接出flag
或者直接过虑:tcp contains flag
第十四关:逆向
逆向题,不会,求助超哥
第十五关:幸福的小羊,快乐的狼
下载题目附件,解压后有1296张小图片,很明显的CTF拼图题,主要用到了montage和gaps,这两个工具安装是重点:https://blog.csdn.net/qq_68643282/article/details/132393550
安装好后,执行命令先把所有小图片拼合成一张图片
montage ./*.png -tile 36x36 -geometry +0+0 flag.png
由于这些小图片不是正方形,需要把生成的图片调整到长和宽一样的,便于后续操作,这期间做了很多操作,最后都没有得到正常的图片,可能跟小图片数量或者小图片颜色非常相近有关,后面换了一种思路,观察montag生成的图片发现含有flag字符的大概就在两行中(sheep649.png-sheep720.png),共72张小图片,我把拿跟这两行有关的图片复制到一个文件中来生成
montage ./*.png -tile 36x2 -geometry +0+0 flag.png
调整图片高度为1584*88
gaps run ./flag.png newfalg.png --generations=72 --population=20 --size=44
最后得到正常显示flag的图片
第十六关:access数据库解密
网上找了款ACCESS数据库密码的小工具,直接查看数据库密码:
使用access 2003版本打开flag.mdb文件可以看到flag
第十七关:md5加密
根据提示主要是找到DATE的具体数值后进行md5,打开压缩文件可以看到文件的具体目期
echo -n "hashcat_20221207"|md5sum
## c24dfa5bb27682d52bad1a77a32f6178
## flag{c24dfa5bb27682d52bad1a77a32f6178}
第十八关:RSA解密,小e攻击
第十九关:jpg隐写
steghide info Mona.jpg,检测发现隐写了flag.txt
# steghide info Mona.jpg
"Mona.jpg":
format: jpeg
capacity: 14.9 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "flag.txt":
size: 38.0 Byte
encrypted: rijndael-128, cbc
compressed: yes
steghide extract -sf Mona.jpg 解出flag.txt
第二十关:套娃
shell脚本循环解压,最后在目录中查看flag文件
#!/usr/bin/env bash
while [ -e *.zip ]; do
files=*.zip;
for file in $files;do
echo "解压 ${file}........";
password="kxyyds";
unzip -q -P "${password}" "$file";
rm "${file}";
done;
done;
echo "全部解压完成,请查看目录文件flag";
第二十一关:冰蝎流量解密
一直找不到冰蝎的key,010eidtor打开在结果有明文flag,不知道是不是非预期解
第二十二关:RAS广播攻击
第二十三关:逆向
IDA远程调试,随便输一长串不会出现的字符,逐一取得d1的值,转为字符串即为flag
第二十四关:源码查看
访问:
http://58ca072d-1dc0-4a2c-88bd-943e4564f27a.node.kanxue.com:81/Game/1-05692bfa06986eab/challenge1.php
查看源码得到base64的flag字符串
第二十五关:GET
get传参?value=flag拿到flag
第二十六关:POST
curl -X POST -d 'value=flag' http://02a2908d-663c-4dfc-b64c-936b9167b4c4.node.kanxue.com:81//Game/3-d30a4b81c0398567/challenge3.php
第二十七六:is_number绕过
curl http://bc61ab1d-cf37-4871-855a-b309acfa4cd6.node.kanxue.com:81//Game/8-84f7fd029d72f436/challenge8.php?value=65535d
第二十八、二十九关重复:背景图F5隐写
git clone https://github.com/matthewgao/F5-steganography
kali默认的版本不行,切换到java 11
java Extract /tmp/picture.jpg -p ikanxue
查看output.txt文件得flag
第三十关:cookie
查看源码得知flag在cookie中
curl -I http://2a2f3207-9dc6-4b39-bde1-d1f68daa0b40.node.kanxue.com:81//Game/4-2db6aef1f225f344/challenge4.php
第三十一关:XFF
提示仅内网访问
curl -H "X-Forwarded-For:127.0.0.1" http://6f4e4076-0706-4e13-ac58-1f8a9816769f.node.kanxue.com:81/Game/6-432f430c11fd0943/challenge6.php
第三十二关:弱口令
brup爆破,admin,1234321
第三十三关:设置cookie
抓包改包传递一个大一点时间戳base64编码
GET /Game/11-580e84c1bb47bcd5/challenge11.php HTTP/1.1
Host: 1b3295a4-79f0-4a1c-a67c-d4420649c3f3.node.kanxue.com:81
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Cookie: sign=MTg3MzAzNjgwMA==
Connection: close
第三十四关:js逆向
提取代码的数组,用python异或出flag
t= [62, 52, 57, 63, 35, 58, 106, 105, 61, 106, 104, 108, 60, 60, 96, 60, 58, 105, 108, 105, 106, 111, 59, 97, 62, 59, 97, 108, 104, 108, 107, 110, 57, 57, 62, 105, 109, 37]
for x in t:
print(chr(x ^ 88),end='')
第三十五关:RSA解密
下载私钥,在线解密得到flag
第三十六关:js解码
控制台运行代码,得到flag
第三十七关: