(參考
ecb模式使用相同的key分塊對明文分別進行加密,相同的明文獲得相同的密文輸出
根據這一特性,可以構造如下資料進行攻擊:
首先輸入blocksize-1的填充,這樣未知字串的第乙個字元將落到填充塊的最後乙個位元組:
******aa aaaaaaaa aaaaaaxx
******ba aaaaaaaa aaaaaaax
******bb aaaaaaaa aaaaaaaa
這時會得到填充塊的乙個密文輸出,爆破最後乙個位元組,直到產生與剛才相同的密文輸出,就可以確定未知字串的乙個位元組,重複這個過程就可以得到完整的未知字串。
向包含未知字串的明文中插入資料,其實也是列舉驗算的過程:
1.獲取未知字串的第一位
比輸入name為111111111111,
伺服器生成未知字串"hello, 111111111111, your mission's flag is: flag******"的用ecb加密過的字串s1給我們,
其中flag******是我們希望得到的flag,通過觀察題目程式可知,此處ecb使用的是16位的,
進而觀察可知,16個字元的字串加密後就變成32個字元的密文了。
就是說"hello, 111111111111, your mission's flag is: x"的最後乙個x剛好是第32位,我們首先通過這個32字元的字串獲取一下加密過的encrypto, 也就是64個字元的字串s2,那麼這個s2必然是s1的前64位。
然而我們剛開始並不知道這個x是什麼,於是我們列舉這個x,令x為乙個ascii字元,
比如向伺服器傳送"hello, 111111111111, your mission's flag is: a",獲取密文,如果這個密文恰好是s1的前64位,那麼a就是flag未知字串的第一位,於是我們就破解了flag的第一位。
2.獲取未知字串的剩餘位
因為a已經是flag的第一位,根據破解的原理,我們要把未知字元放在第32位(此處和第一步一樣取乙個合理的16的倍數)
那麼我們只要把name的名字長度縮小乙個字元就可以了
即此時變為"hello, 11111111111, your mission's flag is: ax"
(可以對照第一步的字元"hello, 111111111111, your mission's flag is: a")
依然列舉x即可,以此類推,獲取全部的字串(此處以"}"為結尾標誌)
主程式**:
#!/usr/bin/env python
# coding=utf-8
import conn
import os
number = 30 + 16
mess = "hello, 111111111111, your mission's flag is: moeflag_-~!@#$%^&*()-=+?>
for i in array:
conn.reads()
# print("嘗試 "+i)
mess = "hello, " + "1" * number + ", your mission's flag is: " + ans + i
conn.sends(mess)
data = conn.reads()
# print(data)
# print data
if data[0:128 + 32] == blockdata:
found = true
print("發現 " + i)
ans += i
number = number - 1
if i == "}":
number = -1
print("答案:" + ans)
os.system("pause")
# message=message+i
break
conn.close()
if not found :
print("沒有找到~~")
os.system("pause")
print(ans)
元件conn的**
import socket
import os
obj = none
def remote(addr, ip):
global obj
obj = socket.socket()
obj.connect((addr, ip))
def reads():
global obj
ret_bytes = obj.recv(1024)
ret_str = str(ret_bytes, encoding="utf-8")
#print(ret_str)
return ret_str
def sends(content):
global obj
obj.sendall(bytes(content + "\n", encoding="utf-8"))
def close():
global obj
obj.close()
注:這兩個**需要放在同級目錄下,只要執行main就可以了
見這可能是因為輸入的字串最後沒有 換行符,導致伺服器認為輸入未結束。
可能有這麼幾個原因:
原因1:列舉的字元集合不夠大,有些flag中例如「=」這樣的資料沒有包含進去。也可以採用轉ascii,這樣更完整,但是運算速度就降低了。
原因2:flag位數太大, 移位以後還不夠,可以 分批執行程式,也可以擴大初始name的長度
web攻擊模式
主動攻擊 攻擊者直接訪問web應用,把攻擊 傳入的攻擊模式.代表的有sql注入攻擊和os命令注入攻擊 被動攻擊 被動攻擊 passive attack 是指利用圈套策略執行攻擊 的攻擊模式。在被動攻擊過程中,攻擊者不直接對目標 web 應用訪問發起攻擊。被動攻擊通常的攻擊模式如下所示。步驟 1 攻擊...
Web應用的攻擊模式
web應用的攻擊模式 主動攻擊 通過訪問web應用,把攻擊 插入的攻擊模式,sql注入攻擊,os命令注入攻擊 被動攻擊 利用全套策略執行攻擊 的攻擊模式不直接對web應用訪問發起攻擊 指令碼攻擊,跨站點請求偽造 步走如下 攻擊者誘發使用者觸發已經設好的陷阱,然後這個陷阱會自動傳送http請求,其中以...
Aircrack ng的6種攻擊模式
0 deautenticate 衝突模式 使已經連線的合法客戶端端強制斷開與路由器的連線,使其重新連線。在重新連線過程中獲得驗證資料報,從而產生有效的 arp資料。如果乙個客戶端連在路由器上,但是沒有人上網來產生有效資料,此時即使用 3也無法產生有效的 arp資料,所以就需要用 0攻擊模式來配合 3...