题目地址

中间人相遇攻击

题目给了一份这样的RC2加密的代码

# -*- coding: utf-8 -*-
from Crypto import Random
from Crypto.Cipher import ARC2def encrypt_data(data,key):iv = 'k\xbb\xf4B\x18\xe9U\xd0'cipher = ARC2.new(key, ARC2.MODE_CFB, iv)msg = cipher.encrypt(data)return msgdef decrypt_data(data,key):iv = 'k\xbb\xf4B\x18\xe9U\xd0'cipher = ARC2.new(key, ARC2.MODE_CFB, iv)msg = cipher.decrypt(data)return msgdef encrypt(data,key1,key2):encrypted = encrypt_data(data,key1)encrypted = encrypt_data(encrypted,key2)return encrypteddef decrypt(data,key1,key2):decrypted = decrypt_data(data,key2)decrypted = decrypt_data(decrypted,key1)return decryptedif __name__ == '__main__':plain_text = 'flag{********************}'cipher_text1 = "|\xd6-\x14?\xb9\xa1\x86\x81\xa4\xdc\x950\x941'V'\xaf"

没几行,一眼可以看到重要信息:decrypt_data和encrypt_data中的iv是一样的,要得到flag,我们需要知道的东西是key1和key2

根据hint,我们需要知道中间人攻击是个啥,然后采取破解手段

