1. 程式人生 > 其它 >[SWPU2019] NETWORK

[SWPU2019] NETWORK

[SWPU2019]Network(TTL隱寫)

1.題目概述

2.解題過程

文件中的數字代表什麼呢?會不會是RGB?

看了一下以前做過的題目,好像並不是

那是什麼呢?百度告訴我這是TTL隱寫,哇,長見識了

TTL是 Time To Live的縮寫,該欄位指定IP包被路由器丟棄之前允許通過的最大網段數量。TTL是IPv4報頭的一個8
bit欄位。注意:TTL與DNS
TTL有區別。二者都是生存時間,前者指ICMP包的轉發次數(跳數),後者指域名解析資訊在DNS中的存在時間。

IP報文在路由間穿梭的時候每經過一個路由,TTL就會減1。
這個東西是用來防止資料過多的。計算機網路知識。

大多數情況下通常只需要經過很小的跳數就能完成報文的轉發,遠遠比上限255小得多,所以我們可以用TTL值的前兩位來進行傳輸隱藏資料。
所以加密的方法就是把一個ASCII碼分4截,分到4個TTL裡面,有點像是最低位畫素的隱寫。

啊,這些好像也沒啥用,

按照以下步驟,

1.轉成2進位制,

2.寫個指令碼。取出前兩位。重新組合。再以8位一組。

3.轉換為16進位制字元。再將16進位制字元轉換為字元(好複雜)

藉助大佬的指令碼,開幹!

指令碼如下

with open('Network.txt') as f:
    lines = f.readlines()
n_num = []
#分析出所有的數
for i in lines:
    if i!='\n':
        n_num.append(int(i))
#拿到每個TTL值的高位
rlt = ''
for i in range(0,len(lines)):
    tmp = bin(n_num[i])[2:]
    tmp = '0'*(8-len(tmp)) + tmp
    rlt += tmp[0:2]
#得到最終的結果並存到檔案中
rlt2 = ''
for i in range(0,len(rlt),8):
    rlt2 += chr(int(rlt[i:i+8],2))
with open('output.txt','w') as f:
    f.write(rlt2.rstrip())

出來一個類似於zip檔案的編碼,存下來

開啟,竟然是加密的

是偽加密

直接用7-zip開啟

這些base64編碼和以前做過的一道題很像

再試一下

多重Base64破解

import base64

f = open('1flag.txt','rb').read()
while True:
    f = base64.b64decode(f)
    if b'{' in f:
        print(f)
        break
    else:
        continue

pycharm python2環境下執行, 可能需要安裝scikit-learn安裝包(在設定裡)

3.flag

flag{189ff9e5b743ae95f940a6ccc6dbd9ab}