+ -
当前位置:首页 → 问答吧 → 关于共享库so的制作问题

关于共享库so的制作问题

时间:2010-12-08

来源:互联网

具体情况是这样的:
在给某银行做一个项目,环境为AIX,有个需求要求普通帐号可以清理备份IHS的日志,于是我们公司一位前辈写了一个C程序来调用清理备份IHS日志的脚本。C代码如下:

#include "stdio.h"
#include "pwd.h"

main(int argc,char *argv[])
{
struct passwd *root_pwd;
char proc_name[254];
gid_t root_gid;
uid_t root_uid;
int gg,uu;

if(1==argc)
strcpy(proc_name,"./backup_ihslog.sh");
else{
printf("Running %s",argv[1]);
strcpy(proc_name,argv[1]);
}
root_pwd=getpwnam("root");

root_gid=root_pwd->pw_gid;
root_uid=root_pwd->pw_uid;

gg=setgid(root_gid);
uu=setuid(root_uid);

gg=system(proc_name);
return 0;
}

root用户编译此C代码,并加上suid
#gcc backup_ihslog_c.c -o backup_ihslog_c
#chmod u+s backup_ihslog_c
普通用户直接运行backup_ihslog_c就可以进行IHS日志的清理备份了。我们认为这样没有问题了,但是今天银行请的一位专家说这样做有漏洞,说在运行这个C程序时后边跟上其他root的命令也是可以运行的,比如rm -rf /etc 。让我把那个if语句去掉,程序改为这样:
#include "stdio.h"
#include "pwd.h"

main(int argc,char *argv[])
{
struct passwd *root_pwd;
char proc_name[254];
gid_t root_gid;
uid_t root_uid;
int gg,uu;
strcpy(proc_name,"./backup_ihslog.sh");
printf("Running %s",argv[1]);
strcpy(proc_name,argv[1]);

root_pwd=getpwnam("root");

root_gid=root_pwd->pw_gid;
root_uid=root_pwd->pw_uid;

gg=setgid(root_gid);
uu=setuid(root_uid);

gg=system(proc_name);
return 0;
}


我想他请教,但是人家是专家根本就不鸟我这样的小菜鸟,所以只有到这里请教大家了。请大家帮我分析一下这个程序,帮我在每条加上注释,谢谢!

作者: lldonger   发布时间: 2010-12-08

strcpy别随便用,这个函数,不做合法性检查的。
其次system没有检查参数。例如分号之类的。

我这样运行:
代码:
backup_ihslog_c "kdjksdjfsh;rm -rf /"


你可以试试,系统是不是完了?

代码:
#include <stdio.h>

int main()
{
    system("ls -l;echo aaaaa");
}

我的测试程序。
你可以跑跑。

作者: cnkilior   发布时间: 2010-12-08

cnkilior 写道:
strcpy别随便用,这个函数,不做合法性检查的。
其次system没有检查参数。例如分号之类的。

我这样运行:
代码:
backup_ihslog_c "kdjksdjfsh;rm -rf /"


你可以试试,系统是不是完了?

代码:
#include <stdio.h>

int main()
{
    system("ls -l;echo aaaaa");
}

多谢2楼的,请问ackup_ihslog_c "kdjksdjfsh;rm -rf /"中的kdjksdjfsh是什么意思?
谢谢
我的测试程序。
你可以跑跑。

作者: lldonger   发布时间: 2010-12-08

kdjksdjfsh的意思是ishdajhfkjsdnjchshflksjdnf

作者: cnkilior   发布时间: 2010-12-08

cnkilior 写道:
kdjksdjfsh的意思是ishdajhfkjsdnjchshflksjdnf

呵呵,;前面可以随意写吗?
多谢!

作者: lldonger   发布时间: 2010-12-08

setuid的程序可不好写 特别是允许输入shell命令的 极其不好写

作者: xhy   发布时间: 2010-12-08

热门下载

更多