[关闭]
@geek-sjl 2018-12-09T08:21:09.000000Z 字数 3371 阅读 683

华师CTF writeup

如果writeup不够详细,敬请回复邮件提问

小熊维尼的神秘属性

图片右键属性,备注里面就是flag(winhex或者010editor应该也是可以看见的)

Ta是谁

有三个文件,最后一个doc不知道什么鬼,看前两个
首先是who_am_i,用FileAnalysis看一下发现是jpg,丢去以图搜图,搜出一个明星的名字,试了下英文名当第一个压缩包的密码,不对。
后来一看,压缩包的文件名不对劲,base64解码试一波,是韩文。再丢进百度翻译,提示出来了,是拼音。拿到压缩包密码领取flag
所以后两个文件是干什么的..

消失的笑容

win打开一半,ubuntu打开提示CRC校验不通过。
010editor打开文件,找到crc值,然后枚举长宽找尺寸。
python代码如下:

  1. import os
  2. import binascii
  3. import struct
  4. misc = open("png.png","rb").read()
  5. test="12345678901234567890"
  6. print(test[12:16])
  7. for j in range(1024):
  8. for i in range(1024):
  9. data = misc[12:16] + struct.pack('>i',j)+struct.pack('>i',i)+misc[24:29]
  10. # print(data)
  11. crc32 = binascii.crc32(data) & 0xffffffff
  12. if crc32 == 0xB1D1452D:
  13. print i
  14. print j

小明的作业

看了hint之后才知道用eval
有几个坑点,一边调一边就会发现。
一个是int,python里面不需要声明函数类型,自然也就没有强制类型装换。
然后是exit(),这个会让程序退出,貌似有返回值是0?乱猜的,就当是0吧。
还有__import__('time').sleep,会让程序sleep然后超时,过滤掉。
然后是__import__('os').system('find ~'),替换成0就好了,瞎猜的。不然..一堆滚屏+超时
最后是pr,不知道什么鬼,一开始以为是print,替换后发现不对,print在python里没有返回值。那就替换掉吧,最后就过了

  1. from pwn import *
  2. conn=remote("10.10.202.172",10086)
  3. conn.recvline()
  4. tmp="(((1>>1)^(46*4))>=((1+4)<((3==0)>>42)))"
  5. a=eval(tmp)
  6. for i in range(1,51):
  7. a=conn.recvline()
  8. print(a)
  9. conn.sendline(str(eval(a)))
  10. print i
  11. pattern = re.compile("pr(\*)")
  12. for i in range(1,51):
  13. a = conn.recvline()
  14. a=a.replace("int","")
  15. a=a.replace("exit()","0")
  16. a=a.replace("__import__('time').sleep","")
  17. a=a.replace("__import__('os').system('find ~')","0")
  18. a=a.replace("pr","")
  19. res=str(int(eval(a)))
  20. print(a)
  21. conn.sendline(res)
  22. print i
  23. conn.interactive()

魔法师的生日

这题没做出来,只知道第一个压缩包可以爆破出一个密码,打开第二个压缩包看文件名提示说真的有加密吗想到伪加密。
然而并没有用,改了标志位后打不开。看了一下文件又比较大,crc和明文攻击应该不太可能吧..求教..

Happy Decrypt

过分了喂..还有混淆..apkkiller直接打不开,提取dex转jar打开了。然并卵,太复杂了解密算法。

post

先打开网页,看到响应头有个key,然而提交的button点不了,审查元素改一下。
点了之后发现还是没有,要post,那就上postman,把key拿来post过去,收工

easyMD5_Revenge

MD5碰撞,和热身赛不一样,这一次有限制类型,也不是找0e开头那种,然后搜索了一番,找到了这个。
param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
param2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
然后拿burp抓包改一下,一开始post到flag.php没反应,后来post到./才get flag了

小明的密码

上脚本吧,加盐md5,爆破就是了..
(其实不会做,但是找到了原题,CFF2016的,然后找writeup,再找到代码改一下。)

  1. import hashlib
  2. password = []
  3. f = open("input.txt")
  4. res = f.readlines()
  5. for tmp in res:
  6. res2 = tmp.split(" ")
  7. tmpans = res2[0] + "."+res2[1]
  8. res2[1]
  9. password.append(tmpans)
  10. n = 0
  11. print len(password)
  12. while (n <=999999):
  13. for j in range(0, 50):
  14. salt = password[j][33:-1]
  15. md5 = password[j][:32]
  16. goal=str(n).zfill(6)
  17. mingwen = goal + password[j][33:-1]
  18. miwen = hashlib.md5(mingwen).hexdigest()
  19. if (miwen == md5):
  20. print mingwen
  21. print password[j]
  22. n = 10000000000
  23. break
  24. print goal
  25. n += 1

EasyRe

拖进ida,是Welcome经过一系列亦或然后比对。
那就亦或回去咯。
ida貌似没有把input 的那个变量识别为一个字符串数组,可能会给分析造成一定误解。然后最后一个是不用变的。嗯,就酱。

  1. goal="Welcom"
  2. puzzle=[0x32,0x24,0x5E,0x1A,0x30,0x3F]
  3. str=""
  4. num=0
  5. for now in goal:
  6. tmp=chr(ord(now)^puzzle[num])
  7. num+=1
  8. str+=tmp
  9. print(str)

合金弹头

网上找了一个swf逆向工具,叫Flash Decompiler Trillix
用这个工具打开swf发现有一个资源文件里面是flag的文本。搞定。
此处输入图片的描述

小霸王其乐无穷

唉..没有童年的孩子啊..小时候真没玩过这个,下了模拟器,用了金手指。。可是掉进坑里就卡死了不行啊..
玩了几次到自闭。。最后一想,出题人怎么出题的,肯定要有工具能够修改啊。乱搜一番搜到了smbutil,再找到汉化版。
点击工具-修改文本
此处输入图片的描述
找一下就找到了

MagicCastle

瞎玩,玩不过。
CE搜,搜不到
先把主程序拖进ida,不知什么鬼,放弃
然后看到一个dll文件,大小有点异常,丢进ida说只是binary,丢进FileAnalysis也是no response,那就010editor看一下,发现新大陆,一堆数字,其实就是游戏属性。先搜1500,把生命改了。然后搜5,改攻击防御值,有挺多,不过有两个5连在一块的感觉就是。改就完事了。
然后就无敌了,生命值max,攻击防御max,神挡杀神否挡杀佛2333(手动滑稽)
要注意红钥匙的使用,多试几次,看清楚门里的东西是什么先,嗯,就酱。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注