Log
题目
在网络的深处,存在一个数字日志,记录着系统的起起伏伏。然而,最近出现了一个神秘的扫描器,频繁对系统进行攻击,你是数字侦探,被委派任务找出这个扫描器最为活跃的来源IP(出现重复按照日期最早的算)。
分析
考察日志统计:将日志放到excel里面,根据空格分列数据后,统计ip
1. 合并文件
copy access.log.?? log.txt
2.表格处理日志
菜单栏【数据】->【分列】,按空格为分隔符号分列。
根据ip进行计数,筛选出5条最高访问次数的ip地址,根据时间得到答案122.252.241.163
Crypto
题目
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2023/10/20 13:32
from Crypto.Util.number import *
from secret import flag
from sage.all import *
p=getPrime(512)
q=getPrime(512)
e1=getPrime(64)
e2=getPrime(64)
N1=p*q
m=bytes_to_long(flag)
c1=pow(m,e1,N1)
c2=pow(m,e2,N1)
print("e1="+str(e1))
print("e2="+str(e2))
print("c1="+str(c1))
print("c2="+str(c2))
print("N1="+str(N1))
# e1=15154862404842278851
# e2=12559619060348765633
# c1=129061960172987856775724689620907533499026278141684802370744431170694087890607127502915339002382505689659795160397409979050090218452041537036076275506611915488053630025767989561720487535340686208336631844553167509535880293221587474899887124847981825347648959302111450932627271156976419996034995472347544951449
# c2=57621466301898877108281867095517079215750508388186265340335297953845539349925113202177181161569783105547910074451664487640920748934076569428408005768732547421940449167664088574358990810191915352574582106797109129135395066184609996512061811750597951761474064458982455594553864401565110547456726090289659692691
# N1=148876844056751848788936329051800910086735763712250288782790925753925255702216990364054278400980334652791567181444332917549084106236043465869918288308031338783077559375541511604524094347767506492724631196191752263233136316358649035559987075168928231964069345159610191318194200350157839270833363343478696757073
分析
使用了两个公钥(n,e)来加密同一条信息m,使用共模攻击。
#N1=p*q
#c1=pow(m,e1,N1)
#c2=pow(m,e2,N1)
import gmpy2
from Crypto.Util.number import *
e1=15154862404842278851
e2=12559619060348765633
c1=129061960172987856775724689620907533499026278141684802370744431170694087890607127502915339002382505689659795160397409979050090218452041537036076275506611915488053630025767989561720487535340686208336631844553167509535880293221587474899887124847981825347648959302111450932627271156976419996034995472347544951449
c2=57621466301898877108281867095517079215750508388186265340335297953845539349925113202177181161569783105547910074451664487640920748934076569428408005768732547421940449167664088574358990810191915352574582106797109129135395066184609996512061811750597951761474064458982455594553864401565110547456726090289659692691
N1=148876844056751848788936329051800910086735763712250288782790925753925255702216990364054278400980334652791567181444332917549084106236043465869918288308031338783077559375541511604524094347767506492724631196191752263233136316358649035559987075168928231964069345159610191318194200350157839270833363343478696757073
g,s1,s2 = gmpy2.gcdext(e1,e2)
m = pow(c1,s1,N1)*pow(c2,s2,N1)%N1
print(m)
print("flag = ",long_to_bytes(int(m)))
共模攻击:
根据扩展欧几里得算法可以得到一组整数(s1,s2),使得 :
g,s1,s2= gmpy2.gcdext(e1,e2)
解密明文:
m = pow(c1,s1,n)*pow(c2,s2,n)%n
- 若e1,e2存在最大公约数g=3,则对m进行开g次方根:
m = gmpy2.iroot(m,g)[0]- 若e1,e2互质,则m = pow(c1,s1,n)*pow(c2,s2,n)%n