MISC1
下载附件查看流量包,发现没啥信息,于是导出对象->http对象->index-demo.html,打开查看源码发现一堆base64:
那么尝试base64隐写,脚本如下:
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag_encode.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = ''.join(line.split())
rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=')
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)])
跑出结果:key:"lorrie"
加上html文件,那么尝试snow隐写,使用stegsnow工具:
stegsnow -p "lorrie" index-demo.html > flag.txt
得到这样一个文件:
然后把→_→
和←_←
分别替换成-
和.
,解摩斯电码,转小写,得到最后flag
MISC2
简单题目,直接两行命令解决,volatility使用hashdump命令得到hash以后,解md5,然后sha1得到flag
MISC3
首先这道题目用7z打开,发现有个文件是伪加密,提取伪加密的文件出来,发现跟剩下两个加密文件中的某一个CRC32一样,那么尝试明文攻击,但是会发现报错,观察可得,两个加密文件的加密算法不一样,猜测可能是这个原因无法进行明文攻击,复制一个副本,然后删除flag.txt:
然后再次进行明文攻击,发现可以执行,等待一会出现结果:
然后尝试用这个口令123%asd!O
去解flag.txt,发现正确,得到的密文经过栅栏移位。key=5,找了个在线的平台出了flag
MISC4
比赛时候解法:
首先使用几个命令:
volatility -f 隐藏的秘密.vmem imageinfo
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 filescan
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 filescan | grep 桌面
发现有个file.txt,然后继续执行:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 dumpfiles -Q 0x000000000412cde0 -D ./
得到这样一个hint:
那么继续查看注册表信息:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 hashdump
发现有很多用户,但是不知道哪个才是隐藏用户,那么想着尝试生成所有可能。
然后根据cmd5批量解密每个用户的md5,然后加上用户名:
,使满足md5(用户名:密码)
的格式,生成300+条数据
多次尝试以后发现此条数据,为最终的隐藏用户:
得到最后flag:
赛后分析预期解法:
首先使用几个命令:
volatility -f 隐藏的秘密.vmem imageinfo
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 filescan
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 filescan | grep 桌面
发现有个file.txt,然后继续执行:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 dumpfiles -Q 0x000000000412cde0 -D ./
得到这样一个hint:
那么继续查看注册表信息:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 hashdump
发现有很多用户,且根据hint可知:有一个用户在计算机管理中是没有的,但是可以远程登录该系统,说明这个用户是存在注册表中的,很可能为影子账户,需要一一分析对应的F值才能找到影子账户。
我们首先检索所有注册表蜂巢:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 hivelist
然后检索SAM注册表键值对:
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 hivedump -o 0xe1757860
试着获取SAM表中的用户(注册表中的账号密码):
volatility -f 隐藏的秘密.vmem --profile=Win2003SP1x86 printkey -K "SAM\Domains\Account\Users\Names"
然后查阅资料可以知道影子账户的 F 值复制的为管理员的 F 值,但是管理员的 F 值经过注销账户等操作时会变化,但是通过和普通用户的 F 值对比之后会发现普通用户的 F值第0x00000000行内容是"02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00",而影子账户与管理员或 guest 则是有内容的。编写脚本提取 F 值第 0x00000000 行内容:
提取脚本:
import os
keys = '''000003e9
000003ea
000003eb
000003ec
000003ed
000003ee
000003ef
000003f0
000003f1
000003f2
000003f3
000003f4
000003f5
000003f6
000003f7
000003f8
000003f9
000003fa
000003fb
000003fc
000003fd
000003fe
000003ff
00000400
00000401
00000402
00000403
00000404
00000405
00000406
00000407
00000408
00000409
0000040a
0000040b
0000040c
0000040d
0000040e
0000040f
00000410
00000411
00000412
00000413
00000414
00000415
00000416
00000417
00000418
00000419
0000041a
0000041b
0000041c
0000041d
0000041e
0000041f
00000420
00000421
00000422
00000423
00000424
00000425
00000426
00000427
00000428
00000429
0000042a
0000042b
0000042c
0000042d
0000042e
0000042f
00000430
00000431
00000432
00000433
00000434
00000435
00000436
00000437
00000438
00000439
0000043a
0000043b
0000043c
0000043d
0000043e
0000043f
00000440
00000441
00000442
00000443
00000444
00000445
00000446
00000447
00000448
00000449
0000044a
0000044b
0000044c
0000044d
0000044e
0000044f
00000450
00000451
00000452
00000453
00000454
00000455
00000456
00000457
00000458
00000459
0000045a
0000045b
0000045c
0000045d
0000045e
0000045f
00000460
00000461
00000462
00000463
00000464
00000465
00000466
00000467
00000468
00000469
0000046a
0000046b
0000046c
0000046d
0000046e
0000046f
00000470
00000471
00000472
00000473
00000474
00000475
00000476
00000477
00000478
00000479
0000047a
0000047b
0000047c
0000047d
0000047e
0000047f
00000480
00000481
00000482
00000483
00000484
00000485
00000486
00000487
00000488
00000489
0000048a
0000048b
0000048c
0000048d
0000048e
0000048f
00000490
00000491
00000492
00000493
00000494
00000495
00000496
00000497
00000498
00000499
0000049a
0000049b
0000049c
0000049d
0000049e
0000049f
000004a0
000004a1
000004a2
000004a3
000004a4
000004a5
000004a6
000004a7
000004a8
000004a9
000004aa
000004ab
000004ac
000004ad
000004ae
000004af
000004b0
000004b1
000004b2
000004b3
000004b4
000004b5
000004b6
000004b7
000004b8
000004b9
000004ba
000004bb
000004bc
000004bd
000004be
000004bf
000004c0
000004c1
000004c2
000004c3
000004c4
000004c5
000004c6
000004c7
000004c8
000004c9
000004ca
000004cb
000004cc
000004cd
000004ce
000004cf
000004d0
000004d1
000004d2
000004d3
000004d4
000004d5
000004d6
000004d7
000004d8
000004d9
000004da
000004db
000004dc
000004dd
000004de
000004df
000004e0
000004e1
000004e2
000004e3
000004e4
000004e5
000004e6
000004e7
000004e8
000004e9
000004ea
000004eb
000004ec
000004ed
000004ee
000004ef
000004f0
000004f1
000004f2
000004f3
000004f4
000004f5
000004f6
000004f7
000004f8
000004f9
000004fa
000004fb
000004fc
000004fd
000004fe
000004ff
00000500
00000501
00000502
00000503
00000504
00000505
00000506
00000507
00000508
00000509
0000050a
0000050b
0000050c
0000050d
0000050e
0000050f
00000510
00000511
00000512
00000513
00000514
00000515
00000516
00000517
00000518
00000519
0000051a
0000051b
0000051c
0000051d
0000051e
0000051f
00000520
00000521
00000522
00000523
00000524
00000525
00000526
00000527
00000528
00000529
0000052a
0000052b
0000052c
0000052d
0000052e
0000052f
00000530
00000531
00000532
00000533
00000534
00000535
00000536
00000537
00000538
00000539
0000053a
0000053b
0000053c
0000053d
0000053e
0000053f
00000540
00000541
00000542
00000543
00000544
00000545
00000546
00000547'''
keys = keys.split('\n')
for key in keys:
bash = "volatility -f misc4.vmem --profile=Win2003SP1x86 printkey -K 'SAM\Domains\Account\\Users\\%s'" %key
print(bash)
res = os.popen(bash).read()
hash = res[262:314].replace(" ","")
if hash != "02000100000000000000000000000000":
print(res)
慢慢等一会,等到这样一个结果:
发现一个影子账户FHREhpe$
,然后hashdump提取这个用户,然后按照给的格式提交即可:
volatility -f misc4.vmem --profile=Win2003SP1x86 hashdump | grep FHREhpe