流量分析——ctf比赛题目wp

目录

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.再次进行解密:

第一步:分析公钥文件

第二步:观察规律

第三步:分解n1

第四步:计算flag

得到最终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分解服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值