pwntools 是一個用Python開發的CTF框架和漏洞利用的開發程式庫。
英文教學文件在 docs.pwntools.com
安裝方式
Linux
sudo apt-get install python-pip
sudo pip install pwntools
Windows
pip install pwntools
一般都使用
from pwn import *
但請注意一般開發python程式是最忌諱這樣寫的,理論上應該只載入需要的方法而已。
它有很多模組,但這邊這題CTF演練只需要tubes,其他先列出來但不多做說明啦!
asm:彙編與反彙編
dynelf:用於遠程符號泄露,需要提供leak方法
elf:對elf文件進行操作
gdb:配合gdb進行調試
memleak:用於內存泄漏
shellcraft: shellcode的生成器
tubes:包括tubes: 包括tubes.sock, tubes.process, tubes.ssh, tubes.serialtube,分別適用於不同場景的PIPE
utils:一些實用的小功能,例如CRC計算,cyclic pattern等
Tubes
與伺服器或目標PC建立連線並進行互動。
pwnlib.tubes.process
— 執行緒pwnlib.tubes.serialtube
— 串接pwnlib.tubes.sock
— Socketspwnlib.tubes.ssh
— SSH
remote("hostname",port_num)
向目標主機以及指定port連線。
recvline() 其實等於 readline() 就是讀一行的意思。
sendline() 送一行訊息
sendlineafter(“xxxx”, “送的訊息”) 就是在前面那個參數之後再發送訊息。
其他
基本IO 您可能需要從IO中獲得的基本功能是: 接收資料recv(n)
-接收任意數量的可用字節recvline()
-接收數據,直到遇到換行符recvuntil(delim)
-接收數據,直到找到定界符recvregex(pattern)
-接收數據,直到滿足正則表達式模式recvrepeat(timeout)
-繼續接收數據,直到發生超時clean()
-丟棄所有緩衝的數據 傳送資料send(data)
-發送數據sendline(line)
-發送數據和換行符 整數運算pack(int)
-發送字大小的壓縮整數unpack()
-接收和解包一個字長的整數
實際演練
Easy Peasy
| 40 pointsTags: Category: Cryptography
AUTHOR: MADSTACKS
Description
A one-time pad is unbreakable, but can you manage to recover the flag? (Wrap with picoCTF{}) nc mercury.picoctf.net 64260
otp.py
關鍵
if stop >= KEY_LEN:
stop = stop % KEY_LEN
基於HMAC的一次性密碼演算法(英語:HMAC-based One-time Password algorithm,HOTP)是一種基於雜湊訊息驗證碼(HMAC)的一次性密碼(OTP)演算法,同時也是開放驗證提案的基礎(OATH)。 取自維基百科。
這裡做了 xor
nc過去會看到加密後的flag
觀察opt.py可以發現密鑰的長度是50000個byte,flag是32byte。
仔細思考只要超過50000,它就會循環了。
簡單來說要找加密的xor value 只要不斷的使用相同的xor重新加密原來的輸入就可以拿到flag。
雖然這題code不是自己寫,但理解別人寫的code並吸收才是最重要的,所以就放上code的連結在這裡。
https://blog.maple3142.net/2021/03/30/picoctf-2021-writeups/
最後取得flag