XCTF 攻防世界 MISC杂项 高手进阶区

hit-the-core(找规律)

日期:2020/02/09


这道题虽然很简单但是弄python的环境弄了很久。因为我写的脚本要用到isupper函数,而curses 库不支持 windows,所以要下载whl 包。试了很多个才找到适合我的版本。pip install curses-2.2.1+utf8-cp27-cp27m-win_amd64.whl
在这里插入图片描述首先在winhex中找到了这段字符串,现在要把flag筛选出来。
在这里插入图片描述
最开始以为是提取大写字母:

import re
import sys
from curses.ascii import isupper
a='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
b=re.findall('.{1}',a)
flag=' '
for i in b:
    if(i.istitle()==True):
        flag=flag+i
    if(i=='{' or i=='}'):
        flag=flag+i
print flag
# ALEXCTF{KPHD}

后来才知道是从第三个字符开始,每隔四个提取一个,得到正确flag:

import re
import sys
from curses.ascii import isupper
a='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag=' '
for i in range(3,len(a),5):
    flag=flag+a[i]

print flag
#ALEXCTF{K33P_7H3_g00D_w0rk_up}

2017_Dating_in_Singapore(脑洞)

日期:2020/02/09


根据题解知道了是在日历上按数字连线得到flag。

can_has_stdio?(Brainfuck)

日期:2020/02/09


直接用winhex打开全部复制到Brainfuck/Ook!中解码得到flag。
在这里插入图片描述

打野(zsteg)

日期:2020/02/08


先下载zsteg,用命令apt-get install zsteg下载失败,百度了一下,还可以用gem install zsteg下载。

然后直接zsteg 瞅啥.bmp得到flag。

在这里插入图片描述

a_good_idea(将两张图片不同的像素标记出来)

日期:2020/02/08


这道题一如既往的做不出来,看了看题解之后恍然大悟,顺便学学python对图像的操作,希望下次自己能把脚本写出来。参考:Python图像库PIL的类Image及其方法介绍


PIL
图像类class image

PIL是python里标准的图像处理库,可以对显示后的图像进行多种可视化处理操作。

Image类是PIL中的核心类,你有很多种方式来对它进行初始化,比如从文件中加载一张图像,处理其他形式的图像,或者是从头创造一张图像等。Image模块操作的基本方法都包含于此模块内。如open、save、conver、show…等方法。下面是PIL的 Image类中常用的方法和属性:

open方法

要从文件加载图像,使用 open() 函数, 在 Image 模块(类):

from PIL import Image             ##调用库,包含图像类
im=Image.open('D:\\desktop\\ctf\\to_do.png')   ##文件存在的路径,如果没有路径就是当前目录下文件
im.show()

在这里插入图片描述

使用save方法将jpg 转换成png

用 Image 类的 save() 方法保存文件的文件,使用给定的文件名保存图像。

from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print(im)
im.save("D:\\desktop\\ctf\\to_do.jpg")     ## 将"3d.png"保存为3d.jpg"

在这里插入图片描述

mode属性

im.mode ⇒ string

图像的模式,常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。如下表为常见的nodes描述:
在这里插入图片描述

from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print(im.mode) ## 打印模式属性

在这里插入图片描述
load方法

为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。目前的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如:

  pix = im.load()
  print pix[x, y]
  pix[x, y] =value

size属性

im.size ⇒ (width, height)
图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。

from PIL import Image
im = Image.open("3d.jpg")
print(im.size)

在这里插入图片描述

from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print im.size[0]

在这里插入图片描述在这里插入图片描述
new方法

使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。

from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
n_im= Image.new("RGB", (128, 128), "#FF0000")
n_im.show()

在这里插入图片描述


解题脚本
from PIL import Image
im1 = Image.open("to.png")
im2 = Image.open("to_do.png")
p1 = im1.load()
p2 = im2.load()
w = im1.size[0]
h = im1.size[1]

im = Image.new('RGB',(290,289))
p = im.load()

for i in range(w):
    cnt = 0
    for j in range(h):
        if p1[i, j] != p2[i, j]:
            p[i,j] = (255,255,255)
im.show()

在这里插入图片描述

隐藏的信息(八进制转字符串)

日期:2020/02/08


得到字符串:

0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 

数字到7为止猜测是八进制,写个脚本转为字符串:

import re
import sys
s='0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 '
a=re.findall('\d{3,}',s)
for i in a:
    sys.stdout.write(chr(int(i,8)))

#V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K

将得到的字符串base64解码得到flag。
在这里插入图片描述

Aesop_secret(ps图层叠加)

日期:2020/02/07


在这里插入图片描述在这里插入图片描述

我们的秘密是绿色的(新工具oursecret)

日期:2020/02/07


一,oursecret密码为绿色数字

二,zip爆破

三,明文攻击

四,伪加密

五,双重加密:栅栏密码,凯撒密码

pure_color(送分)

日期:2020/02/06


Stegsolve打开点右箭头得到flag。
在这里插入图片描述

Reverse-it(xxd,convert命令)

日期:2020/02/04


这道题的难点就在于发现文件内容是翻转的,我还特意看了看文件头,没找到对应的文件就没有多想,下次注意点。


