XCTF-misc-新手练习 write up

pdf

  • 自己wp

题目给了一个pdf,打开是一个图片,使用Adobe Acrobat工具“文档”选项-->“检查文档”选项,检查出有隐藏文本,查看隐藏文本即为flag。

  • 官方wp
  1. 将pdf转化为word,即可看到里面包含一个图片,一行文字。
  2. 使用pdf编辑工具,将图片移开,即可看到文字
  3. 使用strings命令找不到答案,但是可以使用"pdftotext"命令提取文本信息
pdftotext pdf.pdf   //提取pdf文件中的文本信息
cat pdf.txt | grep flag   //查看文件即可得到flag

坚持60s

程序是个小游戏,通过上下左右键控制中间的图片不被绿帽子碰到就好了(这个游戏真的hhhhhhhh)
但是呢,游戏是比较难滴。。因为后期绿帽子移动速度过快。
通过在线网站对java class文件反编译成java源码,在java源码PlaneGameFreame中可以找到如下代码,代码中可以看到有flag,flag中的内容是base64加密的,因此使用base64解密就得到flag了。

源码.png

  1. 在线java反编译地址
  2. 官方wp中推荐的java反编译包的文章

SimpleRAR

  1. 下载附件,是一个rar格式的压缩包,解压缩后有一个flag文件,内容是"flag is not here!",除此之外再无其他内容,改变rar后缀名为图片格式显示图片出错。由图片和一个rar压缩包可以合并为一个文件的经验猜测,此题应该为合成的文件。用winhex打开rar,查看16进制文件。
  2. 打开后可看到文件头确实为rar文件头,参考rar文件格式,可知此处rar文件内容不对,将7A改为74,是png文件的头部类型编码,如下图所示,修改后得到正确的压缩包,解压缩后出现flag.txt和名为secret的空白图片。
    winhex修改文件.png
  3. 用winhex打开secret,文件头为gif类型,将后缀名改为gif类型,用ps打开,发现有两个图层。
  4. 自己的办法: 两个图层均为空白,但实际是图片在图层的R通道中,修改图层曲线,将R通道的线拖离,即可看到蓝色的半个二维码显现,然后将两个图层合并,并补全扫码即可得到flag,如下图所示:
    曲线调整.png

    二维码.png
  5. 官网解决办法: 使用ps发现两个图层后,将每个图层提取出来,具体方法是"文件"-->“导出”-->“将图层导出到文件”。然后使用工具stegsolve打开两个图层,该软件可以查看每个图层的内容,因此可以清晰的看到有两个半二维码,使用stegsolve的合并功能,使用and合并,合并为同一个图片文件,然后打开可以看到合并之后的残缺的二维码。如图:
    残缺的二维码.png

    合并的二维码.png
  6. 然后不需要对二维码进行修复直接使用二维码查看工具QRResearch直接扫描就可以得到flag。但是,我在复现过程中使用该工具时显示解码失败,并没有直接得到flag,不知道为什么。

心得:巧用工具,多使用工具可以省很多蛮力。

gif

  1. 下载文件后为一堆黑白图片,总共104个,题目说是gif,所以想着是把所有的图片拼为gif,104个工程量有点大。。。就直接放弃了。。。看了wp才知道黑白图片为二进制码,将白色看为0,黑色看为1.
  2. 通过图片得到二进制字符串,然后解码可得Flag。可以使用python获取flag。

如来十三掌

  1. 下载后是一个Doc文本,打开文本一串看不懂的什么金刚经的文字,去与佛论禅网站进行解密,注意在解密前需要加上“佛曰:”,这样才能正确解密。
  2. 解密后的文本类似于base64解密,但是还不是,需要先进行rot13解密。
  3. 将rot13解密后的文本在进行base64解密即可得到Flag。

要了解各种加密算法的特征,熟悉加密算法。

掀桌子

