BugKu-MISC-WP史诗全集

一、信息收集与社工

1.签到

微信扫面二维码回复:flag得flag。

2.猜

提示是某人姓名全拼音,运用谷歌识图搜到是liuyifei。

二、编码分析

1.多种方法解决

用NotePad++打开发现是python的b64img模块把图片转换成文本的文本。直接在线还原base64编码的图片的二维码,扫面得flag

2.普通的二维码

扫码说:flag就在这里。各种分析方法发现都没用。最后在文本最后发现一串数字

没有8,应该是八进制然后把八进制转换成字符应该是flag,每三个数字一组写个脚本。

c = '146154141147173110141166145137171060125137120171137163143162151160164137117164143137124157137124145156137101163143151151041175'
flag = ''
for i in xrange(0,126,3):
flag += chr(int(c[i:i+3],8))
print flag

运行脚本得到flag

3.convert

写个脚本把二进制转换成字符存到一个新文件

import libnum

file = open('1.txt','r')

f = file.read()
c = f.replace('\r\n','')
m = libnum.b2s(c)
print m

getflag = open('flag','wb')
getflag.write(m)
file.close
getflag.close
print 'ok!!!'

在linux里面直接检查到文件格式为rar

解压图片查看exif找到base64字符,python解码base64即可得flag

4.就五层你能解开吗

感觉这个题目多为密码题,就放这里吧…

给出了提示:第一层为CRC32碰撞

打开压缩包可以看见CRC32校验码分别为:0x7c2df918、0xa58a1926、0x4dad5967分别爆破

把有意义的连接起来得到解压密码:_CRC32_i5_n0t_s4f3

第二层为维吉尼亚密码,给出了key和Hint。但是KEY有点多

看网上有人说猜测开头字母可能是什么然后猜是the,对应开头秘钥为YEWCQGEWCYBNHDHPXOYUBJJPQIRAPSOUIYEOMTSV解密找到秘密

第三层SHA1碰撞

上python脚本

#encoding:utf-8
import string
import hashlib

keys = string.ascii_letters + string.digits + string.punctuation

def sha1(s):
•    sha1_hash = hashlib.sha1()
•    sha1_hash.update(s)
•    return sha1_hash.hexdigest()

for i in keys:
• for j in keys:
• for p in keys:
• for q in keys:
• password = i + '7' + j + '5-' + p + '4' + q + '3?'
• sha = sha1(password.encode('utf-8'))
• if sha[0:7] == '619c20c' and sha[8] == 'a' and sha[16] == '9':
• print(password)

得到解压密码

第四层md5相同文件不同

