0x01 文件分析
没有不可执行栈和段上的读写保护。
0x02 运行
输入name后发现上面还有一个地址。
0x03 IDA
若输入
crashme
,即可进入vlun
函数,主要的漏洞点在这个函数内部的,chall
栈的大小很大,足够写
入shellcode
,之后的vuln
函数会将name
的数据复制到vuln的栈上面,而且复制的数据量远远大于栈的
长度,会造成栈溢出。
并且chall
函数的栈的地址直接打印出来,不用再去泄露栈地址,可以直接利用。
但如何绕过crashme检测呢?
strlen
函数不会统计\x00
,遇到就会停止。
0x04 思路
通过
fgets
写入shellcode
,结合已经泄露的栈地址,在vuln
里面改写返回地址,跳转到栈上的shellcode
执行。
做之前先要找出相关的偏移量,使用gdb调试,第一个是输入字符串
与返回地址
之间的偏移。使用gdb调试脚本到函数内部:
#!/usr/bin/python2
#coding=utf-8
from pwn import *
from LibcSearcher import *
context(os = "linux", arch