引言:这里是我做的攻防世界-misc-基础题的一些writeup,希望能够大家一些参考,部分解题思路借鉴了其他博主,如果哪些地方有问题或更好的思路,可以一起探讨。 所用环境以及做题思路只在当时写下writeup时适用,若之后做出改动可与我联系,做出相应更改。
1.this_is_flag
题目:
代码语言:javascript复制Most flags are in the form flag{xxx}, for example:flag{th1s_!s_a_d4m0_4la9}
分析: 一道签到题,直接复制粘贴flag
解题:
代码语言:javascript复制flag{th1s_!s_a_d4m0_4la9}
2.pdf
分析:
代码语言:javascript复制打开图片,猜测flag值在图片底下,wps将pdf转为word格式后,将图片移走发现flag
解题:
代码语言:javascript复制flag{security_through_obscurity}
3.如来十三掌
题目:
代码语言:javascript复制菜狗为了打败菜猫,学了一套如来十三掌。
夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙呐神。舍切真怯勝呐得俱沙罰娑是怯遠得呐數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮
分析:
原本以为这是一个隐藏文件,结果什么都没解出来
于是看着这段话,尝试读取佛文,果不其然,参悟了其中奥秘
猜这是一段密码,百度发现,需要进入一个名叫与佛论禅的网址解密:http://www.keyfc.net/bbs/tools/tudoucode.aspx
代码语言:javascript复制得到:MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9
解了一段base64编码,解密发现乱码如下:
39.3x/1@0;w 3%1;0!1@51&,
然后又发现这是一种rot-13加密方式:
ROT13(回转13位,rotate by 13 places,有时中间加了个连字符称作ROT-13)是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13被描述成“杂志字谜上下颠倒解答的Usenet点对点体”。ROT13 也是过去在古罗马开发的凯撒加密的一种变体。
解 rot-13 ,得到
ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9
解base64,即得到flag:
flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}
4.give_you_flag
题目:
分析:
代码语言:javascript复制下载下来之后,发现真的是个表情包,里面还闪现了一个二维码!
利用Stegsolve.jar 打开之后,Analyse-Frame Browser一帧一帧的看
在50个发现了残缺的二维码,少了三个块块,想办法补上,得到flag:
flag{e7d478cf6b915f50ab1277f78502a2c5}
解题:
代码语言:javascript复制下载附件,打开gif图会看到小龙人数完钞票会展示二维码,使用stegsolve等工具查看帧数得到二维码。
5.gif
题目: 菜狗截获了一张菜鸡发给菜猫的动态图,却发现另有玄机
分析:
代码语言:javascript复制打开文件出现多个黑白,让人联想到二进制,白色图片代表0,黑色图片代表1。
01100110前八位二进制换算后为 f 证明思路正确。
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
二进制转字符串得到 flag
解题:
代码语言:javascript复制下载前以为是一个gif动态图
下载后发现事情没那么简单
居然是一个一个的黑白图片,看似有规律
想到二进制!表示完之后,二进制转字符串得结果:
flag{FuN_giF}
解题2:
代码语言:javascript复制打开发现是黑白图片,可以联想到二进制或是莫斯编码手动转换太麻烦,于是写了一个python脚本importcolorsysfromPILimportImage,ImageFontdefget_dominant_color(image):#颜色模式转换,以便输出rgb颜色值image=image.convert('RGBA')#生成缩略图,减少计算量,减小cpu压力image.thumbnail((200,200))max_score=0dominant_color=0forcount,(r,g,b,a)inimage.getcolors(image.size[0]*image.size[1]):#跳过纯黑色ifa==0:continuesaturation=colorsys.rgb_to_hsv(r/255.0,g/255.0,b/255.0)[1]y=min(abs(r*2104 g*4130 b*802 4096 131072)>>13,235)y=(y-16.0)/(235-16)#忽略高亮色ify>0.9:continue#Calculatethescore,preferringhighlysaturatedcolors.#Add0.1tothesaturationsowedon'tcompletelyignoregrayscale#colorsbymultiplyingthecountbyzero,butstillgivethemalow#weight.score=(saturation 0.1)*countifscore>max_score:max_score=scoredominant_color=(r,g,b)returndominant_colorf=''foriinrange(104):image_file=str(i) '.jpg'flag=get_dominant_color(Image.open(image_file))if(flag==0):f=f '0'else:f=f '1'print(f)在powershell里运行一下,得到二进制,字符串转换一下,得到结果。
6.掀桌子 题目:
代码语言:javascript复制菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵ ┻━┻
分析:
代码语言:javascript复制一开始拿到题没什么思路,通过观察,试着将16进制字符转为字符串,发现不能直接转化,试着将ascii码值减去128再转化,得到flag.
两个一位,16进制转10进制,然后减去128再转成字符即可
The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr
解题: 解密代码:
代码语言:javascript复制string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ''
for i in range(0,len(string), 2):
s = "0x" string[i] string[i 1]
flag = chr(int(s, 16) - 128)
print(flag)
每两个一组,将16进制转换为10进制,减去128以后输出 ASKII。
7.stegano 题目: 菜狗收到了图后很开心,玩起了pdf 提交格式为flag{xxx},解密字符需小写。 d802bcf9530b45e0b37170c67b8efcea.pdf 分析:
代码语言:javascript复制使用pdf.js载入pdf文件,在文件头发现可疑字符串:
内容如下:BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB
无法解密,尝试使用莫斯码来解密
解密密文得到:congratulations,flag:1nv151bl3m3554g3不能直接提交,需要修改为指定的格式:flag{1nv151bl3m3554g3}8.
解题:
代码语言:javascript复制用火狐浏览器打开刚才下载的pdf文件
按下F12进入控制台,输入document.documentElement.textContent(也可以直接在控制台看到)
回车查看
BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB
发现一大段AABABA样式的东西,猜测是01但是这些有分割,能想到的只有摩斯密码有分割的,于是尝试改成摩斯密码
-.-. — -. --. .-. .- - …- .-… .- - … — -. … --…-- …-. .-… .- --. —… .---- -. …- .---- … .---- -… .-… …-- – …-- … … …- --. …–
解码得到:
flag{1nv151bl3m3554g3}
8.SimpleRAR 题目: 菜狗最近学会了拼图,这是他刚拼好的,可是却搞错了一块(ps:双图层) 分析:
代码语言:javascript复制下载文件之后,解压只有一个.Txt文件,但是用Notepad 打开,发现了不一样的.png
猜测应该是丢失了。寻找方法。
然后……例行用winhex打开一发……发现RAR里面居然是有一个图片的!emmmmm可是为什么解压不出来呢?然后疯狂百度为什么压缩文件里有文件却解压不出来balabala的。。。后来意识到:噢,这个压缩包可能坏掉了……txt文件结束之后就是png文件的开始了,这里我已经改过了,原来好像是A8 3C 7A,这里涉及到RAR文件的结构:
代码语言:javascript复制因为我们这里是文件头,所以应该是74
修改后重新保存压缩包,果然解压出了一个图片~~
再次用winhex打开这个图片,发现它是一个gif文件,开心地去改了后缀,然后……然后又陷入了深深的思索……
之后用Stegsolve打开图片
然后发现了二维码!
代码语言:javascript复制可惜只有一半……啊,这种猥琐的操作怎么会让机智聪明无敌可爱牛逼臭不要脸的世荣气馁?
……对没错我想起来了题目中提示的双图层。
然后……我就开始了漫漫的ps之旅(我真的是在做题吗??
ps纯小白解锁技能:(技能操作就不细写了,百度到处都有
* 用ps分离图层保存
* 抠图
* 合并图片
用PS打开那张纯白纯白的secret.gif,果然有两个图层,分离后保存,再用Stegsolve分别打开:
hhhh果然有二维码的上半部分
代码语言:javascript复制可惜是个坏掉的……
可以发现:上半部分的那张图,对于二维码来说右上角最重要的那个小黑块空了,额,左上角索性就根本没有
而且,下半部分的那张图,细心点观察也会发现缺掉了一点黑:(我之前就没有注意到,都把二维码补全了死活扫不出来)
代码语言:javascript复制开启抠图技能:既然我们有完整的、没有被破环的小黑块,那就把它扣过去安在二维码的上半部分试试?
然后两张图片合并就可以了(合并就是把一张的图层复制到另一张图片里)
然后扫描就看到flag:flag{yanji4n_bu_we1shi} 解题:
代码语言:javascript复制工具:winhex stegsolve ps
下载Winhex,并用该软件打开本题目附件
用winhex打开后找到png文件的部分,发现txt文件与png连接处有问题,(可以自己将一个txt与png放在一起压缩查看格式)解压得到PNG文件,打开PNG文件没有发现,再用WINHEX打开,发现是gif格式,将文件后缀改为gif。
Winhex 查看压缩包,rar 文件块的开头是 A8 3C 74 我们需要文件块而不是子块,于是更改 A8 3C 7A 为 A8 3C 74
然后再次解压,打开png发现报错,扔到winhex,红色标记的地方是对的,直接改后缀gif
题目中提示了双图层,又是gif图片,不太会ps,直接图片分离
输出两个静态bmp图片
代码语言:javascript复制合成并补全定位点
或:
解压后得到 secret.png 图片 用 ps 工具分离图层后分别保存再使用图片分析工具 Stegsolve 分别找到两个图层里上半部分和下半部分的二维码
合成一个后补全定位点即可扫描得到 flag
由于提示是双图层,将图片用ps打开发下有两个相似的图层,此时就用到工具stegsolve,将两个相似图层分别用stegsolve比较,得到两个二维码,拼在一起得到答案
9.坚持60s
题目: 菜狗发现最近菜猫不爱理他,反而迷上了菜鸡
分析:
代码语言:javascript复制下载之后发现可以进行反编译,直接扔jd-gui反编译打开文件之后
英文应该不难懂,查找输入flag,全选上,得到位置,双击进入
看到flag,复制过去
提交不对,看见等号,想是不是base64,解码还真是!得到flag
Flag{DajiDali_JinwanChiji}
要玩的话也可以一直向右走出屏幕(别完全出去否则跑不回来了,留条缝也是不会被判定中弹的,这个大小自行掌握),算好时间跑出来自杀一下就拿到flag了,把页面拉宽才能看到完整的flag。
解题:
代码语言:javascript复制坚持60s,再去世,把屏幕放到最大,{“”}里面的一看就是base64(基本功啊反思反思),再解码一下就是flag了
10.base64stego 题目: 菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓
分析:
代码语言:javascript复制这个题再一次证明了Python的重要性!好好学Python
不多说,下载完文件直接解压就能发现一个.txt文件
然后百度知道这个题是一种base64位的加密版
base64隐写
从上面的解密过程中可以看出,多余的4位(标红的4个0)在解密的时候并没有用到,也就是说,无论后四位是0000还是0001,解密结果都没有改变,这就提供了一个可以隐藏信息的地方。如下图:
![aHR0cHM6Ly9yengxc3p5eWtwdWdxYy0xMjUyMDc1NDU0LnBpY2NkLm15cWNsb3VkLmNvbS9CYXNlNjRzdGVnLzIwMTgwOTE3M
代码语言:javascript复制DMwNDE1NjQ2LnBuZyFibG9n.png][12]
那么,怎么判断有没有信息被隐藏进去了呢?
假设我们已经把后四位0000变成了0001,现在我们得到的加密后的字符串是VHIweR==,利用python中base64的解密函数直接解密后得到Tr0y,然后用base64的加密函数加密,得到的是VHIweQ==;
这时候我们就可以发现,按照正常加密流程加密得到的VHIweQ==,跟原始的字符串VHIweR==是不一样的,这就说明有信息被隐藏在了里面。
解题:
代码语言:javascript复制直接上代码(Python2环境)
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /'
res = 0
for i in xrange(len(s1)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res
def solve_stego():
with open('stego.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('n', '')
norm_line = line.replace('n', '').decode('base64').encode('base64').replace('n', '')
diff = get_base64_diff_value(steg_line, norm_line)
pads_num = steg_line.count('=')
if diff:
#print bin(diff)
bin_str = bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str = '0' * pads_num * 2
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str = chr(int(bin_str[i:i 8], 2))
print res_str
solve_stego()
运行得到:Base_sixty_four_point_five
整理得到flag:flag{Base_sixty_four_point_five}
解题2:
代码语言:javascript复制一开始打开附件解压提示说要密码,用winhex打开,找到压缩源文件目录区:50 4B 01 02:目录中文件文件头标记3F 00:压缩使用的pkware版本14 00:解压文件所需pkware 版本00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)压缩源文件目录结束标志:504B 05 06:目录结束标记把09 00改写成00 00就可以成功解压了
解压后发现是一堆base64加密的字符串,看题目来源是olympicCTF,这是俄罗斯2014年有道 misc 题是关于Base64 的隐写题,那我们直接写解码,这里的思路是先循环解密base64字符串,提取出可以隐写的最后2-4位,再拼接最后转回ascii码flag就出来了
代码语言:javascript复制解决伪加密可以使用文件:ZipCenOp.jar
或者可以下载ZipCenOp命令行java-jar ZipCenOp.jar r 文件名回车即可解压出来打开之后看到一串串base64
11.et3 题目: 今天是菜狗的生日,他收到了一个linux系统光盘 分析:
代码语言:javascript复制这么明显的提示一定有问题!倒不如直接用上次说到的forement一下子就整出了哈哈哈
打开图片之后把flag输进去就发现事情没这么简单
居然是错的!
又想起来这种东西都能够解压,于是改后缀,解压,然后搜索flag
发现了一个.txt打开,=结尾用base64解码
即可得到flag
或:
1、下载附件,发现是一个img格式的文件,扔到winhex里ctfl F发现有flag.txt。
2、解压该文件,打开flag.txt,发现是base64加密。
3.base64解密,得到flag。
解题:
代码语言:javascript复制题目名字叫ext3,那么文件应该可以在linux下进行挂载。放到kali里面,运行 “你附件的名字”/mnt/, 在/mnt/下面看到有一堆文件夹。
执行 find | grep 'flag' ./O7avZhikgKgbF/flag.txt 执行cat ./O7avZhikgKgbF/flag.txt
显示ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0= 看最后的=号,像base64,找个base64的工具解码得flag。
或Ubantu环境:
root@ubuntu $:mkdir ~/ext3
root@ubuntu $:mount ext3 ~/ext3
root@ubuntu $:cd ox[tab][tab]
root@ubuntu $:cat flag.txt
12.功夫再高也怕菜刀 题目: 菜狗决定用菜刀和菜鸡决一死战 分析:
代码语言:javascript复制下载之后利用forement获得一个压缩包,解压发现需要密码
于是追踪数据流
CTRL F搜索flag,发现了一个文本文档
对他进行追踪TCP流
点击下面的Save as…保存到本地
然后从 FFD8FF 开始到 FFD9 复制出来
再利用Winhex
把那些粘贴进去,并选择到ASCII HEX
进行写入
按照.jpg保存下之后,就可以得到一张图片
这个图片中的字符就是解压密码
输入即可得到flag
解题:
代码语言:javascript复制下载附件,用foremost进行pcapng文件的分离,得到一个压缩包,打开压缩包,得到一份加密的flag文件。
foremost的下载地址https://github.com/raddyfiy/foremost (windows系统可用)
简单的使用介绍:
在zip里可以发现一个加密的flag.txt文件。用wireshark打开6666.pcapng文件,查找flag.txt关键字
代码语言:javascript复制发现有个6666.jpg文件,使用TCP追踪流,复习下面蓝色部分。FFD8开头,FFD9结尾,并在winhex中新建文件复制并粘贴。注意粘贴格式选择为ASCII Hex。
报存为jpg格式,可以得到图片,图片里的文字就是密码,输入密码,得到flag. 解题2:
代码语言:javascript复制每次遇到这种数据流的题看的眼睛都疼…()
这道题卡了我好长时间,网上的writeup…一言难尽。
这道题主要涉及到以下几点:
*foremost的使用
*wireshark的使用
*winhex的使用
foremost的使用
首先给的是一个pcapng文件,用wireshark打开。(尝试盲猜flag)上Kali,foremost分离文件,分离后得到一个压缩包
压缩包有密码,好,来暴力破解开个玩笑,又没字典而且才6分的题用不上吧!
代码语言:javascript复制要么这题就是让你求压缩密码,flag就是文本(这种情况密码肯定没那么容易出来),要么就是压缩密码有要求,flag里面又有点东西
经过一番求(sou)索(suo),这一题是第一种情况。
wireshark的使用
接下来上wireshark,我就在物理机上用的wireshark,因为kali里面没找到Winhex,不好操作。
wireshark搜索flag.txt
接下来就是一个个坑踩过去(wireshark真的用的少啊!!!)
代码语言:javascript复制一定要把搜索栏按照我标的调,尤其是第一个,它默认不是分组字节流,在这种情况下你搜索flag.txt,结果是搜索不到东西的。会有好几个符合条件的字节流,我看网上wp出奇的一致,都选在了1150这里,我都试了一下,发现结果都是正确的。在1150处右键跟踪TCP流:
从这里的FFD8到最页面下面的FFD9就是整个jpg了
代码语言:javascript复制从刚开始的FFD8FF到最后的FFD9,注意是最后一个FFD9,因为不止一个FFD9,我用了相邻的两个复制到Winhex里面发现根本没反应。为什么从FFD8FF开始呢?
因为FFD8FF是jpg文件的文件头,附上各类图的文件头:
代码语言:javascript复制winhex的使用
把从FFD8到最后一个FFD9的整段复制(建议先全选复制到记事本然后删去头尾比较方便),放到winhex里面新建一个文件,以ASCII Hex的形式复制进去,保存为jpg文件。这里有个小插曲,我刚开始复制了FFD8FF到第一个FFD9之间那一段,以ASCII Hex形式复制到winhex里面发现没有反应…(这个我自己还的再学学,献丑了)
用winhex新建文件,将复制内容粘贴为Ascll Hex 格式并保存,修改后缀为.jpg,就获得了压缩包的解压密码,打开压缩包获得flag
得到解压密码:Th1s_1s_p4sswd_!!! 得到flag:flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}