百度就能找到HelloWorld-colliding.exeGoodbyeWorld-colliding.exe两个文件不同但是md5值相同。得到解压密码:Goodbye World :-(

第五层RSA解密

得到两个文件.enc.pem

解法一:直接用RSA-Tool快速解题

解法二:

用Openssl提取N和E,发现都很大。应该是维纳攻击(低解密指数攻击)

然后用Wienerattack攻击的脚本跑一下得到d=8264667972294275017293339772371783322168822149471976834221082393409363691895

然后用python的rsatool生成私钥。这里有个问题,脚本比较老用的gmpy。而我不知道为何始终没有解决安装老的gmpy库,最后是把脚本里面的gmpy全部改成gmpy2就好了。

用Openssl和私钥解密得到flag

openssl rsautl -decrypt -in flag.enc -inkey key.pem -out flag.txt

三、取证隐写

(一)、图片隐写

1.这是一张单纯的图片

用NotePad++打开发现最后附加了一段Unicode编码。解码得flag

2.隐写

PNG图片,NotePad++打开后发现有一段IHDR字样。

猜测是利用Window忽略CRC检验码然后修改高度和宽度后仍然可以显示来隐藏信息。

然后我们放到Kali linux下面,果然无法显示(Linux会检验CRC检验码)

然后用01Editor打开修改IHDR后面的后八位(前四位为长,后四位为宽)把后四位的A4改为F4,即改为正方形,保存显示flag。

3.啊嗒

省赛题目,前面写过wp就不写了。答题思路就是binwalk分析分离压缩包,通过exif信息找到压缩包密码解压即可。

4.又一张图片,还单纯吗

binwalk分析有很多夹杂的信息,用Foremost提取一下,直接提取出flag图像。

5.隐写2

首先用NotePad++打开文件,最后发现flag.rar

binwalk分析,foremost分离。

打开压缩包发现又一个flag.rar和一个提示jpg

根据提示是3位数密码,然后公共爆破工具爆破得到密码。

解压得到一张图片,然后用Notepad++打开,最后找到flag

6.闪的好快

gif图片,很多张二维码不停跳,用StegSolve的Frame Brower打开一个个扫拼接得到flag。

最后扫描完拼接得:SYC{F1aSh_so_f4sT}

7.隐写3

下载压缩得到PNG图片,用010Editor打开发现IHDR。观察图片感觉明显窄很多。修改高度得到flag。(原理同2.隐写)

8.细心的大象

图片的文件exif有信息,但是不是flag。然后在kali linux下binwalk分析发现有RAR压缩包,foremost分离

发现一个加密的压缩包,这个时候就用到exif里面的备注了。当时直接当密码不行。需要base64解密才可以。解密后得到一张图片

貌似很熟悉的样子。上面题目刚做了。然而这次修改高度貌似显示不了,用StegSolve查看得到flag

9.爆照

Notepad++打开发现文件尾部有一段.gif的信息

binwalk分析,foremost分离得到压缩包

解压后得到一堆88888的未名文件

放到kali里面分析,直接显示为图片,而且很容易发现88有二维码扫面得bilibili

挨个binwalk分析发现88、888、8888存在修改痕迹,且8888里面夹杂zip。

分离zip发下二维码得到panama

看下888的exif

得到base64,解密得silisili

最后按照顺序连接得到flag

10.猫片

png图片。下载后常规分析:搜索、查看exif、二进制分析、CRC校验都无果。

提示:LSB、BRG(有错误,估计打错了,应该是BGR)、NTFS

用StegSolve打开LSB最低位通道查看,发现BGR里面数据是PNG图片的数据

Save Bin后用010Editor打开,发现不行。用WinHex就可以。把开头四字节删了保存,发现了一半二维码。

放到linux里面看一下是否存在CRC校验失败(判断是否修改了高度)。

果然,修该高度后找到全的二维码

但是貌似有一点莫名的异样。原来是黑白正好相反。通过StegSolve就可以查看xor后的图像了,扫面后是一个网盘,下载flag.rar

没有flag。但是我们还有一条信息没用到:NTFS。猜测应该是NTFS隐写

用NSE打开扫描发现确实

是个pyc文件,关于pyc文件我之前写过。就是编译后的py文件,在线反编译一下得到源代码

import base64

def encode():
   flag = '*************'
   ciphertext = []
   for i in range(len(flag)):
       s = chr(i ^ ord(flag[i]))
       if i % 2 == 0:
           s = ord(s) + 10
       else:
           s = ord(s) - 10
       ciphertext.append(str(s))
   

```
return ciphertext[::-1]
```

ciphertext = ['96','65','93','123','91','97','22','93','70','102','94','132','46','112','64','97','88','80','82','137','90','109','99','112']

写一个解密脚本解密得到flag

# -*- codeing: UTF-8 -*-

import base64

def decode():
ciphertext = ['96','65','93','123','91','97','22','93','70','102','94','132','46','112','64','97','88','80','82','137','90','109','99','112']
flag = ''
ciphertext.reverse() #因为加密用到了append()函数
for i in range(len(ciphertext)):
if i % 2 == 0:
s = int(ciphertext[i]) - 10
else:
s = int(ciphertext[i]) + 10
s = chr(i ^ s)
flag += s
return flag

def main():
flag = decode()
print flag

if __name__ == '__main__':
main()

11.多彩

下载后图片名字是:lipstick。翻译是口红的意思…

结合图片颜色应该是不同的口红色号吧

用StegSolve打开后找到这么一段信息

这些口红颜色和YSL什么关系?搜一下发现是一个口红的品牌。继续搜索信息发现LSB最低位里面有PK字段,应该是压缩包数据。

果断保存二进制为.zip格式。但是打不开,因为后面有一堆没有的数据。用binwalk分离一下就好了。

分离出来发现是个加密的压缩包。那么秘密是什么?和YSL口红色号有什么关系?

有点脑洞了。搜索后发现是N1CTF国际赛的一道题目。。。秘密啊竟然是YSL对应口红色号的二进制转字符串。。。

用PS取色:

'BC0B28','D04179','D47A6F','C2696F','EB8262', 'CF1A77','C0083E','BC0B28','BC0B28','D13274', '6A1319','BC0B28','BC0B28','D4121D','D75B59', 'DD8885','CE0A4A','D4121D','7E453A','D75B59', 'DD8885'

进入YSL的网站:https://www.yslbeautyus.com/on/demandware.store/Sites-ysl-us-Site/en_US/Product-Variation?pid=194YSL

可以看见:color=1

抄个脚本吧..(眼力好也可以手撕)(发现抄的脚本看不懂也运行不了,手撕)

最后得到色号:1,27 ,59 ,11 ,23 ,7 ,57,1 ,1 ,76 ,222 ,1,1,50 ,214 ,6 ,77 ,50,53,214 ,6

写脚本转换成二进制再转换成和字符

import libnum

color = [1,27 ,59 ,11 ,23 ,7 ,57,1 ,1 ,76 ,222 ,1,1,50 ,214 ,6 ,77 ,50,53,214 ,6]
flag = ''
for i in color:
flag +=str(bin(i)[2:])
print libnum.b2s(flag)

解压得到flag

12.乌云邀请码

Stegsolve,LSB,BGR分析直接得到flag

13.图穷匕见

用010Editor打开,根据题目意思应该是在这张图的后面还有数据。

FF D9是jpg文件头,提取后面的数据。然后用Notepad++的Converter功能吧16进制转为字符。发现是一堆点。加上提示:问会画图吗?猜测应该是合成二维码。

用python的Image库生成反向图片

14.color

省赛题目,当时也是没做出来。前面wp也写了。思路就是用SteSolve打开发现隐藏Hint:makemetall。修改高度得到黑白块,联想二进制和ascii码的可打印字符正好是7位(坑点:七张图片要竖着组合01)。

15.2B

binwalk分析发现存在zip文件,foremost分离出来

压缩包加密了,用01Editor打开搜索50 4B 01 02,发现是伪加密。

修改后解压得到另一张看似一模一样的png图片名字叫B2。猜测双图还是盲水印?答案是盲水印。脚本有两个,一个可以另一个不可以。不知道为啥。。

16.妹子的陌陌

binwalk分析发现存在压缩包,foremost分离出压缩包

压缩包有密码,经过尝试给的信息,竟然是:喜欢我吗.有点脑洞….

然后摩斯电码解密得到一个网址

进去加上后面的提示,应该是吧有=的看似想base64的用AES解密,而且给出了秘钥。

然后进去网站发现二维码,取反色扫描得到flag。

(二)、流量分析

1.talnet

直接搜索分组字节流,找到flag。也可以过滤talnet协议定位,追踪流找到flag

(三)、压缩包分析

1.眼见非实

Notepad++打开后发现是PK文件头,最后有一段.docx。

修改后缀为zip,解压得到.docx文档,但是打不开。

再用Notepad++打开发现PK头,修改后缀为zip。解压得到文件夹,搜索找到xml文件里面有flag

2.神秘文件

省赛题目。加密压缩包和压缩包外有相同文件,用ARCHPR明文攻击即可。注意一点要用WinRar。然后解压得到.doc。查看文本发现PK开头,改后缀为zip。找到flag.txt然后base64解码。详解看上面WP

3.好多压缩包

这么多小压缩包肯定先想到CRC32碰撞攻击。

原理:

CRC32:CRC本身是“[冗余校验码](http://baike.baidu.com/item/CRC32)”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。
CRC32校验码出现在很多文件中比如 png 文件,同样 zip 中也有 CRC32 校验码。值得注意的是 zip 中的 CRC32 是未加密文件的校验值。这也就导致了基于 CRC32 的攻击手法
在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容
限于CPU能力,CRC碰撞只能用于压缩文件较小的情况

破解脚本:

# coding:utf-8
import zipfile
import string
import binascii
import base64


def CrackCrc(crc):
   for i in dic:
       for j in dic:
           for p in dic:
               for q in dic:
                   s = i + j + p + q
                   if crc == (binascii.crc32(s) & 0xffffffff):
                       # print s
                       f.write(s)
                       return


def CrackZip():
   for I in range(68):
       file = 'out' + str(I) + '.zip'
       f = zipfile.ZipFile(file, 'r')
       GetCrc = f.getinfo('data.txt')
       crc = GetCrc.CRC
       CrackCrc(crc)


dic = string.ascii_letters + string.digits + '+/='

f = open('out.txt', 'w')
CrackZip()
f.close()

爆破完成得到base64

用python脚本解密写进jm.txt里面

#coding:utf-8
import base64

file = open('out.txt','r')
c = file.read()
m = base64.b64decode(c)
file = open('jm.txt','w')
file.write(m)
print ok

用01Editor打开发现Hint:修理文件得flag。而我们在十六进制中发现C4 3D 7B 00 40 07 00查阅得知这是rar文件结尾。

新建一个文件,打上rar文件开头十六进制,然后复制前面的数据后保存得到压缩包

注释里面得到flag

4.一个普通的压缩包

用Winrar打开发现说文件secret.png头被破坏

使用Winrar自动修复功能,对比两个压缩包明显发现大小不一样。但是修复的完全可以解压未修复的假flag.txt猜测第一个压缩包里面藏着secret.png但是文件头被损坏。用binwalk也分析不出来

发现这个地方。A8 3C后面是被压缩文件文件头类型。把7A改成74再解压就得到了secret.png

用StegSolve打开,在一个通道发现一半二维码。而且存在两帧

应该把第二帧提取出来在一个通道可以找到另一半。保存第二帧找到另一半拼接而且还得补全左上角,扫描得到flag

(四)、内存取证

1.Linux

提示Linux,下载文件是一个不知名的文件。根据提示放到linux下file命令看看

是一个映像文件,我们尝试挂载

找到目录即可找到flag文件

2.linux2

法一:

Notepad++直接搜索key得到flag。但是我觉得这个题肯定不是这么做,这是个非预期做法。

法二:

不知名的文件,接近20MB。放linux下file和binwalk分析

和上个题目类似,也是内存镜像。我们尝试挂载,发现一堆文件。观察上图发现一个jpg文件。我们尝试foremost分离得到jpg。然而并不是flag。

最后貌似懂了出题人想考什么:应该是考linux的strings命令

(五)、音频隐写

1.旋转跳跃

MP3文件,听一下(真好听)。关于MP3的除了曲线就是MP3隐写了。用工具MP3Stego分析得到flag

2.听首音乐

用Audacity打开后发现

放大

这就很容易猜想了。三种状态:点、短横、空格正好对应摩斯电码的三种符号:.-/

手撕电码解密得flag

3.PEN_AND_APPLE

NTFS流隐写,一种以前木马的隐藏方式

隐藏方法:type flag.png>pen_and_apple.mp4

查看方法:dir /r

四、Other

1.宽带信息泄露

给出一个.bin二进制文件,但是不知道什么生成的。根据题目提示用RouterPassView打开,搜索username找到flag。

2.come_game

提示通关就有flag。下载后发现是一个exe的小游戏,既然放在MISC应该不会用到Re。随便玩一玩发现很难通关,不可能通关玩。

退出后生成了一个save1文件,猜测应该是存盘。这样的话我们把存的关数修改不就可以通关了吗?用010Eeditor打开修改数字2,一个个修改。最后到5的时候打开游戏就是通关了。

3.做个游戏

提示坚持六十秒,同上个题目差不多。不可能达到他的要求。jar文件我们尝反编译查看源码找到flag。

符强大的java在线反编译网址:http://www.javadecompilers.com/

4.想蹭网先解开密码

给了个.cap流量包,用wireshark打开。提示WIFI密码,WIFI连接认证的重点在WPA的四次握手包,也就是eapol协议的包,过滤一下

正好四个包。接下来根据提示写个字典。

通过kali里面的aircrack-ng破解就可以得到key了,key就是flag了。

6.账号被盗了

不抓包直接getflag提示you are not admin! 抓包把flase改成true。得到连接,访问下载exe文件。

打开后是一个刷枪的工具

尝试提交,抓流量包发现明显有base64编码。

解码是163邮箱。获取账号密码登录后得到flag。

7.好多数值

一看就是很多RGB值让我们绘制图片,先分析绘制图像的长宽。用python分析一下数据的长度。

开方开不尽,所以不是正方形。分解质数得到503*61*2。python脚本跑测试一下是122*503。得到flag

脚本:

from PIL import Image
import re

x = 503 #x坐标 通过对txt里的行数进行整数分解
y = 122 #y坐标 x*y = 行数

im = Image.new("RGB",(x,y))#创建图片
file = open('1 (1).txt') #打开rbg值文件

#通过一个个rgb点生成图片
for i in range(0,x):
•   for j in range(0,y):
•       line = file.readline().replace('(','').replace(')','')#获取一行
•       rgb = line.split(",")#分离rgb
•       im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2])))#rgb转化为像素
im.show()

