安恒月赛writeup 2019年2月

新年劝退赛,菜的真实,web一题不会,暴风流泪

MISC

玩游戏

下载附件后,得到一个exe和题目说明,运行exe后,发现题目分为三个关卡

第一关

看见是解盲文,有在线解盲文的网站,解密后为下面图中所示

看见这一串,数了位数后怀疑是一个字符串的md5值,百度之后发现是 hello 的MD5值,第一关通过

第二关

要提交两个MD5值相同的文件,使用工具fastcoll (下载链接: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip)生成两个md5值相同的exe,第二关通过

第三关

通过前面两关后,会收到邮件内容,通过题目描述中的提示,百度栅格密码https://book.2cto.com/201407/45251.html(详细解释)

然后知道了可以通过http://www.spammimic.com/decode.cgi解密栅格密码,将邮件内容解密后得到flag

crypt

密码本

题目描述:这个密码本本该只使用一次的,但是却使用了多次,导致密文易被破解

经过一番尝试发现,秘钥的首字母很可能是y,剩下的就靠你了

题目中给出了三组加密后的数据

cip1: rlojsfklecby

cip2: ulakqfgfsjlu

cip3: dpaxwxtjgtay

根据题目描述,这个本该使用一次一密加密,但是有密钥重复使用了,所以猜测这三组密文的密钥可能是同一个

题目描述给出了密钥的第一位为 y

使用y对三组密文进行维吉尼亚解密,发现第三组的明文开头第一个字母为 f

构造能够接触flag的密钥,发现前四位是year,经过一波灵性猜测,发现密钥为yearofthepig,就是猪年的意思(不知道正常思路是什么样的)

然后使用这个密钥,解密了三组密文,第一组看不出来是什么,可能不是同一个密钥,但是第二组解密出了明文

解密第三组密文得到flag

一开始以为密钥是flag所以一直提交不对,后面发现,第三组的明文是flag   flagisaccess的MD5值

 

hahaha

下载附件以后解压,发现压缩包加密了

看到压缩包里面有四个txt 和一个flag.pdf,发现txt的大小都是6,猜测是CRC爆破,CRC32位爆破是在压缩包进行了加密后,压缩密码比较长爆破需要很长时间,相当于爆不出来,但是加密的内容大小很小,我们就可以直接爆破压缩加密的内容

这个题的思路就是,四个TXT里面的内容合并就是压缩包的解压密码,解压后即可查看flag.pdf

使用CRC32爆破脚本(见附件)

使用命令 python crc32.py reverse CRC32值

这样爆破四个TXT的CRC之后,经过了一顿绝望灵性的排列组合,最终

得到压缩包密码为  tanny_is_very_beautifu1_

解压打开pdf

可以看出要考sha1碰撞,而且图中提示给出了明文的范围【'1','2','e','s','c','h','n','E','S','C','H','N','!','@'】

写个脚本跑一下

#coding:utf-8
import hashlib
import string

b = ['1','2','e','s','c','h','n','E','S','C','H','N','!','@']

for c in b:
    for d in b:
        for e in b:
            for f in b:
                for g in b:
                    for h in b:
                        for a in b:
                            k = 'flag{' + str(c) + str(d) + str(e) + str(f) + str(g) + str(h) + str(a) + '}'
                            #print k
                            l = hashlib.sha1(str(k)).hexdigest()
                            if 'e6079c5ce56e781a50f4bf853cdb5302e0d8f054' == l:
                                print k + '  ' + l + '  ' + hashlib.md5(str(c) + str(d) + str(e) + str(f) + str(g) + str(h) + str(a)).hexdigest()
                                exit()
print 'none'

跑出flag

队友做的pwn

filesystem

清单型程序,函数有点多,这里只挑有用的说。

Create

Edit

Read

 

Checksec

都如字面意思,最后一个一会儿说。

首先看到这个程序,看到system函数,想着是不是能用doublefree或者uaf等控制堆块来控制system执行,但是并没有看到free函数,所以一直在纠结。

但是看到最后有一个隐藏选项B4ckd0or,

好像发现了新大陆,但是本地调试,发现:

前两位会当成system参数,但是后面会略掉。所以想输入sh。

但是上面的if又限制了字符串不能为sh,所以卡在这里。

一直没搞懂checksec的作用,又回去看了一下:

System函数执行的就是snprint函数的参数,关于这个函数具体的请百度。

这样只要我们令s中也包括/bin/sh即可,但是要闭合前面的参数。

就是:“;/bin/sh #\

具体如下:

