CTF做题笔记(二)+ 第一次团队内比赛

前言:

把之前做过的几个题总结了下,这篇博客在草稿箱里待了好久了,也该放出来了。
本文目录
明文
Jefferson‘gun(杰弗逊的枪)
精美壁纸
Ook!
rot13加密解密
MD5加密解密
种族歧视
备份文件
cookie
simple_js
baby_web
N种解决方法
小姐姐—y1ng

一次团队比赛

看图片属性
SL藏在字节中
修改图片宽或高
补充头部
LSB
使用outguess工具
使用F5-steganography工具
签到题
文件分离
画图
使用steghide工具
双图
拼图
流量包签到

明文

CTF做题笔记(二)+ 第一次团队内比赛_第1张图片
下载好就是这样一个文件:
在这里插入图片描述
把它改成压缩包.zip再打开,果然是有东西的
CTF做题笔记(二)+ 第一次团队内比赛_第2张图片

打开提示文本
CTF做题笔记(二)+ 第一次团队内比赛_第3张图片
打开压缩包发现了加密的Word文档
在这里插入图片描述
用ARCHPR暴力破解zip密码
CTF做题笔记(二)+ 第一次团队内比赛_第4张图片
密码拿到,hahaha,然后就可以打开那个文档了。
CTF做题笔记(二)+ 第一次团队内比赛_第5张图片
一片空白,,接下来让空白的地方显示出来文字
找到搜索框,搜索选项两个字,
CTF做题笔记(二)+ 第一次团队内比赛_第6张图片
然后找到视图(office的Word文档是显示)
CTF做题笔记(二)+ 第一次团队内比赛_第7张图片
然后成功拿到flag
CTF做题笔记(二)+ 第一次团队内比赛_第8张图片

Jefferson‘gun(杰弗逊的枪)

CTF做题笔记(二)+ 第一次团队内比赛_第9张图片
打开TXT后是这样的,
CTF做题笔记(二)+ 第一次团队内比赛_第10张图片
这个转轮密码就是根据密钥和密文将上面的13行字符串重新排序。按照密钥的顺序,现在的第二行重新排列后在第一行,其他同样如此,排好之后CTF做题笔记(二)+ 第一次团队内比赛_第11张图片
然后再根据密文来修改,密文的意思就是,拿第一行做个例子,在第一行找到N,把它前面的字母全都移到本行的最末尾,组成新的字符串。全部移动之后就是找到倒数第九列(至于为什么,百度我没找到,希望知道这个的大佬能指点一下,十分感谢!)。
CTF做题笔记(二)+ 第一次团队内比赛_第12张图片
flag就是这个啦。

精美壁纸

CTF做题笔记(二)+ 第一次团队内比赛_第13张图片
Pixiv@純白可憐.jpg是张图片,打开看看

