目录
3.筛选其中http.request.method==POST的流量包:
6.在这里找到了响应包,复制去解码看看(网站:CyberChef)
7.现在缺少上传一句话木马里面key的值,去Wireshark里面找
9.解码成功,发现了压缩包,里面存在hint.txt文件,和两个publickey1.pem、publickey2.pem文件,下载压缩包:
得到最终flag:flag{d015aaeb4dec08e1db126e915d5a01cd}
1.打开题目,下载压缩包得到:

2.使用Wireshark打开pcap文件:

3.筛选其中http.request.method==POST的流量包:

4.打开最后一个,使用追踪流打开http流:


5.发现里面没有响应包?或许是在TCP流里面。

6.在这里找到了响应包,复制去解码看看(网站:CyberChef)


7.现在缺少上传一句话木马里面key的值,去Wireshark里面找


8.发现了key,复制到解码网站中去,开始解密:

解码成功,发现里面还需要base64解密:

还需要一层base64解密:

9.解码成功,发现了压缩包,里面存在hint.txt文件,和两个publickey1.pem、publickey2.pem文件,下载压缩包:



打开hint.txt,里面发现了flag的线索:



10.再次进行解密:
第一步:分析公钥文件
读取两个PEM文件,提取RSA参数:
python脚本:
from Crypto.PublicKey import RSA
with open('publickey1.pem', 'r') as f:
key1 = RSA.import_key(f.read())
with open('publickey2.pem', 'r') as f:
key2 = RSA.import_key(f.read())
n1 = key1.n # 公钥1的模数
n2 = key2.n # 公钥2的模数
e = key1.e # 公钥指数(两个公钥相同)
得到:
n1 = 44246121011271558015758440510280691138722846766016040795998703455688525151379256016011185014483148720244671516767452195625707948011157989602942016776335196442421365765287185155510806225182363325150986994524037134984016506285078100457728341060710609269365508985454884521961175839515748036059179681942657577689
n2 = 17158155587933912733862117112921741960394800924905080120155126290019861407132554707926218749686578495716864799561315890557953113109324735791233074459468888097589339131946110721688767640016498865548393104662759706361264662132119647594657178484293948596771089238454030012847435029782391509410130521587561699521
e = 13371021346616315920076193538067650539541146779172412744507029138592761005011917574966007335864235039499860965125624732929788729491998743504047568033447438467655783500512611961094604861333846130355851604111077366257232235022540362108284901457891912129883829489946171424434999959530586432212719360479668436857
第二步:观察规律
发现两个公钥的e完全相同,且n1和n2存在关系:
- n1 ≈ 3e,即 n1 = 3e + r1(r1为余数)
- n2 ≈ e,即 n2 = e + r2(r2为余数)
- gcd(r1, r2) = 2
第三步:分解n1
根据hint提示 `n1 = p * q`,需要分解n1得到p和q。
由于n1是1024位的RSA模数,本地分解困难,使用在线分解服务 factordb:
curl "http://factordb.com/api?query=n1"
返回结果:
json
{
"id": 1100000007547349937,
"status": "FF",
"factors": [
[5179297973994056745045581282954968621384946327086691667233488759628164926044960668928261899054510047348571026000665332925925961116818759354673920176733761, 1],
[8542879987488113293396137734378632163500730856409526220527242322392448077464051485155175738264336752261447259030358580971993116553295618833008963417079449, 1]
]
}
得到:
p = 5179297973994056745045581282954968621384946327086691667233488759628164926044960668928261899054510047348571026000665332925925961116818759354673920176733761
q = 8542879987488113293396137734378632163500730856409526220527242322392448077464051485155175738264336752261447259030358580971993116553295618833008963417079449
验证:p * q == n1 ✅
第四步:计算flag
根据hint中的公式:
python脚本;
from hashlib import md5
data = str(p).encode() + str(q).encode()
flag = 'flag{' + md5(data).hexdigest() + '}'
print(flag)
得到最终flag:
flag{d015aaeb4dec08e1db126e915d5a01cd}
总结最后的解密:
最后的解密是RSA大数分解题,核心思路:
1. 从PEM文件中提取RSA参数
2. 利用在线分解服务(factordb)分解模数n1
3. 根据hint中的flag格式计算md5得到flag
关键工具:factordb.com 在线RSA分解服务

4432

被折叠的 条评论
为什么被折叠?