方法一,复制十六进制数据,翻转。
s = "9DFF700DB6DAFC937263282222BDD218B425D4... ....FF8DFF"

x = s[::-1]

print x

python中[-1]、[:-1]、[::-1]、[2::-1]的使用方法
a=[1,2,3.4,5]
print(a[-1]) #取最后一个元素 [5]
print(a[:-1]) # 除了最后一个取全部 [ 1 2 3 4 ]
print(a[::-1]) # 取从后向前(相反)的元素 [ 5 4 3 2 1 ]
print(a[2::-1]) #取从下标为2的元素翻转读取 [ 3 2 1 ]
print(a[::-2]) #[5,3,1]

将翻转数据保存到winhex中,保存。
在这里插入图片描述



方法二,使用命令行。

xxd -p 文件名 | tr -d '\n' | rev | xxd -r -p > 更改后的文件名

1,|
| 表示管道,上一条命令的输出,作为下一条命令参数。

2,xxd命令
-p以一个整块输出所有的hex, 不使用空格进行分割。
-r 反转操作,将16进制专程2进制

3,tr命令
-d '\n '删除字符串中所有’ \n '空格。

4,rev命令
rev 将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。

在这里插入图片描述


打开是一张翻转的图片。

在这里插入图片描述
然后对称一下,使用命令:

convert -flop reversed reversed.jpg

convert命令详解:

convert -flip 上下翻转。
convert -flop 左右翻转。

要用convert命令还要先下载ImageMagick软件,使用命令apt-get install ImageMagick,但是我这里报错E:无法定位软件包 ImageMagick,百度了一下要在etc/apt 的sources.list 修改镜像源,这一更新更新了好久,,,
参考:https://blog.csdn.net/qq_42092076/article/details/88357387
在这里插入图片描述更新之后还是没有解决问题,于是我在windows上安装一个imagemagick使用。
参考:Windows系统安装及初步使用ImageMagick

最后发现将 ImageMagick改为imagemagick小写的就可以了,,,,,,,,,晕

在这里插入图片描述

MISCall(git stash)

日期:2020/02/04


将文件拖进kali,更改文件名为abc,然后file abc查看文件类型。
在这里插入图片描述然后 tar xjvf abc解压文件。
在这里插入图片描述
发现是拿到了.get目录,然后根据网上的方法知道了 git stash
在这里插入图片描述然后运行脚本得到falg。
在这里插入图片描述

神奇的Modbus(送分)

日期:2020/02/04


题目说了Modbus,百度了一下是一个通讯协议。
在这里插入图片描述先在包里搜索flag没有搜到,然后把Modbus协议追踪tcp流在里面找到了flag,但是还要加个o,,,
在这里插入图片描述

embarrass(送分)

日期:2020/02/04


直接搜索字符串得到flag。

Training-Stegano-1(送分)

日期:2020/01/25


直接用winhex打开得到flag。
在这里插入图片描述# János-the-Ripper(ARCHPR爆破)
日期:2020/01/25


解压出来winhex发现仍是压缩文件,改后缀为zip,打开后是txt加密文件。
在这里插入图片描述然后用ARCHPR爆破
在这里插入图片描述

Test-flag-please-ignore(16进制转字符)

日期:2020/01/25


解压后打开是一串字符。

666c61677b68656c6c6f5f776f726c647d

发现没有f以后的字符猜测是16进制,解密以后得到flag。
在这里插入图片描述

stage1(图片隐写,反编译)

日期:2020/01/25


下载附件,使用StegSolve打开,切换到左一视图时看到如下图片
在这里插入图片描述
扫描二维码得到一串十六进制数字

03F30D0AB6266A576300000000000000000100000040000000730D0000006400008400005A00006401005328020000006300000000030000000800000043000000734E0000006401006402006403006404006405006406006405006407006708007D00006408007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100712B00577C010047486400005328090000004E6941000000696C000000697000000069680000006961000000694C0000006962000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007307000000746573742E7079520300000001000000730A00000000011E0106010D0114014E280100000052030000002800000000280000000028000000007307000000746573742E707974080000003C6D6F64756C653E010000007300000000

从开头03F3可知时pyc文件,保存为1.pyc
在这里插入图片描述在这里插入图片描述
python反编译,介绍一个在线python反编译网站:python反编译在线工具

def flag():
    str = [
        65,
        108,
        112,
        104,
        97,
        76,
        97,
        98]
    flag = ''
    for i in str:
        flag += chr(i)
    
    print flag


def flag():
    str = [
        65,
        108,
        112,
        104,
        97,
        76,
        97,
        98]
    flag = ''
    for i in str:
        flag += chr(i)
    
    print flag
flag()

最后要加一个flag(),调用函数,得到flag。
在这里插入图片描述

Hear-with-your-Eyes(音频隐写-频谱图)

日期:2020/01/27


下载好文件之后解压,发现里面有个没有后缀的文件,放到winhex里观察,文件头是1f8b0800,百度搜了搜发现是gzip文件的文件头,于是把后缀改为zip。打开里面有一首歌。
在这里插入图片描述然后应该是音频隐写类的题目,上网搜了搜这类题怎么做,结果示例的第二题就是原题,,,
CTF中音频隐写的一些整理总结
用audacity 打开这个音频文件,然后调至频谱图,出现flag。
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值