题目中给出了一串字符串,将字符串两两一组换算成十进制数,在减去128后换算成字符即可得到flag,注意在提交时要加上flag符合。
python代码如下:

s = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5" \
    "e7e9f3e4e3e8eaf9eaf3e2e4e6f2"

result = ""
for i in range(0, len(s), 2):
    result += chr(int(s[i:i+2], 16)-128)

print(result)

功夫再高也怕菜刀

  1. 下载附件为一个pcapng文件,没用过wireshark随便解压缩了一下结果有一个文件夹但是解压缩不开,上网查了一下才发现是wireshark抓包文件。用wireshark打开该文件。

  2. binwalk工具查看该文件,可以看到里面有一个压缩包。


    binwalk.png
  3. 用foremost工具分离该文件,在输出结果中分离出一个压缩包,里面有一个flag.txt文件,但是需要密码。

  4. 在wireshark中使用分组字节搜索flag.txt字样,发现文件里还有一个6666.jpg图片。

  5. 在使用分组字节搜索6666.jpg,并追踪TCP流,追踪TCP流的方法是点击相应报文,右键-->Follw-->TCP stream。这样所有有关的报文都会完整呈现出来。通过追踪TCP流发现如下信息,里面包含的是图片的16进制数据,搜索到图片开始字节"FF D8",结束字节“FF D9”复制并使用winhex新建一个字节文件,便可得到图片。


    追踪字节流结果
  6. 图片上有解密密码,解开文件即可得到Flag。


    图片密码

Stegano

  1. 文件下载是一个pdf,使用pdfinfo查看信息,如下所示,Keywords中有一串base64码,解密后发现不是flag:


    pdfinfo
  2. 打开文本查看flag信息,也没有。
  3. pdf转word,发现红色框里有一行小字,也没有flag。
  4. 使用pdf.js技术打印Pdf文本。打开谷歌pdf.js插件,插件地址,火狐自带有插件。F12打开开发者模式,命令行中输入命令document.documentElement.textContent,即可得到信息,如下所示,其中有一串ABAB的字符串,联合pdfinfo中的Subject: <| tr AB .- |>信息,将该字符串转化为摩斯密码,然后解密即可。
    Pdf.js
  5. python代码如下:
s = "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"
mose = ''
for c in s:
    if c == 'A':
        c = '.'

    if c == 'B':
        c = '-'
        
    mose += c

print(mose)

pdf.js教程

base64stego

  1. 压缩包打开发现需要密码,使用winhex打开压缩包查看,搜索50 4B,总共有三个,在第二个位置处看到之后的加密位置标记为09 00,其余的50 4B之后的加密位为00 00,这说明这是zip伪加密,因此将09``修改为00`,保存之后就可以直接解压缩,解压缩出来一个文件。

    伪加密.png

  2. 解压缩出来的文件里面是一行行base64码,每一行都可以解码成一句话,但是很遗憾,里面没有flag。

  3. 该文件隐写使用的是base64的编码技术,base64编码将38替换成46,如果不足会在最后补0,即最后总会有一两个=。该隐写的规则就是在最后填充=时将字符隐写在里面,却不改变任何信息。

  4. python代码如下:

import base64

b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('stego.txt', 'rb') as f:
    bin_str = ''
    flag = ''
    for line in f.readlines():
        stegb64 = str(line, 'utf-8').strip("\n")
        rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
        offset = abs(b64chars.index(stegb64.replace('=', '')[-1]) - b64chars.index(rowb64.replace('=', '')[-1]))    # 两个加密字符串比较,正确的base64编码和隐写后的编码字符串进行比较,得到差值,即隐写的那个字符。
        equalnum = stegb64.count('=')  # no equalnum no offset
        if equalnum:
            bin_str += bin(offset)[2:].zfill(equalnum * 2)
        print([chr(int(bin_str[i:i + 8], 2)) for i in range(0, len(bin_str), 8)])  # 8 位一组

  1. zip伪加密原理
  2. base64隐写原理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容