pwntools语句的简单使用,包含例子
pwntools語句講解
連接
本地 :io = porcess("./文件名")
遠程:io = remote(“ip地址”,端口)
關(guān)閉連接:io.close()
發(fā)送 payload
io.sendafter(some_string, payload) 接收到 some_string 后, 發(fā)送你的 payload;
p.sendlineafter(some_string, payload) 接收到 some_string 后, 發(fā)送你的 payload,加個換行
p.send(payload) 發(fā)送 payload
p.sendline(payload) 發(fā)送 payload,并進行換行(末尾\n)
接收返回內(nèi)容
p.interactive() 直接進行交互,相當于回到shell的模式,一般在取得shell之后使用
生成 shellcode:
asm(shellcraft.sh())
p.recvn(N) 接受 N(數(shù)字) 字符
p.recvline() 接收一行輸出
p.recvlines(N) 接收 N(數(shù)字) 行輸出
p.recvuntil(some_string) 接收到 some_string 為止
stack=int(p.recv(10),16) 接收回顯的參數(shù)在棧上的地址,長度是10,以16進制表示
ELF
首先需要 elf=ELF(’./filename’) 來產(chǎn)生一個對象
elf.symbols[‘a(chǎn)_function’] 找到 a_function 的地址
elf.got[‘a(chǎn)_function’] 找到 a_function的 got
elf.plt[‘a(chǎn)_function’] 找到 a_function 的 plt
elf.next(e.search(“some_characters”)) 找到包含 some_characters 可以是字符串,匯編代碼或者某個數(shù)值的地址
ROP
rop = ROP(’./filename’) 還是要先創(chuàng)建一個對象
rop.raw(‘a(chǎn)’*32) 在構(gòu)造的 rop 鏈里面寫 32 個 a
rop.call(‘read’, (0, elf.bss(0x80))) 調(diào)用一個函數(shù),可以簡寫成:rop.read(0, elf.bss(0x80))
rop.chain() 就是整個 rop 鏈,發(fā)送的 payload
rop.dump() 直觀地展示當前的 rop 鏈
rop.migrate(base_stage) 將程序流程轉(zhuǎn)移到 base_stage(地址)
rop.unresolve(value) 給出一個地址,反解析出符號
rop.search(regs=[‘ecx’,‘ebx’]) 搜索對 eax 進行操作的 gadgets
rop.find_gadget([‘pop eax’,‘ret’]) 搜索 pop eax ret 這樣的 gadgets
總結(jié)
以上是生活随笔為你收集整理的pwntools语句的简单使用,包含例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二进制安全需要记住的取值范围 int8,
- 下一篇: NX,Canary,RELRO,PIE,