python调用md系列算法破解ctf题目

 

题目

某银行客户端以安全著称,所有网络流量都开启了密码学防护机制。有一天,你抓到了局域网中的网银登录流量。在这个流量中,密码字段的值为   5ef5ce92fc409703a834adabd2bc861c

根据分析,你获得了如下的线索:

  • 上面抓到的登录流量密码字段是 md系列哈希算法的哈希值。
  • 这个登录密码也是银行卡的 ATM 取款密码。
  • 登录密码的哈希值是加盐之后计算的结果,根据逆向分析,盐的值是用户名的拼音,而你推测出了流量来自于邻居 “张三丰”

有了这些线索之后,你能够分析出密码是什么吗?
flag 提交格式: flag{密码_哈希算法_盐}
举例: flag{123456_md999_lisi}    老铁们有什么思路吗

 

 


解题思路:

举例中给的是md系列的算法,常见的有md2、md4、md5算法(算法长度都与题目中的hash长度相符),其中md5使用最为广泛

  • MD2算法产生于1989年
  • MD4算法产生于1990年
  • MD5算法产生于1991年

鉴于md5使用最为广泛,先从md5进行解题,方法:python调用hashlib实现hash碰撞

具体示例如下:
 

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import hashlib

#md5实现hash碰撞


for x in xrange(1,1000000):
		
	print 'password=',x,' ---> ' ,hashlib.md5(str(x)+'zhangsanfeng').hexdigest()
	pass

首先来看一下能不能成功运行

可以看到上面结果,已经成功运行(代码有待后续优化)

 

把我们题目中的hash放进代码作为判断,看看能否碰撞出结果

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import hashlib

#md5实现hash碰撞


for x in xrange(1,1000001):
		
	if '5ef5ce92fc409703a834adabd2bc861c'==hashlib.md5(str(x)+'zhangsanfeng').hexdigest():
		print 'found the key  ','password=',str(x)+'zhangsanfeng',' ---> ' ,hashlib.md5(str(x)+'zhangsanfeng').hexdigest()
		break
	pass
	if x==1000000:
		print 'not found!!!'

运行结果如上,发现没有,找到,看来采用的不是md5算法;

我们接下来看看是否为md4

简单修改脚本:把md5改为md4,脚本如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import hashlib

#md5实现hash碰撞


for x in xrange(1,1000001):
		
	if '5ef5ce92fc409703a834adabd2bc861c'==hashlib.md4(str(x)+'zhangsanfeng').hexdigest():
		print 'found the key  ','password=',str(x)+'zhangsanfeng',' ---> ' ,hashlib.md4(str(x)+'zhangsanfeng').hexdigest()
		break
	pass
	if x==1000000:
		print 'not found!!!'

运行结果如上,WTF(这里请分开读  W  T  F,嗯,与ctf类似),竟然出错了,找不到md4,hashlib这么牛的一个库,竟然没有实现md4,太匪夷所思了,查看官方帮助看一下

可以看到,明明包含md4、md5,但是为啥不能运行呢,仔细找找,通过构造可以实现对md4的调用

修改后的代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import hashlib

#md5实现hash碰撞


for x in xrange(1,1000001):
		
	if '5ef5ce92fc409703a834adabd2bc861c'==hashlib.new('md4',str(x)+'zhangsanfeng').hexdigest():
		print 'found the key  ','password=',str(x)+'zhangsanfeng',' ---> ' ,hashlib.new('md4',str(x)+'zhangsanfeng').hexdigest()
		break
	pass
	if x==1000000:
		print 'not found!!!'

可以看到,已经成功找到password,构造flag--->flag{187345_md4_zhangsanfeng}

 

hash在线验证链接:https://www.qqxiuzi.cn/bianma/md2.php

 

 

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿雷由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值