荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人), 信区: InstallBBS
标  题: ytht代码 web精华区权限检查漏洞
发信站: 五色土BBS (Sun Jan  2 03:37:44 2005)
转信站: SZU!news.szu.edu.cn!news.happynet.org!WuSeTu

原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):

这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
/groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
比如用这个地址
http://wusetu.cn/wusetu.cn/bbs0an?path=/groups/GROUP_C/
就啥隐藏版面的精华区都能给guest我看到并访问了:)

分析产生原因:
    ytht系统精华区采用两种不同的机制来判断目录权限,对于版面精华区,检查对应的版面
权限,来设置精华区,对于其他非版面目录,则仅判断是否为hide目录.
    其判断精华区目录权限时,首先检查是否为版面目录.如判断为非版面目录,则不进行版
面权限判断.
    漏洞产生于版面目录检查过程中.因为浏览器中传递的/ 与 // 甚至是///////相等或者
相似,但目录判断函数在处理/与//或者////过程中存在漏洞.导致利用特殊手段可欺骗系统
,使版面根目录跳过权限判断函数,从而达到越权观看精华区的目的

解决方案:
    1.过虑畸形路径,在nju09/bbs0an.c内添加路径过虑函数
        bbs0an_main()
{
        FILE *fp;
        int index = 0;
        //int visit[2];
        char *ptr, papath[PATHLEN], path[PATHLEN], names[PATHLEN],
            file[80], buf[PATHLEN], title[256] = " ";
        char *board;
        html_header(1);
        changemode(DIGEST);
        check_msg();
        printf("<script src=/function.js></script>\n");
        printf("<body topmargin=0><center>\n");
        strsncpy(path, getparm("path"), PATHLEN - 1);
        if (strstr(path, ".."))
                http_fatal("此目录不存在");
        if (strstr(path, "//"))
              http_fatal("此目录不存在");
        snprintf(names, PATHLEN, "0Announce%s/.Names", path);
        strcpy(papath, path);
        ptr = strrchr(papath, '/');
...........

     此方法可过虑所有//,///,////等非法格式,效果比较明显,但可能会影响正常精华区浏


方法2:更改目录判断函数

在 libythtbbs/announce.c下getbfroma函数更改
添加非法字符过虑
char *
getbfroma(char *path)
{
        static char board[30];
        char *ptr;
        if (*path == '/')
                path++;
        if (!strncmp(path, "0Announce/", 10))
                path += 10;
        if (strncmp(path, "groups/GROUP_", 13))
                return "";
        ptr = strchr(path + 13, '/');
        if (!ptr)
                return "";
while (1)
        {
        if (strncmp(ptr+1, "/", 1) == 0 )
                ptr++;
        else
            break;
        }

        strsncpy(board, ptr + 1, sizeof (board));
        ptr = strchr(board, '/');
        if (ptr)
                *ptr = 0;
        return board;
}


--


★经专家考证:本贴为水贴,浪费您的时间,本人深感抱歉
★经专家考证:本人曾经是水车,发表水文无数,浪费硬盘空间.本人深感抱歉
★经本人考证:以上两条推论成立,您能抽空观看这篇水贴,本人深感谢意



※ 来源:.五色土BBS wusetu.cn.[FROM: 202.205.90.220]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店