• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

proftp 1.2.0 存在安全漏洞

发布: 2007-7-02 21:50 | 作者: admin | 来源: | 查看: 8次 | 进入软件测试论坛讨论

领测软件测试网

Bug1:
void set_proc_title(char *fmt,...) in src/main.c


memset(statbuf, 0, sizeof(statbuf));
vsnprintf(statbuf, sizeof(statbuf), fmt, msg);

#ifdef HAVE_SETPROCTITLE
setproctitle(statbuf);
#endif /* HAVE_SETPROCTITLE */


setproctitle, defined setproctitle(char *fmt,...);, calls vsnprintf().
这存在格式化攻击的漏洞。通过攻击缓冲区可能获得 root 权限。

Bug2:
MODRET pam_auth(cmd_rec *cmd) in modules/mod_pam.c


/* Allocate our entries...we don@#t free this because PAM does this for
us.
*/
pam_user = malloc(strlen(cmd->argv[0]) + 1);
if(pam_user == (char *)0)
return pam_return_type ? ERROR(cmd) : DECLINED(cmd);
sstrncpy(pam_user, cmd->argv[0], strlen(cmd->argv[0]) + 1);

pam_pass = malloc(strlen(cmd->argv[1]) + 1);
if(pam_pass == (char *)0)
return pam_return_type ? ERROR(cmd) : DECLINED(cmd);
sstrncpy(pam_pass, cmd->argv[1], strlen(cmd->argv[1]) + 1);


这不能造成拒绝服务攻击,除非管理员设置了更高的界限。

Bug3:
void logformat(char *nickname, char *fmts) 没有在本地变量 @#format@# 进行边界检查。结果登录格式将溢出缓冲区。

Bug3:
int dolist(cmd_rec *cmd, const char *opt, int clearflags) in
modules/mod_ls.c


char pbuffer[MAXPATHLEN];


if(*arg == @#~@#) {
struct passwd *pw;
int i;
const char *p;


i = 0;
p = arg;
p++;


while(*p && *p != @#/@#)
pbuffer[i++] = *p++;
pbuffer[i] = @#\0@#;


这个函数通过 cmd_stat 调用与 @#arg@#存在于静态堆栈,看上去是有问题但不能只通过输入 1024 字节造成溢出,不过仍然是不安全的设计。
解决方法:
1。使用 setproctitle("%s",statbuf);
2。pstrdup() 或只使用 cmd->argv[0] and cmd->argv[1].

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网