因为我们已知明文的一部分是flag{,先用key1加密,得到一个中间字符串

最后的密文知道,用key2解密,得到一个中间字符串

如果某两个key的情况下,这两个中间字符串相等,那么这两个key就是我们所要的

这里有个暴力的技巧:在构造字符串表格的时候,使用内容少的来存储(减小大量空间,方便查询)

根据百度百科,密钥的长度在目前的实现是8字节,每个字节是256种可能,所以可能情况是256的8次方,key1的枚举量应该是2的64次方(不清楚writeup为啥直接写的2**24)

python的字典可能存不了这么大的,所以估计只能一个一个跑,先猜测是20,20没有结果再21,再22吧……

还有为啥是prime也没搞懂……(因为是RSA的开发者开发的,喜欢素数?)

思路:

先把flag{字符串加密,存入字典中,字符对是加密后的结果与key1的值

然后,暴力key2,对密文进行解密,如果前几个字节在字典中出现(说明撞库了),而且key2是素数(不明白为啥)

那么,key1和key2就是我们需要的,再按照题意传参进去解密得到flag

# -*- coding: utf-8 -*-
import RC2plain_text = 'flag{'
cipher_text1 = "|\xd6-\x14?\xb9\xa1\x86\x81\xa4\xdc\x950\x941'V'\xaf"
def isprime(n):if n <= 1:return Falseif n == 2: return Trueif n % 2 == 0:return Falsefor i in range(3,int(n**0.5)+1,2):if n % i == 0: return Falsereturn Truedata = dict()
for key1 in xrange(0,2**24):data[RC2.encrypt_data(plain_text,str(key1))] = key1
for i in xrange(0,2**24):try:a = RC2.decrypt_data(cipher_text1,str(i))if isprime(data[a[:5]]) == True and isprime(i) == True:print (data[a[:5]],i)except:passkey1 = 13433911
key2 = 38593
data = RC2.decrypt_data(cipher_text1,str(key1))
print RC2.decrypt_data(data,str(key2))

这个RC2的可以得到flag也觉得很奇怪,都没有原来程序的iv,是怎么跑出来的……

或者把key1和key2放到题目给的py中运行,得到flag{!TianGe-&-Hu!}

    key1 = 38593key2 = 13433911print decrypt(cipher_text1,str(key1),str(key2))

学到了暴力姿势~

2017陕西省网络空间安全技术大赛_Crypto_crypt1_Writeup相关推荐

  1. 2017年陕西省网络空间安全技术大赛·Mobile T5

    0x00前言 由于第四题较直接,一个md5的比较,fa3733c647dca53a66cf8df953c2d539通过md5查询解密出来是monkey99, 然后真码就是monkey99了.这个第五题 ...

  2. 2017年陕西省网络空间安全技术大赛·Mobile T1

    0x00拯救鲁班七号 CM下载网址:链接: https://pan.baidu.com/s/10EPc2KCWqcaT9wLw5eyxWw 密码: swkn 界面流程:一个输入框,一个按钮. 0x01 ...

  3. 【Writeup】2017陕西网络空间安全技术大赛CSTC misc部分

    Misc 一维码 扫描一维码得到keyword:hydan 对一维码使用Stegsolve LSB隐写提取得到一个ELF文件 网上找hydan得到这个信息隐藏工具 安装好,然后执行 ./hydan-d ...

  4. 2017 陕西网络空间安全技术大赛writeup

    WEB 签到题 点开后是一个登陆框,直接查看源码得到关键代码 <!-- if (isset($_GET['Username']) && isset($_GET['password ...

  5. ctf 抓捕赵德汉_陕西省网络空间安全技术大赛Mobile(四)--人民的名义抓捕赵德汉1...

    本帖最后由 Enigma_G 于 2017-5-2 22:40 编辑 0x00 闲言碎语 这位朋友 @挥汗如雨  说让我写第四题,他写第五题,看了下题挺简单就答应了...我就简单分析下这题 题目链接  ...

  6. ctf 抓捕赵德汉_2017网络空间安全技术大赛决赛周末开战 大家赶紧来看看之前线上赛的Writeup 抓捕赵德汉...

    网络空间安全技术大赛决赛本周末就要开战了,在之前,让我们一方面请CTF高手聊比赛经验,另外一方面抓紧回顾一下线上赛的Writeup,这对于后续的比赛至关重要. 26个队伍杀入5月13日决赛 网络空间安 ...

  7. ctf 抓捕赵德汉_2017年网络空间安全技术大赛部分writeup

    作为一个bin小子,这次一个bin都没做出来,我很羞愧. 0x00 拯救鲁班七号 具体操作不多说,直接进入反编译源码阶段 可以看到,只要2处的str等于a就可以了,而str是由1处的checkPass ...

  8. ctf 抓捕赵德汉_第三届网络空间安全技术大赛WriteUp(cstc2017)

    web 1 签到题 1.看源码发现是php隐士转换直接 Username=QNKCDZO,password=240610708 ,得到下一个地址 http://117.34.111.15:84/jso ...

  9. 第三届全国网络空间安全技术大赛 Web补题 By Assassin(持续更新)

    最近比较忙,可能补题的速度慢一些些~ 签到题 首先进入界面发现如下代码 然后就知道用==弱匹配,构造一个纯数字串和一个纯字母串,让他们的MD5值形如0exxx且0e后面全是纯数字.就构成科学记数法0= ...

最新文章

  1. 闪退没由报错_秉承工匠精神,3步定位飞桨报错原因,你也来试试?
  2. Javascript eval()函数 基础回顾
  3. JS内存管理与垃圾回收
  4. ZooKeeper(三) 什么是分布式锁以及使用Redis手写实现
  5. linux下打开Mongodb命令行窗口,Linux系统下MongoDB的安装与基本操作
  6. 喀什师范学计算机学院学位论文开题报告,喀什师范学院本科生毕业论文开题报告.doc...
  7. 键盘拆开重新安装步骤_机械键盘小白入门工具
  8. 数据结构与算法之递推算法 C++与PHP实现
  9. mysql网络共享_局域网共享mysql
  10. 安装vs2010 sp1失败
  11. Python语言程序设计基础_答案_前言_通识教育必修课程_上海师范大学
  12. Android 图片处理以及recycle机制
  13. NUVOTON的IAP SFR
  14. C#实现超市管理系统(进销存--(包含部分用户权限的管理))
  15. GitHub上最火的7个spring cloud开源项目,对新手太友好了
  16. GreenHills基本操作:通过 R寄存器和上下文变量 定位异常
  17. Ubuntu 22.04 修改IP
  18. Linux服务--DHCP中继
  19. java队名_求JAVA团队名称
  20. 北京社保开户需要的手续及流程

热门文章

  1. c语言开发简单小游戏扫雷,利用C语言开发一个扫雷小游戏
  2. 服务器appcrash的问题怎么修复,Win7系统出现APPCRASH错误的修复方法
  3. python中abs和fabs的区别_Python - abs vs fabs
  4. Django框架_day01
  5. android5.0 应用闪退,【Android】MultiDex;NoClassDefFoundError;5.0以下系统应用闪退
  6. phpadmin安装到mysql中,mysql 和phpadmin安装
  7. TP6------图片上传/多图上传
  8. PHP composer作用,PHP Composer详解
  9. gird布局(网格布局)
  10. Error: While importing ‘run_app_dev‘, an ImportError was raised.