挺好看的,精美壁纸。
然后把它拖进winhex里
CTF做题笔记(二)+ 第一次团队内比赛_第14张图片
好好检查下,然后在最后发现了信息。
CTF做题笔记(二)+ 第一次团队内比赛_第15张图片
题里说了压缩包密码,就找压缩包。
CTF做题笔记(二)+ 第一次团队内比赛_第16张图片
然后查找504B0304,
CTF做题笔记(二)+ 第一次团队内比赛_第17张图片
找到了CTF做题笔记(二)+ 第一次团队内比赛_第18张图片
再找文件尾,zip的文件结尾一般都是`504B0506``开头,在意同样的办法找到文件尾就行。
然后提取压缩包
选中文件头到文件尾的部分右键单击,选择编辑,然后复制选块
,至新文件。
CTF做题笔记(二)+ 第一次团队内比赛_第19张图片
然后打开保存的压缩包,
CTF做题笔记(二)+ 第一次团队内比赛_第20张图片
flag文本加密了,password is picture ID.
密码是图片的ID,复制一下 图片的名字,百度一下。
CTF做题笔记(二)+ 第一次团队内比赛_第21张图片
进入网页之后找到那张图片,看下它的ID,就是压缩包的密码了
在这里插入图片描述
打开文本
CTF做题笔记(二)+ 第一次团队内比赛_第22张图片
还有密码。这个密码,我做的时候可是好一顿查啊。
Unicode转码:
hgame{Do_y0u_KnOW_uNiC0d3?}

Ook!

bugku的一道题,第一眼看见着实吓到我了,自己看看就明白了。
不过真的是,弄那么长,吓唬谁呢,纸老虎,在线网址
直接破解。没啥说的,啥也不是。

rot13加密解密

CTF做题笔记(二)+ 第一次团队内比赛_第23张图片
做的第一道考察rot13的题目,就是偏移13位的凯撒密码。
CTF做题笔记(二)+ 第一次团队内比赛_第24张图片
拿到key。

MD5加密解密

CTF做题笔记(二)+ 第一次团队内比赛_第25张图片
直接搜在线解密MD5工具直达链接
CTF做题笔记(二)+ 第一次团队内比赛_第26张图片
key:bighp

种族歧视

CTF做题笔记(二)+ 第一次团队内比赛_第27张图片
f12点击控制台,查看一下。CTF做题笔记(二)+ 第一次团队内比赛_第28张图片
发现没法操作。那就抓包,
CTF做题笔记(二)+ 第一次团队内比赛_第29张图片
将这里改成:en-US,en;q=0.9然后go
CTF做题笔记(二)+ 第一次团队内比赛_第30张图片
拿到key。

备份文件

来自攻防世界web新手入门
开启在线环境,进入之后看到
CTF做题笔记(二)+ 第一次团队内比赛_第31张图片
正确姿势:在这里加上/index.php.bak在这里插入图片描述
然后会自动下载一个文件,在本地用记事本打开
CTF做题笔记(二)+ 第一次团队内比赛_第32张图片
得到flag。
常见的文件备份扩展名
.rar,.zip,.7z,.tar.gz,.bak,.swp,.txt,.html

cookie

攻防世界web新手入门
进去后看到“你知道什么是cookie吗?”
CTF做题笔记(二)+ 第一次团队内比赛_第33张图片
明显让查看cookie,最简单的办法,f12,到Console(控制台)输入document.cookie,就可以直接看到cookie了,也不用到处找,
CTF做题笔记(二)+ 第一次团队内比赛_第34张图片
cookie.php信息提示。然后就把原来的url后面加上cookie.php回车。CTF做题笔记(二)+ 第一次团队内比赛_第35张图片
然后就根据提示查看http的response呗。
f12NetworkCtrl+Rcookie.php左键单击然后就能看到flag了
CTF做题笔记(二)+ 第一次团队内比赛_第36张图片

simple_js

CTF做题笔记(二)+ 第一次团队内比赛_第37张图片
打开后弹了一个窗口,前段时间学过xss 然后就想到了Javascript的弹窗代码CTF做题笔记(二)+ 第一次团队内比赛_第38张图片
先随便输个密码,
CTF做题笔记(二)+ 第一次团队内比赛_第39张图片
再看代码,f12
CTF做题笔记(二)+ 第一次团队内比赛_第40张图片
果然是个弹窗的JavaScript代码,一眼就看到了那个很长的一串数字。仔细看就会发现它是十六进制数,先转换,,,
CTF做题笔记(二)+ 第一次团队内比赛_第41张图片
将解出来的十进制数对照ascii码表,可以在Excel表格中转换,比较快
CTF做题笔记(二)+ 第一次团队内比赛_第42张图片

baby_web

CTF做题笔记(二)+ 第一次团队内比赛_第43张图片
这个提示初始页面,然后看了进入场景看看,
CTF做题笔记(二)+ 第一次团队内比赛_第44张图片
然后呢,,,对于这种,直接f12看源码,然而扫荡一波,什么都没找到。
然后再想想提示,初始页面,就是知道是啥,但说不上来那种感觉,然后我就去百度初始页面,刚开始进入浏览器显示的页面,还看到有个大哥在问怎么把百度设置为初始页面呢,这么一看,突然想到刚刚那个url好像有点不对劲,然后对比了一下题目给的url和进入那个链接浏览器显示的url,发现不一样了,多了个/1.php一定是中间跳转了,我之前拿我的物理机当靶机玩xss的时候玩过这个,让用户点击一个链接或者其他的图片之类的东西后直接跳转另一个页面,是反射型xss。
这里跳转就burp抓包。
CTF做题笔记(二)+ 第一次团队内比赛_第45张图片
右键单击然后转到Repeater里面
CTF做题笔记(二)+ 第一次团队内比赛_第46张图片
这多好,嘿嘿。

N种解决方法

打开文件是个不能运行的一个应用程序,我就先把它重命名为文本文件了,然后就可以打开了
Augenstern
看到了base64然后我就把base64 后面的内容全都放在在线解密网站去解密了。解出来一堆乱码,,,我看到这些乱码,好像是在winhex里打开的样子,所以我就又打开winhex(看的方便点)但是找半天,发现,没有隐藏压缩包、图片什么的,烦,,,,这个到底考的什么???有一句话说的真没错,把人逼急了,什么都做的出来,我就全选复制,整个扔浏览器里跑了。结果wc了,整出来个二维码,激动,,差点鼠标都给扔了。
颤抖的手掏出我的诺基亚一扫,哎,美滋滋。
CTF做题笔记(二)+ 第一次团队内比赛_第47张图片

小姐姐—y1ng

CTF做题笔记(二)+ 第一次团队内比赛_第48张图片
这是之前比赛的题,然而我根本就没看,(我菜我有理╭(╯^╰)╮)
CTF做题笔记(二)+ 第一次团队内比赛_第49张图片
这个看着有点别扭,但是我做的时候没想到什么思路,就还是分离一下看看能不能找到其他的信息,但是并没有,然后就放winhex里找信息了。找半天也没找到,我懵了,,,,找wp,结果发现,直接搜就行了。但是我的问题又来了,(wp上说的是直接搜BJD)
CTF做题笔记(二)+ 第一次团队内比赛_第50张图片
为什么没有?我当时可迷!!!
然后我尝试搜了十六进制的424A44(BJD)就找到了。但是我又在下图的位置再次尝试了搜BJD,但是,但是******还是没有。奇怪。
CTF做题笔记(二)+ 第一次团队内比赛_第51张图片

看图片属性

右键找到属性,看详细信息,备注就是信息

SL藏在字节中

winhex打开图片搜文本SL,flag就在中间的位置。(多搜几次)

修改图片宽或高

拖进winhex中,在改高度的地方将高度改高一点
CTF做题笔记(二)+ 第一次团队内比赛_第52张图片

补充头部

还是将图片在winhex打开,提示的这么明显了,是png格式,在头部位置右键单击,然后选编辑,粘贴0字节
CTF做题笔记(二)+ 第一次团队内比赛_第53张图片
粘贴4个,然后png格式添加89504E47
CTF做题笔记(二)+ 第一次团队内比赛_第54张图片
其他格式
CTF做题笔记(二)+ 第一次团队内比赛_第55张图片
解题姿势是不变的

LSB

stegsolve打开进行转换看到在0的有效位跟其他的有点不同的是多了最上面的一串乱七八糟的东西,其他(green,blue)的都有(而且提示也是最低有效位)
CTF做题笔记(二)+ 第一次团队内比赛_第56张图片
然后提取出来就行
CTF做题笔记(二)+ 第一次团队内比赛_第57张图片

使用outguess工具

之前见了一个这样的题,那个题目特别注重了“猜”这个字。那个就是outguess。
看这个,一张图片
CTF做题笔记(二)+ 第一次团队内比赛_第58张图片
首先想到,outguess是要有密码的,不能盲目的一顿乱操作。
就一张图片,分离不出任何信息,然后想到了备注
CTF做题笔记(二)+ 第一次团队内比赛_第59张图片
新佛曰。新与佛论禅在线网站可解新约佛论禅解出来是lemon
kali解题
payload
outguess -k '密钥' -r 图片 flag.txt解密的
outguess -k "secret key" -d flag.txt 0.jpg 1.jpg加密的
加密之后,0.jpg会覆盖1.jpg,
flag.txt中的内容是要隐藏的文本
CTF做题笔记(二)+ 第一次团队内比赛_第60张图片
在outguess的文件夹里找到flag.txt
CTF做题笔记(二)+ 第一次团队内比赛_第61张图片

使用F5-steganography工具

CTF做题笔记(二)+ 第一次团队内比赛_第62张图片
F5隐写同样是需要一个密钥,就一张图片,那就在这里下功夫。先分离,发现没东西,再看备注(虽然知道是无用还是试试)。最后才发现它就在最显眼的地方。CTF做题笔记(二)+ 第一次团队内比赛_第63张图片
payload
java Extract picture.jpg -p key
CTF做题笔记(二)+ 第一次团队内比赛_第64张图片
在f5的文件目录中找到output.txt就是flag。

签到题

CTF做题笔记(二)+ 第一次团队内比赛_第65张图片
winhex打开图片,没给其他信息的话,一般不难找,头部没有,到最尾部看。CTF做题笔记(二)+ 第一次团队内比赛_第66张图片
是HTML编码,在线网站解码就行了。

文件分离

CTF做题笔记(二)+ 第一次团队内比赛_第67张图片
foremost分离
CTF做题笔记(二)+ 第一次团队内比赛_第68张图片
flag拿到(个人感觉windows上使用foremost比binwalk方便多了。)

画图

CTF做题笔记(二)+ 第一次团队内比赛_第69张图片
下载好gnuplot后,然后开始看图片。还是第一步分离了一下。没想到还真有东西,然后看压缩包,解压出来一个txt文本。特别长。
CTF做题笔记(二)+ 第一次团队内比赛_第70张图片
没头绪,不过应该没有加密了。就去看看gnuplot怎么用的吧。看学长提示的那个博客看过去,看过后,还阔以,明白了。
先下载个Notepad++再说,
CTF做题笔记(二)+ 第一次团队内比赛_第71张图片
转换后
CTF做题笔记(二)+ 第一次团队内比赛_第72张图片
保存,打开gnuplot程序
CTF做题笔记(二)+ 第一次团队内比赛_第73张图片
回车画图
CTF做题笔记(二)+ 第一次团队内比赛_第74张图片
微信扫吧,别用QQ,害,明明是一个“妈”生的,差距怎么就这么大

使用steghide工具

CTF做题笔记(二)+ 第一次团队内比赛_第75张图片
因为steghide解题也是要密钥的,所以先找图片的信息。分离,没有。下一个,看备注。这个找到了
CTF做题笔记(二)+ 第一次团队内比赛_第76张图片
先在题中给的链接中学习一下怎么使用,使用方法,然后就可以解题了。
CTF做题笔记(二)+ 第一次团队内比赛_第77张图片
看着明显不是flag,像是栅栏密码,在线网站解一下
CTF做题笔记(二)+ 第一次团队内比赛_第78张图片
get

双图

CTF做题笔记(二)+ 第一次团队内比赛_第79张图片
一顿操作猛如虎,一看码子扫不出来,
CTF做题笔记(二)+ 第一次团队内比赛_第80张图片
保存这个二维码,(其实我还去搜了彩色的二维码能不能识别,sha子行为),然后再用stegsolve打开这张码子,
CTF做题笔记(二)+ 第一次团队内比赛_第81张图片
我把三张图一块截了,第一张是DES
第二张是6XaMMbM7
第三张是长字符串。搜一下了解到有DES加密这个密码。而且有在线解密网站,直接搜就好了,第二个是密钥。第三个是密文
在线解密可得出flag

拼图

CTF做题笔记(二)+ 第一次团队内比赛_第82张图片
有两种方法,一种比较暴力,一种比较正规。
用到题中提示的工具,真是不得不说,下载安装真的烦,到现在我仍然是报错。烦死了,不装了,其实我已经装这个工具两天了,一个接一个的,浪费我时间艹。
可以直接拼出来,就直接拼吧,不会也就没办法了,工具用不了都是白搭,烦,快照都用了,还要重新下载以前下载的工具,真是烦,工具没捡到还丢了原本的工具,重装烦,。郁闷。CTF做题笔记(二)+ 第一次团队内比赛_第83张图片
就这吧,以后不随便往kali安装第三方工具了,

流量包签到

CTF做题笔记(二)+ 第一次团队内比赛_第84张图片
打开这个工具,在工具中打开下载的文件,
然后随便点条数据,找到Source,右键单击选择追踪流,再选择TCP。就能看到flag了。
CTF做题笔记(二)+ 第一次团队内比赛_第85张图片
还有一个得到flag的办法,我第一次得到flag是用这个办法的,不过可能就这道题可以用吧。
歪门邪道:
直接将文件拖进winhex,搜索文本SL 或者flag(挨个试试呗),结果还真找到了。就这样,没了。对了,要是想不到搜flag还是什么关键字的话,直接搜{英文输出的大括号。也可以,多向下搜几次(试过了,可以)。
CTF做题笔记(二)+ 第一次团队内比赛_第86张图片
就这吧,最后几道题写的而过于简单,两天卡在一个地方,没心情写了,就这样吧。真累。

盲水印

补充一道题
最后做出来的,同样是需要工具

CTF做题笔记(二)+ 第一次团队内比赛_第87张图片
这道题工具给出,但是同样是在前两天没有get到工具,为什么是补充的呢?就是原本不打算继续这道题了,就没有再进行下去了。现在最后几个小时了,觉得还是有些不服气,为什么我做不出来,就又接着看,继续搞那个工具了。还是跟昨天一样的报错。(为了写博客,我又将我改好的设置改回原来在github上下载的原脚本。)

CTF做题笔记(二)+ 第一次团队内比赛_第88张图片
想到之前请教学长那个rsa的脚本的问题,就是关于python2和python3 中的除法的问题。跟这里很相似。
我就尝试了下自己改下脚本,原来的脚本是这样的

# coding=utf-8
import cv2
import numpy as np
import random
import os
from argparse import ArgumentParser
ALPHA = 5


def build_parser():
    parser = ArgumentParser()
    parser.add_argument('--original', dest='ori', required=True)
    parser.add_argument('--image', dest='img', required=True)
    parser.add_argument('--result', dest='res', required=True)
    parser.add_argument('--alpha', dest='alpha', default=ALPHA)
    return parser


def main():
    parser = build_parser()
    options = parser.parse_args()
    ori = options.ori
    img = options.img
    res = options.res
    alpha = float(options.alpha)
    if not os.path.isfile(ori):
        parser.error("original image %s does not exist." % ori)
    if not os.path.isfile(img):
        parser.error("image %s does not exist." % img)
    decode(ori, img, res, alpha)


def decode(ori_path, img_path, res_path, alpha):
    ori = cv2.imread(ori_path)
    img = cv2.imread(img_path)
    ori_f = np.fft.fft2(ori)
    img_f = np.fft.fft2(img)
    height, width = ori.shape[0], ori.shape[1]
    watermark = (ori_f - img_f) / alpha
    watermark = np.real(watermark)
    res = np.zeros(watermark.shape)
    random.seed(height + width)
    x = range(height / 2)
    y = range(width)
    random.shuffle(x)
    random.shuffle(y)
    for i in range(height / 2):
        for j in range(width):
            res[x[i]][y[j]] = watermark[i][j]
    cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100])


if __name__ == '__main__':
    main()

这是原封不动的从github上下载下来的。
CTF做题笔记(二)+ 第一次团队内比赛_第89张图片
这两处的/改成//,然后保存,继续运行命令跑起来
CTF做题笔记(二)+ 第一次团队内比赛_第90张图片
可以看到还是报错了,但是刚做的改动可不是无用功,可以看出来比起上面的报错,没有了那个关于/的报错了,所以这一步是有用的。
再接着看错误。这个错误不懂,有道翻译一下(英语不好)
有点难懂,直接百度搜报错吧,挑挑选选找到了原因。
原因:是python3中range不返回数组对象,而是返回range对象
加个声明为list的语句就行

找到range的对象加上list让它返回列表
CTF做题笔记(二)+ 第一次团队内比赛_第91张图片
将这里改成图中的样子就行。保存一下再跑
CTF做题笔记(二)+ 第一次团队内比赛_第92张图片
已经没有报错了,这就是全部解决了。心情舒畅了许多。
最后再附上完整的正确脚本。

# coding=utf-8
import cv2
import numpy as np
import random
import os
from argparse import ArgumentParser
ALPHA = 5


def build_parser():
    parser = ArgumentParser()
    parser.add_argument('--original', dest='ori', required=True)
    parser.add_argument('--image', dest='img', required=True)
    parser.add_argument('--result', dest='res', required=True)
    parser.add_argument('--alpha', dest='alpha', default=ALPHA)
    return parser


def main():
    parser = build_parser()
    options = parser.parse_args()
    ori = options.ori
    img = options.img
    res = options.res
    alpha = float(options.alpha)
    if not os.path.isfile(ori):
        parser.error("original image %s does not exist." % ori)
    if not os.path.isfile(img):
        parser.error("image %s does not exist." % img)
    decode(ori, img, res, alpha)


def decode(ori_path, img_path, res_path, alpha):
    ori = cv2.imread(ori_path)
    img = cv2.imread(img_path)
    ori_f = np.fft.fft2(ori)
    img_f = np.fft.fft2(img)
    height, width = ori.shape[0], ori.shape[1]
    watermark = (ori_f - img_f) / alpha
    watermark = np.real(watermark)
    res = np.zeros(watermark.shape)
    random.seed(height + width)
    x = list(range(height // 2))
    y = list(range(width))
    random.shuffle(x)
    random.shuffle(y)
    for i in range(height // 2):
        for j in range(width):
            res[x[i]][y[j]] = watermark[i][j]
    cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100])


if __name__ == '__main__':
    main()

这次也是收获好多,就这个盲水印让我明白自己看报错信息的重要性。解决了问题是真的爽。

你可能感兴趣的:(CTF)