8.很普通的数独

并不知道什么是数独。但是这25张图片加上里面的白黑相间很容易想到是个5*5的二维码。

关键是如何把他们拼接成二维码?….

看了大佬的wp是用Python的PIL库来处理。把数字涂黑然后拼接生成二维码。大致思路是计算一张图中的 81 个格子的位置,然后看每一个格子中心的一堆像素(比如设置了 6 x 6)中是否有黑色像素。如果没有说明是白格子,跳过;如果有说明是有数字的格子,涂黑。

贴个大佬脚本:

from PIL import Image

def work(s):
im = Image.open("{}.png".format(s))
width = im.size[0]
height = im.size[1]
newim = Image.new("RGB", (width, height), (255,255,255))
print(im.size)
print(newim.size)
sx = sy = 2
for i in range(width):
for j in range(height - sy):
try:
p = im.getpixel((i, j))
newim.putpixel((i,j), p)
except:
pass#print(i, j)
xx = yy = 14
blockx = 23
blocky = 22
r = 3
rr = 12
for i in range(9):
stx = int(xx + i * blockx)
for j in range(9):
sty = int(yy + j * blocky)
flag = False
for x in range(stx - r, stx + r):
for y in range(sty - r, sty + r):
p = newim.getpixel((x, y))
if p == (0,0,0):
flag = True
break
if flag:
break
if flag:
for x in range(stx - rr, stx + rr):
for y in range(sty - rr, sty + rr):
try:
newim.putpixel((x,y), (0,0,0))
except:
pass
newim.save("{}-1.png".format(s))

for i in range(1, 26):
work(i)

拼接后扫码得到多重base64

Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9

多解码几次得到flag

9.QAQ

用01Eidtor打开发现有encode、.txt、base64、key、encrypt等字样猜测可能是pyc文件(py文件编译后)放到kali里面用命令查看一下确实是个pyc文件

在线反编译一下得到源码。

#/usr/bin/env python
# encoding: utf-8

def encryt(key, plain):
   cipher = ''
   for i in range(len(plain)):
       cipher += chr(ord(key[i % len(key)]) ^ ord(plain[i]))

   return cipher


def getPlainText():
   plain = ''
   with open('plain.txt') as f:
       while True:
           line = f.readline()
           if line:
               plain += line
           else:
               break

   return plain


def main():
   key = 'LordCasser'
   plain = getPlainText()
   cipher = encryt(key, plain)
   with open('cipher.txt', 'w') as f:
       f.write(cipher.encode('base_64'))


if __name__ == '__main__':
   main()

然后还给了一个文件。三段数据,应该是用到脚本里面。

然后审计代码尝试写解密python脚本

过几天抽时间写吧,先放一下

解密后…

10.apple

未完代更新

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部