2018 强网杯 安恒杯 部分write up

  • 蜘蛛侠啊 

  • 安恒杯misc

  • linux tshark identity 部分指令
  • 附件下载 https://pan.baidu.com/s/1uo0GFufTjMqR8rtBzp5PlQ 密码 2cq5

首先打开附件pcap包 茫茫多的icmp包 稍微看一下似乎每个包内容都不太一样

但是  $$START$$  似乎暗示了什么

看看最后一个ICMP包:

基本可以判定这是传递了一个文件  因此我们的思路就是把这个文件提取出来

linux 的 tshark 命令可以实现这个功能 具体的参数可以度娘学习下

将 hex 转为 ascii 码 发现内容有冗余 跑个脚本冷静一下

1 a=open('1.txt')
2 f=open('2.txt','w')
3 i=0
4 while i != 72156:
5     b=a.readline()
6     if i%4==0:
7         f.write(f'{b}')
8     i+=1
9 f.close()

跑完之后发现使用base64进行了加密 再来个脚本

1 import base64
2 lines = open('2.txt','rb').readlines()
3 flie = open('file','wb')
4 result = ""
5 for line in lines:
6     flie.write(base64.b64decode(line.strip()))

文件最终是以zip格式生成的 解压后得到蜘蛛侠的特写gif

gif帧播放的很诡异 使用linux的 identity 命令查看一下

绝大多数帧播放时间都是20 或者50毫秒 将20看做0 50看做1

转化为二进制 再解码之后:

将这个字符串md5后即可提交flag

 

  • md5

  • 强网杯web签到

  • 题目环境 http://39.107.33.96:10000/

题目虽说是签到题 难度却丝毫不签到 而且从这道题可以学到不少哈希函数的姿势

  • 第一部分

题目逻辑:

应对方案:php 0e开头的数字会当做科学计数法解析 因此只要传两组md5值开头为0e的即可

参考网站:https://www.cnblogs.com/Primzahl/p/6018158.html

 

  • 第二部分

题目逻辑:

php为了针对0e错误 专门定义了=== 系列操作符 意思是两参数类型和值都相同才返回真 !== 是指两个参数的类型和值都相同时才返回假

因此这一问的意思是要构建两个参数 使得他们类型或者值不相同 但哈希值相同

应对方案:使用burpsuite 传两个值不相同的数组即可(php的md5函数如果参数不是字符串则返回一个null 而null===null)

 

  • 第三部分

题目逻辑:

这下传数组大法使不了了 php这次将两个参数强行转成string

度娘了一个生成相同md5值的软件fastcoll

检验下生成的两个文件

将两个文件url编码后上传到服务器即可得到flag

1 #编码的python脚本
2 from urllib import parse
3 result = parse.quote(open('3.txt','rb').read())
4 print(result)

 

txt文件只哈希文件内容 不一样的内容哈希值基本不可能一样 fastcoll造出来的文件只能碰撞单一哈希函数(两文件其他的哈希值均不相同)
fastcoll产生的两个txt文件是加上文件头尾之后恰好哈希值相同,所以去除掉文件头尾(只哈希内容)哈希值就不会相同
 

posted @ 2018-03-27 20:49  imagin  阅读(1196)  评论(1编辑  收藏  举报