bugku题解记录

Flask_FileUpload

看题目的意思,大概是文件上传攻击。
题目页面也只有上传文件查询
那么查看源代码
发现只能上传png或jpg,注释里说如果你上传之后,将会用python执行查询
所以编辑文本文档,写代码

import os#提供了与操作系统交互的各种函数,我们可以通过这些函数调用计算机底层操作系统的部分功能来快速、高效地管理文件和目录
os.system('ls /')#显示根目录下文件

改为png格式,上传,查看源代码,获得根目录下文件
有一个flag文件
修改文本文档

import os
os.system('cat /flag')#一次显示整个文件:cat filename

修改为png,上传,获得flag

easy_nbt

nbt文件是mc的数据格式,通常以.dat文件的形式存在于游戏存档文件夹中,可以通过第三方工具(如NBTExplorer)对其进行编辑和修改。
如果用kali的binwalk查看就会知道,这个文件夹下的level.dat文件是gzip格式的,用binwalk提取一下就可以获得压缩前的内容,获得flag
如果没有binwalk也可以压缩完再解压,用记事本打开,搜索也能找到flag

留言板

题目提示了xss平台,不过我这里收不到,所以用了评论区里的另一种方法:
dirsearch扫网站目录,找到一个admin.php
至于密码嘛……评论区给的,我也没扫到数据库文件
接着登录管理员账号,控制台输入alert.(document.cookie),获得cookie
flag%7Bfd2d84454f7b49f9308d202a467409a4%7D
转义一下花括号
(我的xss能力还得精进一下啊)

抄错的字符

根据题干,2可能抄错为Z,5可能抄错为S,6可能抄错为B,9可能抄错为G
不过解出来也不是“一段话”
根据有字母有数字的规律,联想到base64
在字符串后面加‘=’,替换里面的字母大小写或数字
经过base64编码后的字符串长度一定会被4整除(包括后缀等号)
每四个字符一组解码,可以试出答案
Aman_very_cool
当然写个代码直接转换更快……

这是一张单纯的图片

一看这个标题就知道这张图片不单纯哈
文件里只有一张图片
那想必是隐写术了
winhex查看文件头尾,发现神秘代码
key{you are right}ÙÙ
一看就是unicode哈
转换为ASCII就是:
key{you are right}
评论区还有更邪的办法,改扩展名为html,直接就能看到答案哈哈哈,直接给unicode编码转换了。属于未卜先知了

隐写

图片题

  1. 看文件属性,没啥线索
  2. 010 editor/winhex看文件头尾,搜索flag,正常
  3. 看CRC是否被篡改

评论区大佬表示:

使用winhex或者010editor打开图片,查看文件头、文件尾是否有问题,没有的话再看长宽是否需要修改(本题需要将长宽修改成一致,0x1f4,高度改更大点也没事任意),以及crc是否被篡改。以上都尝试一遍基本可以解决图片格式上的问题。

这里我们可以运行一下010 editor官网的PNG模板,看看有没有什么报错
官网模板链接
果然有:
*ERROR: CRC Mismatch @ chunk[0]; in data: cbd6df8a; expected: c758d77d
这里可能的两个原因:

  1. CRC错误,可以按照建议修改CRC大小
  2. 图片长宽错误
    修改CRC大小无果,我们需要修改图片长宽
    根据CRC大小获得图片长宽脚本:
import os
import binascii
import struct

crcbp = open("2.png", "rb").read()    #打开图片
for i in range(2000):
    for j in range(2000):
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0xcbd6df8a):    #图片当前CRC
            print(i, j)
            print('hex:', hex(i), hex(j))

根据脚本运行结果,将高改为F4
果然图片下方出现了结果

原理见这个博客

我们可以发现计算出来的CRC校验值为:C758D77D。和图片里本身的CRC校验值“CBD6DF8A “不否。那么问题则出现在IHDR数据库这一部分。那么这么多位的值我们怎么去判定到底是哪一位出了问题呢?此时可以根据物理像素尺寸数据块数据来查看,即pHYs。我们看如下图所示:第一处标红的”00 00 00 09“为物理像素尺寸数据块的长度。第二处标红的”70 48 59 73“为数据块类型标志,对应的ASCII码值等于pHYs。接下来蓝色的部分表示x轴上每米像素数量00001274和y轴上每米像素数量00001274(解题关键点)。绿色的”01“表示meter=1,单位定义为”每米“的意思,后面的绿色标识为CRC值。
我们发现x轴和y轴的像素应该是一样的,换句话说,这个图片的比例应该是正方形。此时我们把上述的高420像素值改为500。即”A4“改为”F4“,再次查看图片,找到flag。

眼见非实

如果打开一个文档文件(如.docx、.xlsx、.pptx等)时出现了以"PK"开头的内容,那么很可能是因为该文件实际上是一个压缩包(ZIP格式),而不是一个常规的文档文件。这是因为Microsoft Office文件使用了Open XML格式存储,这种格式本质上是一个XML文件和一些资源文件的打包。 该压缩包中包含了文档的各个组成部分,例如文本、图片、图表、样式等。如果你将该文件改名为.zip后缀然后解压缩,你将能够看到这些文件和文件夹。 这种设计使得Office文件更加灵活和可扩展,允许用户以压缩包的方式对文件进行管理和修改。但这也导致了某些情况下以"PK"开头的内容的出现。

