題目來源:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=1&id=5509&page=3
攻防世界crazy
這題進去之后發現要求輸入32長度的字串,然后會提示第幾位有錯誤,就想到了可以窮舉,
先給出代碼:
from pwn import*
key="!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
flag='tMx~qdstOs~crvtwb~aOba}qddtbrtcd'.ljust(32,'!')
while(True):
p = process("./crazy")
p.sendline(flag)
p.recvuntil("You did not pass ")
i=int(p.recv(2))
print(flag[0:i+1])
for x in range(len(key)):
if flag[i]==key[x]:
t=list(flag)
t[i]=key[x+1]
flag=''.join(t)
break
寫的程序中遇到了很多問題,但最后還是搞了出來,
總體思路是列舉flag,每次列舉一位,代碼中利用了pwntools:process()是創建一個行程;sendline()是發送并補充’\n’;recvuntil()是直到遇到什么為止;recv()是接受指定數目的位元組,利用這些工具很輕松的就可以把框架寫出來,
程序中遇到了一些問題,一個是每次運行時運行一會就停止了,附帶一系列報錯資訊,我的解決方法是重定義flag的初始值,每次推進幾位,然后多次重復,還有一個問題是一個小細節,接收錯誤位置i時應該寫p.recv(2),而不是p,recv(1),這個問題差點把我心態搞炸,
總體來說思路比較簡單,當做暴力的練習還是十分不錯的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238015.html
標籤:其他
