实验吧(密码学、杂项、隐写部分)Writeup

这里没有key

题目:http://www.shiyanbar.com/ctf/7

打开题目,js弹窗,这里没有key,查看源代码,在注释发现

<!-- #@~^TgAAAA=='[6*liLa6++p'aXvfiLaa6i[[avWi[[a*p[[6*!I'[6cp'aXvXILa6fp[:6+Wp[:XvWi[[6+XivRIAAA==^#~@ -->

JScript/VBscript脚本加密,#@~^特征。

解密网址:http://www.dheart.net/decode/index.php

flag:Encode@decode

压缩的问题

题目:http://www.shiyanbar.com/ctf/26

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Tips winrar, password crack, 65h -- 71h
以下是一段16进制字符串
526172211A0700CF907300000D0000000000000056947424965E
00600000004900000002E3B1696DEE413D3B1D33310020000000
C3EBC6C6B2E2CAD44279CCECD2D76C6F76652E74787400796AD2
34784B6DD58B0A427929591366006C6F7665002E7478742E2E5B
7A2D7B7D2E2E39423843569449C8691BEC768E16663C5F9ED737
AE6CDDC6178C0837F6BB88DAA8356B02A700C776FC0F1091C1D1
6712FC075A011D5B5DEF7E46966E8B878B80DABCDF9683C49165
FFB993A77CDE8600A1262200F3D3D5315DF0FC4E2B3ACAA3943F
142EC43D7B00400700
key是解压后的txt文件的sha1值(取前8位)

