攻防世界streamgame1

2021-10-24 17:40:31 字數 2425 閱讀 1511

題目下下來的附件有兩個,1個.py檔案,1個二進位制檔案,.py檔案內容如下:

from flag import flag

assert flag.startswith("flag")

# 作用:判斷字串是否以指定字元或子字串結尾},flag{},6個位元組

assert len(flag)==25

# flag的長度為25位元組,25-6=19個位元組

#3<<2可以這麼算,bin(3)=0b11向左移動2位變成1100,0b1100=12(十進位制)

def lfsr(r,mask):

output = (r << 1) & 0xffffff #將r向左移動1位,bin(0xffffff)='0b111111111111111111111111'=0xffffff的二進位制補碼

i=(r&mask)&0xffffff #按位與運算子&:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

lastbit=0

while i!=0:

lastbit^=(i&1) #按位異或運算子:當兩對應的二進位相異時,結果為1

i=i>>1

output^=lastbit

return (output,lastbit)

r=int(flag[5:-1],2)

mask = 0b1010011000100011100

f=open("key","ab") #以二進位制追加模式開啟

for i in range(12):

tmp=0

for j in range(8):

(r,out)=lfsr(r,mask)

tmp=(tmp << 1)^out #按位異或運算子:當兩對應的二進位相異時,結果為1

f.write(chr(tmp)) #chr() 用乙個範圍在 range(256)內的(就是0~255)整數作引數,返回乙個對應的字元。

f.close()

差不多就是根據flag計算出12個字元,依次寫入key檔案,這種題目一般就爆破和逆運算2種思路,這裡我們先讀取key檔案,看看是什麼內容

f = open('key','rb')

content = f.read()

s_list =

for c in content:

結果如下:

[85, 56, 247, 66, 193, 13, 178, 199, 237, 224, 36, 58]
然後可以知道的是flag是19位二進位制數,範圍是0-2^20 - 1,所以寫指令碼來爆破,完整**如下:

def check(list1, list2):

for i in range(12):

if list1[i] != list2[i]:

return false

return true

def lfsr(r ,mask):

output = (r << 1) & 0xffffff #將r向左移動1位,bin(0xffffff)='0b111111111111111111111111'=0xffffff的二進位制補碼

i=(r&mask)&0xffffff #按位與運算子&:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

lastbit=0

while i!=0:

lastbit^=(i&1) #按位異或運算子:當兩對應的二進位相異時,結果為1

i=i>>1

output^=lastbit

return (output,lastbit)

if __name__ == '__main__':

f = open('key','rb')

content = f.read()

s_list =

for c in content:

print(s_list)

mask = 0b1010011000100011100

for i in range(1 << 19):

print(i)

tmp_list =

r = i

for j in range(12):

tmp = 0

for k in range(8):

(r, out) = lfsr(r, mask)

tmp = (tmp << 1) ^ out # 按位異或運算子:當兩對應的二進位相異時,結果為1

if (check(s_list, tmp_list)):

print(bin(i))

break

即可得到flag

1110101100001101011
注意加上flag{}

攻防世界密碼學streamgame2

看題目 題目給了乙個壓縮包,有乙個.py檔案和乙個key檔案。py from flag import flag assert flag.startswith flag assert len flag 27 deflfsr r,mask output r 1 0xffffff i r mask 0xf...

攻防世界 web confusion1

confusion1 考察 ssti 參考進入網頁,發現除了主頁面,login和register都登不進去。顯示apache2.4.10,查詢是否有相關可利用漏洞,失敗。根據wp,login.php和register.php下均有提示flag位置 一定要檢視原始碼,不能訪問的頁面也要檢視 在url上...

攻防世界mfw 攻防世界 Web mfw

題目資訊 image.png 工具 githack,dirsearch 知識點 git漏洞 審計 開啟題目場景,檢查 發現這樣乙個頁面 image.png 訪問.git目錄,疑似存在git原始碼洩露 image.png 再用dirsearch掃瞄,發現git原始碼洩露 使用 githack獲取原始碼...