利用 pwntools 編寫 socket 腳本

今天遇到了一道 ppc 的題目,並不難,連接伺服器埠後,計算返回的一個算式,發送答案,連續答對十次拿到 flag。

這一操作一般是利用 Python 的 socket 編程實現,後來看到有人說用 pwntools 也可以做,就嘗試了一下。

先放正常的 socket 編程腳本。

# coding=utf-8nimport renimport socketnnHOST = 115.159.89.123nPORT = 11002nBUFFER = 4096 nnsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) nsock.connect((HOST,PORT)) nntitle = sock.recv(BUFFER) nprint(title)nni = 1nwhile 1:ntrecv = sock.recv(BUFFER)ntif recv:nttprint calc + str(i)nttprint recvnttif re.search(r(.*?)=, recv):ntttcalc = re.search(r(.*?)=, recv).group(1)ntttresult = eval(calc)ntttprint resultntttsock.send(str(result) + n)nttti += 1nttelif re.search(rflag, recv):ntttprint recvntttbreakntelse:nttcontinuennsock.close()n

pwntools 好像不能再 Windows 下安裝,於是轉戰 Kali。

pip install pwntoolsn

一般來說都可以成功的,如果有問題,或者用的是其他發行版,可能需要先裝點別的。

apt-get install python2.7 python2.7-dev python-pipn

#! pythonn# coding=utf-8nimport renfrom pwn import *nnHOST = 115.159.89.123nPORT = 11002nBUFFER = 4096 nnr = remote(HOST, PORT)ntitle = r.recv(BUFFER)nprint titlenni = 1nwhile 1:ntrecv = r.recv(BUFFER)ntif recv:nttprint calc + str(i)nttprint recvnttif re.search(r(.*?)=, recv):ntttcalc = re.search(r(.*?)=, recv).group(1)ntttresult = eval(calc)ntttprint resultntttr.sendline(str(result))nttti += 1nttelif re.search(rflag, recv):ntttprint recvntttbreakntelse:nttcontinuennr.close()n

區別不是很大,只是做了一點小小的工作。

推薦閱讀:

有哪些學習氛圍比較不錯的 Python 論壇?
Python機器學習隨筆之非線性分類的logistic回歸擬合及正則化
【我愛背單詞】從300萬單詞中給你一份3000英語新聞高頻辭彙
用Python寫個迷你出門問問|10幾行代碼搞定

TAG:CTFCaptureTheFlag | Python |