用winhex将16进制的字符串存储为rar格式,用winrar打开,发现有密码,猜测65h -- 71h部分是解压密码,将对应部分复制出来..[z-{}..9B8C,解压,得到txt,放入hash验证工具得到SHA1: 58A09AE43E5A9DF9AD5E89F90C1BB7430DC5BD02

flag:58a09ae4

so beautiful so white

题目:http://www.shiyanbar.com/ctf/1904

解压得到一个图片和加密压缩包,图片表面看是纯白的,放入stegsolve,换了几个通道发现了key{forensics_is_fun}

white1.png

猜测是解压密码。解压得到一个gif图片,但是发现打不开。

查看16进制,发现文件头缺少了一部分。

white2.png

将文件头补全GIF90a得到flag。

flag:CTF{AS3X}

小case

题目:http://www.shiyanbar.com/ctf/16

给出的字符串nick:1003:8EA9109FDA91D6BFC6EBE8776A153FEB:C6002D00F57F9F399B6263D714AF8C3A:::

可以看出是User Name:User ID:LM Hash:NT Hash:::这种形式,在http://www.objectif-securite.ch/en/ophcrack.php,解密LM Hash,即可得到密码,用nick用户登录就是flag

flag:#AttackIsNotEnough#

复杂的QR_code

题目:http://www.shiyanbar.com/ctf/1856

扫描二维码,提示secret is here。binwalk分析发现有一个zip文件,binwalk -e直接提取。

打开zip,里面有加密的4number.txt,估计是提示4位密码,用爆破工具爆破,密码是7639,解压得到flag。

flag:CTF{vjpw_wnoei}

刷新 刷新 快刷新

题目:http://www.shiyanbar.com/ctf/1938

下载图片123456.jpg,binwalk等分析,并没有发现隐藏文件,题目提示刷新,猜测是F5隐写。

F5隐写工具

java Extract 12346.jpg -p 123456

查看工具目录下生成的output.txt,就是flag。

flag:flag{F5_f5_F5_Ez!!!}

雌黄出其唇吻

题目:http://www.shiyanbar.com/ctf/1838

标准的套路题。。。。

打开题目,发现一个base64编码的字符串,多次刷新发现都不一样,是随机生成的。

访问robots.txt,看到一些禁止的目录和php页面,都无法访问,看到旁边的页面滚动条,发现最下端还有一行。。。

Sitemap: ./sitemap87591u096080.xml

访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>./index.php</loc>
<lastmod>2015-12-25</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>./flag1241098092ewiuqu9t53.php</loc>
<lastmod>2015-12-25</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>

访问/flag1241098092ewiuqu9t53.php,得到base64编码的字符串,解密就是flag。

flag:CTF{robots_could_leak_information}

Windows

题目:http://www.shiyanbar.com/ctf/1784

一道视频隐写题,提示不再闪烁的窗户,不再模糊的声音

视频的音频很诡异,感觉像是倒放的。用Vegas软件将音频部分反转,得到了一段英文数字51324984652187698521487459648201,(听了好久。。。)

视频不再闪烁,也就是将闪烁的东西放在一起,得到一张二维码。

windows1

扫描xorwith313

最后应该是音频的数字和313异或。

flag:51324984652187698521487459648496

base??

题目:http://www.shiyanbar.com/ctf/1782

下载文件得到一个rar压缩包,解压得到加密代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import base64
def change(ch):
if ord(ch)<92:
return chr(ord(ch)+32)
else:
return chr(ord(ch)-32)
if __name__ == '__main__':
flag='?????'
rawstr=base64.b64encode(flag)
finalstr=''
for i in range(0,len(rawstr)):
if ord(rawstr[i])>96 and ord(rawstr[i])<123:
finalstr+=change(rawstr[i])
else:
finalstr+=rawstr[i]
print rawstr
print finalstr

明文base64加密之后将小写字母全部变为大写,题目只给出了密文和明文的MD5值,只能用脚本暴力破解。(运用python的itertools进行生成)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*-coding: utf-8 -*-
import hashlib
import itertools
import base64
def check(str):
m1 = hashlib.md5(str).hexdigest()
if m1 == '16478a151bdd41335dcd69b270f6b985':
return True
else:
return False
list1=itertools.product(['Y','y'],['M','m'],['F','f'],['Z','z'],['Z','z'],['T','t'],['Y','y'],['0'],['D','d'],['3'],['R','r'],['M','m'],['D','d'],['3'],['R','r'],['M','m'],['M','m'],['T','t'],['I','i'],['Z','z'])
for i in list1:
str1=''.join(i)
if check(base64.b64decode(str1)):
print "The Flag is "+base64.b64decode(str1)
break
else:
print "not "+str1

flag:base64wtfwtf123

黑客叔叔(雨袭团)内部交流题(第一季1.0.1)

题目:http://www.shiyanbar.com/ctf/741

打开题目给出base64编码的dW1mcGJsamhhd3Jmcm14aHoxOXptZjltZWducm13NDV4M2RvbmhxfDAxfDAzfDA3fCt8KzF8KzN8Kzd8MisxfDIrMnwyKzZ8Mis3fDIrOXwzKzB8MyszfDMrN3wzKzh8Mys5fD98

解码得umfpbljhawrfrmxhz19zmf9megnrmw45x3donhq|01|03|07|+|+1|+3|+7|2+1|2+2|2+6|2+7|2+9|3+0|3+3|3+7|3+8|3+9|?|

估计是base64对应位数变成大写。

1
2
3
4
5
6
#-*- coding:utf-8 -*-
string=' umfpbljhawrfrmxhz19zmf9megnrmw45x3donhq'
for i in (1,3,7,10,11,13,17,21,22,26,27,29,30,33,37,38,39):
str=string[i].upper()
string=string[0:i]+str+string[i+1:]
print string

得到字符串UmFpblJhaWRfRmxhZ19zMF9meGNrMW45X3doNH,base64解码得到flag。

flag:RainRaid_Flag_s0_fxck1n9_wh4

疑惑的汉字

题目:http://www.shiyanbar.com/ctf/1876

当铺密码

这题是当铺密码的例子,密文王夫 井工 夫口 由中人 井中 夫夫 由中大,文字出头几画就代表数字几。

67 84 70 123 82 77 125转为asciiCTF{RM}

flag:CTF{RM}

Fair-Play

题目:http://www.shiyanbar.com/ctf/1852

Fairplay加密

1
2
The quick brown fox jumps over the lazy dog!
ihxo{smzdodcikmodcismzd}

The quick brown fox jumps over the lazy dog!就是生成密码表的密钥,ihxo{smzdodcikmodcismzd}是密文。

Fairplay在线解密

flag:ctfx{playfairisfairplay}

js

题目:http://www.shiyanbar.com/ctf/1779

打开题目是js的代码

1
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('<1 8="7/a">9(\'\\6\\3\\2\\5\\4\\b\\i\\h\\k\\j\\0\\g\\d\\c\\f\\0\\e\')</1>',21,21,'u0065|script|u006d|u0069|u0054|u0043|u0053|text|type|alert|javascript|u0046|u006f|u0063|u007d|u0064|u006e|u006a|u007b|u005f|u0073'.split('|'),0,{}))

最后的text,type,alert很可疑。

不是很懂js,直接丢控制台,把eval改成console.log(),用来在控制台输出,然后得到unicode编码。

<script type="text/javascript">alert('\u0053\u0069\u006d\u0043\u0054\u0046\u007b\u006a\u0073\u005f\u0065\u006e\u0063\u006f\u0064\u0065\u007d')</script>

把alert内的东西放到网站解码,得到flag。

flag:SimCTF{js_encode}

黑客叔叔(雨袭团)内部交流题(第一季1.0.2)

题目:http://www.shiyanbar.com/ctf/1744

1
2
3
4
5
6
U2FsdGVkX18vmjE0tvWk69T女B神u9inuiNnM3rBhsu6tXzLhu+
iofwuHNHq3YtDKs8ZlYLvSZuUY+
mxLRKO7+
m254R5YTCW8yzzgD+
mGwWfGRgqmPKdD你xA等等
hint:女神你等等?

很有脑洞qwq,并没看出啥来,偷偷看一眼writeup,等等换成==,其他汉字换成/