总结一下,创建一个文件,文件路径输入“;/bin/sh #\

然后调用checksec来调用system得到shell。

因为在这里我们需要控制的刚好可控,自然用不到一些什么doublefree和uaf。

 

hackmoon

是一个清单型程序,看一下功能。

首先是add:

可以看到,最多创建五个moon,每个大小为8。

并且有两个字段(moonlist[i]和moonlist[i+1]),且将第一个字段赋值为print_moon函数。

而且,第二个字段是存放content的地方,且size自定义。

再看del

Free后并没有置空指针,所以考虑用UAF(Use After Free)

Print就是对应打印。

Magic函数。

思路如下:

申请moon0,申请moon1,然后free掉前两个,再申请moon2,令moon2的content部分为moon0,这样moon0就可控了。

那么这样也要求我们,moon0和moon1的content大小不能和moon0和moon1放在一个bin中,因为我们要控制的是moon的第一个字段,若放在一个bin中我们再申请moon2时会将content申请作为内存空间,很明显那不是我们希望的。

这也是我们为什么要先申请两个moon,free掉后在bin中是(moon0->moon1)这样的,所以我们申请moon2首先会将moon1的内存空间分配掉,再给moon2的content分配与moon0大小匹配的内存空间,这样实现了moon0可写

 

详细来说,先分配0和1的content大小为32,这样free掉后就不会与0和1(大小为8)

分配到一个bin中(即避免了分配到content)。再申请一个2(实则分配到note1),令content大小为8,预期就会分配到note0。

这样就可以将moon0第一个字段的print_moon覆盖为magic函数。

exp如下:

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MD5是目前最热门的加密算法,我们通常用MD5值来验证文件的完整性。例如在一些比较正规的下载网站,通常会提供软件的MD5值,这样我们就可以对下载回来的文件用MD5校检软件(如HashX等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。但当两个不同文件的MD5值完全一样时,你还会信任MD5吗? 找出破解MD5加密方法的专家是我国山东大学的王小云教授,这则新闻在以前的软件版块曾详细报道过。但之后MD5的破解一直没有进展,直到最近,国外的科学家研究出了新的MD5碰撞破解方法,可以让两个不同文件的MD5值完全一样,而之前我们一直认为一个文件的MD5值在世界上是独一无二的,这就像一个人克隆了你的指纹然后冒充你一样恐怖! 为了验证MD5值的独一无二性,我们来做一个简单的试验: 在桌面上新建一个文本文档,文件名为“test.txt”,内容为“OfficeBa”。然后将这个文本文档拖动到校验工具HashX中,点击左上角的“Hash File”按钮,得到其MD5值为051cb2917a5b70505e1687dee449c765,然后为文档中的“OfficeBa”加上双引号,保存后再通过HashX进行校检,发现MD5值变成了9ab117400993b70bc9945a9b15749d5d了。可见,一个极细微的变动都会导致文件的MD5值不同! 那么我们能让两个程序文件的MD5一致,却又都能正常运行,并且可以做完全不同的事情么?答案是:“可以!”。要让两个不同文件的MD5值相同,可以通过一款名为fastcoll的小工具来完成我们同样以刚才的test.txt来做试验: -h [--help] 显示选项 -q [--quiet] 简化 -i [-ihv] arg 使用指定的初始值,默认是md5初始值 -p [-prefixfile] arg 使用给定的前缀计算初始值,仍然把数据复制到输出文件中(必须是个文件名) -o [--out] arg 指定输出文件名,此选项必须是最后一个参数,而且两个文件名必须同时指定 默认的是 -o msg1.bin msg2.bin 把解压出来的fastcoll_v1.0.0.5.exe与test.txt放在同一目录,然后在“命令提示符”中输入:“fastcoll_v1.0.0.5.exe -i test.txt -p test.txt -o cbi.exe cbi2.exe”并回车,在同目录中会生成名为cbi.exe和cbi2.exe文件,我们用HashX校验他们的MD5值,可以发现是完全一样的,但是在HashX中用“SHA-1”加密算法进行校验的时候,结果竟然是不同的(SHA-1加密算法生成的结果也是独一无二的)!可见这已经是完全不同的两个文件,但是他们的MD5值竟然完全相同。 如果黑客从网上下载一个工具,给其捆绑上木马,然后通过工具让其MD5值和原文件一样。那么当用户下载了文件后用MD5校验工具进行校验时就会发现带毒文件和原文件MD5值完全一样,就会放心地去运行,结果可想而知。所以,MD5加密已经不再可信!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值