因此打开眼见非实.docx文件后,发现开头有PK
将文件改为zip格式
挨个文件搜索flag
虽然在document.xml中搜索到了

Flag在这里呦!

但结合题目描述可知,答案是flag{}形式的,再搜索下一个,获得flag:flag{F1@g}

同时,用010 editor看眼见非实.docx的文件头,可以发现是zip的文件头:50 4B 03 04
也可以用binwalk对文件进行拆分,一样的

当打开文件后的内容与常规不一样后,可以尝试往文件拆分的思路走。判断文件是否被合并过可以使用kali中的file命令

同时把文件夹整个放在vscode里就可以在整个文件夹的文件里搜索flag了,不用一个一个翻

telnet

下载的是一个pcap格式的文件
使用wireshark打开,既然题目叫telnet就一条一条查telnet呗
直到翻到内容为flag{d316759c281bf925d600be698a4973d5}的telnet

啊哒

图片题

  1. 第一步看属性,有一个相机型号73646E6973635F32303138,挺奇怪哈
  2. 然后再010 editor看看文件头尾,还运行了一下jpg模板,没输出什么错误。接着搜索了一下flag,嗯?搜到了一个flag.txt
    好小子还有别的文件是吧
  3. binwalk提取文件,看看是不是真的有,果然啊,有一个flag.txt
  4. 用foremost提取,或者直接把文件后缀改成.zip,解压得到flag.txt
  5. 打开flag.txt,有密码。试试属性里那串相机型号。嗯……不对……这串密码还得经过什么变换呢?
  6. 看起来像十六进制字符串哈,那转换一下ascii试试。嘿,转换出来是sdnisc_2018
    成了,打开flag.txt,得到flag

图片题常规思路,逐个试:1.右键属性看一遍 2.binwalk看一遍 3.foremost分离 4.winhex看下十六进制起始和结尾 5.stegsolve查看 6.校验crc值,修改图片高度

/.-

看题目就知道是摩斯密码
直接搜一个摩斯密码转换器转换即可
我是得到了转换密码flag----.–d3fcbf17f9399504-----.- ,不通过后,直接把----.–、-----.-替换为{}试了试,直接成功了
评论区给出了更详细的解题思路

首先利用摩斯密码进行解码,将/全部替换成空格,得到密码后,发现有%u7d,%u代表16进制,7b对应十进制下的123,ascii值为123的符号是{,后边相同,即可得到flag,注意将字母全部小写

聪明的小羊

一看就是栅栏密码
fa{fe13f590lg6d46d0d0}
fa{fe13f590
lg6d46d0d0}
flag{6fde4163df05d900}

ok

打开全都是Ook
搜Ook的时候联想词出现了一个ook密码
嘿,看一看

BrainFuck和Ook主要是对程序源代码进行加密,是将源码中的指令替换成替他符号,这种密码我们只需了解,认出即可

有一个专门的解密网站可以用ook解密
哇,直接得到了答案
评论区说Ook! 是一种用猩猩声音表示代码的编程语言,哈哈哈好好玩

[±<>]

刚才查Ook的时候看到了,Brainfuck使用<>±.,[]这八种符号来替换c语言的语法和命令
在线解密链接
直接获得答案

ping

下载后得到一个pcap文件,用wireshark打开
全是icmp包,打开第一个看看
怎么除了一个f之外,都是00啊
打开下一个看看,除了l都是00
这下知道了,一个包里一个flag的字符
然后……一个一个抄下来(好笨的办法

把猪困在猪圈里

在末尾有=,并且有大小写字母和数字,可能是base64编码
直接解码——是乱码
看形式也不太像普通的base64转换ascii,同时题目提示看起来像猪圈密码,说不定转换结果是图片嘞
查资料发现base64是可以与图片互换的
那就找一个转化器base64图片转换
得到了猪圈密码
猪圈密码在线转换
转换一下,得到flag

你喜欢下棋吗

下载获得一个加密的flag.txt和一个解压密码提示
根据题目,确定这个是棋盘密码
棋盘密码加解密
获得flag.txt解压密码
打开后,提示flag是一种5bit的编码
搜索后找到一个baudot code博多密码
博多密码在线转换

小山丘的秘密

提示是hill能有什么秘密呢
希尔密码哦
打开下载文件,有一个flag文件和一张图片。flag图片提示A=1开始的,希尔密码需要密钥,那么就得从图片文件中看出
那么一个图片上,一个棋子代表a,两个棋子代表b,三个棋子代表c,没有棋子代表z,四个棋子代表d,五个棋子代表f,六个棋子代表g
密钥为
abc
zad
fgz
希尔密码在线转换
得到flag

你可能感兴趣的:(安全)