1
2
3
4
5
U2FsdGVkX18vmjE0tvWk69T/B/u9inuiNnM3rBhsu6tXzLhu+
iofwuHNHq3YtDKs8ZlYLvSZuUY+
mxLRKO7+
m254R5YTCW8yzzgD+
mGwWfGRgqmPKdD/xA==

看起来像是之前做的TripleDes,尝试解密。

U2FsdGVkX19RFyuUWyBHLNo8ldVPSkFpTB/lG07bZIL1rSAa/L0jFRGdvPh//8W4uZHe

这个就尝试了很多,最后试出来是Rabbit解密。

附上在线解密网址http://tool.oschina.net/encrypt

flag:RainRaid_Flag_Rabbit&TripleDes_Nice

simple algorithm

题目:http://www.shiyanbar.com/ctf/737

下载zip包,里面有一个python的加密脚本和一个加密后字符串的enc.txt。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/python
flag = '[censored]'
hflag = flag.encode('hex')
iflag = int(hflag[2:], 16)
def FAN(n, m):
i = 0
z = []
s = 0
while n > 0:
if n % 2 != 0:
z.append(2 - (n % 4))
else:
z.append(0)
n = (n - z[i])/2
i = i + 1
z = z[::-1]
l = len(z)
for i in range(0, l):
s += z[i] * m ** (l - 1 - i)
return s
i = 0
r = ''
while i < len(str(iflag)):
d = str(iflag)[i:i+2]
nf = FAN(int(d), 3)
r += str(nf)
i += 2
print r

加密流程为将明文转换为16进制编码,在转化为10进制数,将每两位数字构成的数进行FAN函数运算,再拼接起来得到密文。

所以解密流程是:将0~99利用FAN函数求得加密值,建立加密值到原数的字典,在明文中查字典拼接得到10进制数,转化为16进制数,再求取字符串。

解密脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#-*- coding: utf-8 -*-
def FAN(n, m):
i = 0
z = []
s = 0
while n > 0:
if n % 2 != 0:
z.append(2 - (n % 4))
else:
z.append(0)
n = (n - z[i])/2
i = i + 1
z = z[::-1]
l = len(z)
for i in range(0, l):
s += z[i] * m ** (l - 1 - i)
return s
s='2712733801194381163880124319146586498182192151917719248224681364019142438188097307292437016388011943193619457377217328473027324319178428'
#构造0~99对应的FAN()的值的字典
dct={}
for n in xrange(0,100):
#key为FAN()的结果,value为n(位数补足到2位)
dct[str((FAN(n,m=3)))]="%02d"%n
lst=[]
offset=0
while offset<len(s):
#先从4个字符匹配直至1个字符
for i in xrange(4,0,-1):
tmp=s[offset:offset+i]
if tmp in dct:
lst.append(dct[tmp])
offset+=i
break
flag="".join(lst)
#python中s[i:i+2]不一定取到2个字符,
#如s="pcat",s[3:4]和s[3:5],甚至s[3:100]都是"t"
#此题中最后得到"09",但也可能是"9",故做下面的判断
if len(hex(long(flag))[2:-1])%2!=0:
flag=flag[:-2]+flag[-1]
flag=hex(long(flag))[2:-1].decode('hex')
print flag

flag:SIS{a9ab115c488a311896dac4e8bc20a6d7}

传统知识+古典密码

题目:http://www.shiyanbar.com/ctf/1991

1
2
3
小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。

看起来挺新颖的,传统知识+古典密码。既然说了是年份,那就是天干地支纪年法对应的年份,还要+甲子,也就是加60,所以密文变成88 90 93 68 77 70 76 90,转成ascii码也就是XZSDMFLZ

传统知识用完了,就是古典密码了。古典密码很多,这里用的是栅栏密码和凯撒移位密码。

栅栏密码(两栏)得到XMZFSLDZ
凯撒移位得到:SHUANGYU

flag:CTF{SHUANGYU}

数码管

题目:http://www.shiyanbar.com/ctf/55

题目是一张图片
http://ctf5.shiyanbar.com/DUTCTF/1.png

显然flag就是DUTCTF{xxx},关键是根据图片解出XXX。

数码管的十六进制表示方式,分别将每个数码管中的字形转化为相应的十六进制,这里还要分共阳极、共阴极。得到flag。

数码管布局

1

常见字形与其十六进制编码

2

题目中字形的编码

3

尝试后发现,题目中红色的为共阳极数码管,蓝色的为共阴极数码管。

flag:DUTCTF{8979C738C0}

deeeeeeaaaaaadbeeeeeeeeeef-200

题目:http://www.shiyanbar.com/ctf/1983

binwalk分析,并没有什么特别的。

用ue编辑器查看16进制,也没发现什么有用的信息。

看了大佬的writeup,16进制下可以看到照片的iphone5照的,iphone5照的最高分辨率是3264x2448,而图片是3264x1681,所以想要解题需要修改分辨率。

分辨率位置:
1

06 91修改为09 91即可得到flag。
2

flag:Key{TheISISPasswordIs}