当前位置: 代码迷 >> 综合 >> BUUCTF 打卡3
  详细解决方案

BUUCTF 打卡3

热度:103   发布时间:2023-11-22 18:39:03.0

之前一直觉得没有学,所以碰到不会的大概率都会划走。但想想,总该要面对的。
主要是自己太懒了:)。

1. 丢失的MD5

可以看出这段代码是在py2中运行的。
在这里插入图片描述

解出来的就是flag。

2.Alice与Bob

根据题目要求,将素数98554799767分解为101999和966233,并组成新的数101999966233,然后进行md5的32位小写哈希。

import hashlib   
pd = 101999966233
flag = 'flag{' + hashlib.md5(str(pd).encode()).hexdigest() + '}'
print(flag)

在这里插入图片描述

3.Windows系统密码

windows下密码的格式:
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值
故将这几个hash值进行md5解密尝试,在第3个hash值处尝试成功
在这里插入图片描述

4.权限获得第一步

跟第3题是类似的。
在这里插入图片描述

5.异性相吸

异性相吸?猜测应该是异或吧。搜了一下,确实是异或。但是我一开始写的时候,计算了两个字符串的长度,len(s1) = 38,len(s2) = 19。两倍的关系,我以为是s2中的一个字符与s1中的两个字符(ord()字符化后相加再转成数字)进行异或,并不是;再然后尝试了整体(同上一个括号中的操作)进行异或,也不对。后来才想到了应该是二进制进行异或。
不过值得注意的是粘贴复制过来的会有差错:)。

from Crypto.Util.number import long_to_bytes,bytes_to_longwith open(r'key.txt','rb') as f:s1 = f.read()
s1 = bytes_to_long(s1)
print('s1 =',s1)
''' ss1 = 'asadsasdasdasdasdasdasdasdasdasdqwesqf' pd1 = str.encode(ss1) print('ss1 =',bytes_to_long(pd1)) '''
with open(r'cipher.txt','rb') as f:s2 = f.read()
s2 = bytes_to_long(s2)
print('s2 =',s2)#906620282978305788368917706917671540766368191598507869056223532353167665764726853132227611
''' ss2 = '???唒?塔屋?卖剄?堂??嘅均???' pd2 = str.encode(ss2) print('ss2 =',bytes_to_long(pd2))#9779571965693530265243919284564937911043110712797968067643010511308831972362658055906540274976809684837525929002499546901951655060 '''
flag = s1 ^ s2
print(long_to_bytes(flag))

6.还原大师

题目虽然给出的是不完整的字符串和MD5,但我们可以进行枚举字符串中缺失的部分,在于MD5的可见部分比对,从而选出最合适的。

不知道这个是不是md5加密之后,里面全为小写字母的原因,只好在进行判断时把字母小写化。
在这里插入图片描述