☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 03:37:44 2005) 提到:
原描述 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;
}
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Sun Jan 2 10:19:53 2005) 提到:
GROUP_C/.Names 里面是有 BMClub 的?
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: ...................
☆─────────────────────────────────────☆
chutium (阿新) 于 (Sun Jan 2 11:42:14 2005) 提到:
你的第一种修改是不行的,在其它一些情况下仍然会有问题,因为不只是bbs0an要检查目录,bbsanc.c里也有这部分代码的,而他们都是一起调用bbslib.c里的那个函数,我在你站里说的比较清楚了。。。根本上讲,要使用第二种方法。你可以看看bbsanc.c就明白了。
另外还有精华区的转寄、转发等等也没有检查权限。具体的……telnet里可以看我在smth前面发的精华区权限检查那个文章,web下的现在没整理出来代码,基本思想在
http://bbs.abcn.net/ZZU/tcon?board=BBSDev&th=1102721812 看。
bbs.zzu.edu.cn 算是一时没希望开了。。。用bbs.abcn.net先顶着吧。欢迎大家来交流共同进步。
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: ...................
☆─────────────────────────────────────☆
KCN (毒中之毒~我已剪短了长发~) 于 (Sun Jan 2 18:17:07 2005) 提到:
这两种方法修改方法仍然可以被绕开.....
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: ...................
☆─────────────────────────────────────☆
yuhuan (556) 于 (Sun Jan 2 18:52:49 2005) 提到:
你个大黑客!
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 这两种方法修改方法仍然可以被绕开.....
☆─────────────────────────────────────☆
weccpafik (冥落金山) 于 (Sun Jan 2 18:56:39 2005) 提到:
哈哈,献给yuhuan
http://mathbbs.8866.org/MathBBSAAmAAGHLU/con?B=16&F=M.1103416652.A&T=-190
【 在 yuhuan (556) 的大作中提到: 】
: 你个大黑客!
☆─────────────────────────────────────☆
tnds@feeling.smth.org-SPAM.no (拖泥带水) 于 (Sun Jan 2 16:52:31 2005) 提到:
测试了一下,fb2000系统同样存在此问题。
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: ...................
☆─────────────────────────────────────☆
tnds ( ) 于 (Sun Jan 2 16:49:55 2005) 提到:
刚才测试了一下,这个bug在fb2000的代码下同样存在
各位技术。。。抓虫子去。。。
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: ...................
☆─────────────────────────────────────☆
KCN (毒中之毒~我已剪短了长发~) 于 (Sun Jan 2 19:07:17 2005) 提到:
比不上yuhuan....
【 在 yuhuan (556) 的大作中提到: 】
: 你个大黑客!
☆─────────────────────────────────────☆
kxn (感谢大家,参见说明档) 于 (Sun Jan 2 19:10:26 2005) 提到:
因为 K 核心实在是太伟大了
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 这两种方法修改方法仍然可以被绕开.....
☆─────────────────────────────────────☆
windtear (追求完美 ipcn/ipchina.org windtear.net) 于 (Sun Jan 2 19:18:55 2005) 提到:
以后注册个k什么n
【 在 kxn (感谢大家,参见说明档) 的大作中提到: 】
: 因为 K 核心实在是太伟大了
☆─────────────────────────────────────☆
zxtg.bbs@bbs.tju.edu.cn.no.spam (中型太贵) 于 (Sun Jan 2 18:23:09 2005) 提到:
啊。。上帝给个办法,难道是像水木那样的%2F?
【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 这两种方法修改方法仍然可以被绕开.....
: 【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: : 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: : /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: : ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 18:22:54 2005) 提到:
eeee
唉
除非检查每一个目录的权限了
【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 这两种方法修改方法仍然可以被绕开.....
: 【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 原描述 by chutium@zzu(这个猪头还用这个bug跑到我们站大肆偷窥了一下):
: : 这个本来是我没有权限进去看的封闭俱乐部精华区,但是以前的ytht代码有bug,注意
: : /groups/GROUP_C//BMClub 这里是两个 // ,如果是一个/ 就进不去了
: : ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 18:23:16 2005) 提到:
9494
kcn给个办法吧
【 在 zxtg.bbs@bbs.tju.edu.cn.no.spam (中型太贵) 的大作中提到: 】
: 啊。。上帝给个办法,难道是像水木那样的%2F?
: 【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: : 这两种方法修改方法仍然可以被绕开.....
☆─────────────────────────────────────☆
chutium (阿新) 于 (Sun Jan 2 20:04:51 2005) 提到:
nod,还有bbsanc.c和bbslib.c里的其它函数都有权限检查上的疏漏。
只做上面那两处修改是远远不够的,而且第一种修改根本就是没有意义的,这个漏洞和以前windows的那个二次解码漏洞差不多,并不是只过滤 / 就可以解决的。
我们站的代码已经基本改好了,我在前面的帖子也提到了,telnet下的代码发在smth了已经,web下面的比较麻烦,要注意的地方很多,所以还没来得及整理出来具体哪改了……
朱雀mm太心急了,呵呵,不过各位用相关代码的先把这个补上,元旦放假结束前我把我们那里改的整理出来争取
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 这两种方法修改方法仍然可以被绕开.....
☆─────────────────────────────────────☆
chutium (阿新) 于 (Sun Jan 2 20:43:46 2005) 提到:
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 此方法可过虑所有//,///,////等非法格式,效果比较明显,但可能会影响正常精华区浏览
效果不见得那么明显吧……
: 方法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;
: }
这个其实是正确的方法。不过可以简化一点
在ptr = strchr(path + 13, '/');前面加一个
while(path[14] == '/')
path++;
就可以了,而且,绝对不会影响正常的精华区浏览:)
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 19:10:41 2005) 提到:
郁闷哦
难道要过滤所有可能的非法url
【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 比不上yuhuan....
: 【 在 yuhuan (556) 的大作中提到: 】
: : 你个大黑客!
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 20:30:09 2005) 提到:
偶现在准备重写权限检查了:(
【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: nod,还有bbsanc.c和bbslib.c里的其它函数都有权限检查上的疏漏。
: 只做上面那两处修改是远远不够的,而且第一种修改根本就是没有意义的,这个漏洞和以前windows的那个二次解码漏洞差不多,并不是只过滤 / 就可以解决的。
: 我们站的代码已经基本改好了,我在前面的帖子也提到了,telnet下的代码发在smth了已经,web下面的比较麻烦,要注意的地方很多,所以还没来得及整理出来具体哪改了……
: 朱雀mm太心急了,呵呵,不过各位用相关代码的先把这个补上,元旦放假结束前我把我们那里改的整理出来争取
: 【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: : 这两种方法修改方法仍然可以被绕开.....
☆─────────────────────────────────────☆
KCN (毒中之毒~我已剪短了长发~) 于 (Sun Jan 2 22:24:31 2005) 提到:
主要是需要检查到最终的真实目录,这个比较麻烦。所以要考虑
各种可能的路径写法。另外就是目录权限的实现了,如果要考虑
目录权限嵌套的话,更麻烦,只能一层层查下来。
【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 郁闷哦
: 难道要过滤所有可能的非法url
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 20:43:32 2005) 提到:
目前是默认允许查看精华区,权限检查不通过不允许查看
我准备尝试改成默认禁止,然后放权限
【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: 【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 此方法可过虑所有//,///,////等非法格式,效果比较明显,但可能会影响正常精华区浏览
: 效果不见得那么明显吧……
: : 方法2:更改目录判断函数
: : 在 libythtbbs/announce.c下getbfroma函数更改
: : 添加非法字符过虑
: : char *
: : getbfroma(char *path)
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 20:50:20 2005) 提到:
恩……最好写成统一的函数,这是我想做而没能做的了的……
要注意的
给没有发消息或者邮件权限的用户,发消息或者发邮件,他就能回复,而且回复邮件的时候把收件人改一下就可以实现发邮件给任何人。。。
另外还有转贴、转寄什么的一些地方,没有检查用户是不是在转到的版面被封,或者被封全站,而成功的转载过去文章,还有被禁发信权限的用户可以转寄文章给任何人……等等
以上两个是telnet下和web下做的比较乱的,有些telnet里做了检查,有些web里做了检查……写成统一的函数比较好统一调用……
不过我们那里都是陆陆续续改的,现在整理起来比较麻烦,也就放弃了去整合到一个函数里了,反正已经实现了:p
另外就是精华区和个人文集的权限检查,在我的总结里也写了一些,尤其是telnet里精华区
的转寄和访问时的。。。web下的你也知道了,还有要注意web下的个人文集,没有实现对自己的<HIDE>目录的访问。。。这个我做了,一会把代码整理一下发出来~
以上这个精华区的,因为涉及的代码文件比较少,做不做函数无所谓了,不过自己好好看看重新写写还是很支持的:)
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 偶现在准备重写权限检查了:(
: 【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: : nod,还有bbsanc.c和bbslib.c里的其它函数都有权限检查上的疏漏。
: : 只做上面那两处修改是远远不够的,而且第一种修改根本就是没有意义的,这个漏洞和以前windows的那个二次解码漏洞差不多,并不是只过滤 / 就可以解决的。
: : 我们站的代码已经基本改好了,我在前面的帖子也提到了,telnet下的代码发在smth了已经,web下面的比较麻烦,要注意的地方很多,所以还没来得及整理出来具体哪改了……
: : 朱雀mm太心急了,呵呵,不过各位用相关代码的先把这个补上,元旦放假结束前我把我们那里改的整理出来争取
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 20:54:57 2005) 提到:
我这里一直都是乱七八糟的乱改
没有统一做过,这个寒假准备不回家在这里做了
btw:刚才我试验了一下
http://wusetu.cn/wusetu.cn/bbs0an?path=/groups/GROUP_C/%2F%2F
这个貌似也无效了
从来没用过这种攻击方式,所以不熟悉
唉!
代码对我来说一直都是比较棘手的.偶是建筑专业的
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 恩……最好写成统一的函数,这是我想做而没能做的了的……
: 要注意的
: 给没有发消息或者邮件权限的用户,发消息或者发邮件,他就能回复,而且回复邮件的时候把收件人改一下就可以实现发邮件给任何人。。。
: 另外还有转贴、转寄什么的一些地方,没有检查用户是不是在转到的版面被封,或者被封全站,而成功的转载过去文章,还有被禁发信权限的用户可以转寄文章给任何人……等等
: 以上两个是telnet下和web下做的比较乱的,有些telnet里做了检查,有些web里做了检查……写成统一的函数比较好统一调用……
: 不过我们那里都是陆陆续续改的,现在整理起来比较麻烦,也就放弃了去整合到一个函数里了,反正已经实现了:p
: 另外就是精华区和个人文集的权限检查,在我的总结里也写了一些,尤其是telnet里精华区
: 的转寄和访问时的。。。web下的你也知道了,还有要注意web下的个人文集,没有实现对自己的<HIDE>目录的访问。。。这个我做了,一会把代码整理一下发出来~
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 20:56:41 2005) 提到:
啥叫放权限?就是不检查权限了么?那不行啊……禁止查看要做,权限检查也要做。要不如果有人知道隐藏版的版名,直接输入GROUP_?/版名也可以进去的。
从根本上来说,要改bbs0an.c里读item那个anc_readitem里,判断是否有read_perm,而且要在做这个判断前做一个检查,看是不是dir(file_isdir()),要不随便就去调用read-perm的话可能会搞出大乱子……
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 目前是默认允许查看精华区,权限检查不通过不允许查看
: 我准备尝试改成默认禁止,然后放权限
: 【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: : 效果不见得那么明显吧……
: : ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 20:59:52 2005) 提到:
不是
我得意思是
首先设置所有精华区目录不可见,然后对应相应权限允许读取
这样的话,权限检查旧好做多了
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 啥叫放权限?就是不检查权限了么?那不行啊……禁止查看要做,权限检查也要做。要不如果有人知道隐藏版的版名,直接输入GROUP_?/版名也可以进去的。
: 从根本上来说,要改bbs0an.c里读item那个anc_readitem里,判断是否有read_perm,而且要在做这个判断前做一个检查,看是不是dir(file_isdir()),要不随便就去调用read-perm的话可能会搞出大乱子……
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 目前是默认允许查看精华区,权限检查不通过不允许查看
: : 我准备尝试改成默认禁止,然后放权限
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 21:02:44 2005) 提到:
这东西其实就是拿时间往里砸……要这么说我们学c那都是几年前的事了……而且基本上考完数据结构就再没怎么翻过与c有关的书~~语言上没啥太多东西,一些新增加的功能和修改牵扯出来的其他问题是最可怕的~
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 我这里一直都是乱七八糟的乱改
: 没有统一做过,这个寒假准备不回家在这里做了
: btw:刚才我试验了一下
:
http://wusetu.cn/wusetu.cn/bbs0an?path=/groups/GROUP_C/%2F%2F: 这个貌似也无效了
: 从来没用过这种攻击方式,所以不熟悉
: 唉!
: 代码对我来说一直都是比较棘手的.偶是建筑专业的
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 21:04:03 2005) 提到:
嗯
同感
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 这东西其实就是拿时间往里砸……要这么说我们学c那都是几年前的事了……而且基本上考完数据结构就再没怎么翻过与c有关的书~~语言上没啥太多东西,一些新增加的功能和修改牵扯出来的其他问题是最可怕的~
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 我这里一直都是乱七八糟的乱改
: : 没有统一做过,这个寒假准备不回家在这里做了
: : btw:刚才我试验了一下
: :
http://wusetu.cn/wusetu.cn/bbs0an?path=/groups/GROUP_C/%2F%2F: : 这个貌似也无效了
: : 从来没用过这种攻击方式,所以不熟悉
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 21:04:09 2005) 提到:
可大部分版面都是普通人可见的啊
貌似做起来基本是一样的,不敢讲,试试吧
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 不是
: 我得意思是
: 首先设置所有精华区目录不可见,然后对应相应权限允许读取
: 这样的话,权限检查旧好做多了
: 【 在 chutium (秋天|阿新) 的大作中提到: 】
: : 啥叫放权限?就是不检查权限了么?那不行啊……禁止查看要做,权限检查也要做。要不如果有人知道隐藏版的版名,直接输入GROUP_?/版名也可以进去的。
: : 从根本上来说,要改bbs0an.c里读item那个anc_readitem里,判断是否有read_perm,而且要在做这个判断前做一个检查,看是不是dir(file_isdir()),要不随便就去调用read-perm的话可能会搞出大乱子……
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 21:06:50 2005) 提到:
恩
我得想法是,现在可以利用特殊字符跳过版面权限检查,而我要做的就是必须做版面权限检查,如果跳过得话,默认就是不可见,这样应该根本解决了跳过得问题
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 可大部分版面都是普通人可见的啊
: 貌似做起来基本是一样的,不敢讲,试试吧
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 不是
: : 我得意思是
: : 首先设置所有精华区目录不可见,然后对应相应权限允许读取
: : 这样的话,权限检查旧好做多了
☆─────────────────────────────────────☆
chutium (阿新) 于 (Sun Jan 2 22:54:36 2005) 提到:
我把我们那的代码大致整理了一下,k大侠给看看了...
主要就是在读.Names的时候用
if (*ptr && (file_isdir(buf)) && !has_read_perm(currentuser, ptr))
去判断读出来的一个path是不是目录,用户对这个目录有没有读的权限,这个has_read_perm函数就是返回 has_read_perm_x 的值,这个函数基本上没有做修改
不知道这个“目录权限嵌套”咋理解?
http://bbs.abcn.net/ZZU/con?B=BBSDev&F=M.1104676845.A
http://bbs.zzu.edu.cn/ZZU/con?B=BBSDev&F=M.1104676845.A
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 主要是需要检查到最终的真实目录,这个比较麻烦。所以要考虑
: 各种可能的路径写法。另外就是目录权限的实现了,如果要考虑
: 目录权限嵌套的话,更麻烦,只能一层层查下来。
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 23:34:57 2005) 提到:
嗯
我明白你的意思了:)
我是说
char *getbfroma(char *path)返回的是版面名称
而我们所说的漏洞是利用两个或者多个/来跳过版面权限检查
而漏洞产生于char *getbfroma(char *path)这个函数
当发送类似groups/GROUP_*//之类字符串的时候,判断返回的版面名称为 0
具体作用是这句:
strsncpy(board, ptr + 1, sizeof (board));
ptr = strchr(board, '/');
if (ptr)
*ptr = 0;
return board;
我不是很明白这句的作用,但是就是这句话导致//返回的目录是0,猜想是去掉groups/GROUP_*//版面名/.....用的
而bbs0an_main()中
if (*ptr && !has_read_perm(currentuser, ptr))
根据返回的版面名称判断权限
因为getbfroma的问题。造成所有利用//制造的url都不会检查权限
所以我改了一下getbfroma
因为在bbs0an_main()中,无论是浏览目录还是文件,只要是精华区url都会通过这个函数判断一下文件或者目录所属版面的权限。
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 啥?……
: char *getbfroma(char *path)
: 明显是返回一个字符串啊……
: 再者我说的不仅仅是修补那个带多余/的漏洞了,我是在说如何对一个精华区目录的权限进行检查……
: /那个很好解决啊,就是ptr++一下就可以跳过了,我发在bbs.zzu.edu.cn的里已经说到了
: 我这个修改的作用是在读.Names的时候就把没有读权限的版面隐藏掉,不知道我说明白没。。。是在读.Names的时候用的……
: 当然,只把版面隐藏掉是不够的,如果对方知道这个版面的英文名,还是可以进去,所以隐藏不能读取的版面上第一步,第二步就是还要在bbs0an.c里判断打开的版面是不是有读取权限。
: 然后只在bba0an里检查了权限也是不够的,因为如果有nb人士神通广大,知道隐藏版面里的某个文件的文件名,他就可以用bbsanc去打开他本不能看到的文件。所以在bbsanc.c里也要加权限检查…………这就是第三步。
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 22:30:51 2005) 提到:
嗯
好的
【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 主要是需要检查到最终的真实目录,这个比较麻烦。所以要考虑
: 各种可能的路径写法。另外就是目录权限的实现了,如果要考虑
: 目录权限嵌套的话,更麻烦,只能一层层查下来。
: 【 在 朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 郁闷哦
: : 难道要过滤所有可能的非法url
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Sun Jan 2 22:56:09 2005) 提到:
【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: 我把我们那的代码大致整理了一下,k大侠给看看了...
: 主要就是在读.Names的时候用
: if (*ptr && (file_isdir(buf)) && !has_read_perm(currentuser, ptr))
利用那个getbfroma函数返回"//"返回的是一个0或者空
这个判断应该没有作用啊
: 去判断读出来的一个path是不是目录,用户对这个目录有没有读的权限,这个has_read_perm函数就是返回 has_read_perm_x 的值,这个函数基本上没有做修改
: 不知道这个“目录权限嵌套”咋理解?
:
http://bbs.abcn.net/ZZU/con?B=BBSDev&F=M.1104676845.A:
http://bbs.zzu.edu.cn/ZZU/con?B=BBSDev&F=M.1104676845.A: 【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 23:17:44 2005) 提到:
啥?……
char *getbfroma(char *path)
明显是返回一个字符串啊……
再者我说的不仅仅是修补那个带多余/的漏洞了,我是在说如何对一个精华区目录的权限进行检查……
/那个很好解决啊,就是ptr++一下就可以跳过了,我发在bbs.zzu.edu.cn的里已经说到了
我这个修改的作用是在读.Names的时候就把没有读权限的版面隐藏掉,不知道我说明白没。。。是在读.Names的时候用的……
当然,只把版面隐藏掉是不够的,如果对方知道这个版面的英文名,还是可以进去,所以隐藏不能读取的版面上第一步,第二步就是还要在bbs0an.c里判断打开的版面是不是有读取权限。
然后只在bba0an里检查了权限也是不够的,因为如果有nb人士神通广大,知道隐藏版面里的某个文件的文件名,他就可以用bbsanc去打开他本不能看到的文件。所以在bbsanc.c里也要加权限检查…………这就是第三步。
我整理的那个文章也是按照这个顺序把我们对这几个代码的修改发出来的。
over.
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 【 在 chutium@smth.org-SPAM.no (阿新) 的大作中提到: 】
: : 我把我们那的代码大致整理了一下,k大侠给看看了...
: : 主要就是在读.Names的时候用
: : if (*ptr && (file_isdir(buf)) && !has_read_perm(currentuser, ptr))
: 利用那个getbfroma函数返回"//"返回的是一个0或者空
: 这个判断应该没有作用啊
: : 去判断读出来的一个path是不是目录,用户对这个目录有没有读的权限,这个has_read_perm函数就是返回 has_read_perm_x 的值,这个函数基本上没有做修改
: : 不知道这个“目录权限嵌套”咋理解?
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Sun Jan 2 23:57:36 2005) 提到:
呼呼,if (*ptr && !has_read_perm(currentuser, ptr))是不行的,我开始也是这么做的,没有考虑到非目录不能带进去给has_read_perm的问题,导致有些文件也不能出现在精华区列表里了。
bbs0an.c里做这个判断必须要加(file_isdir(buf))的,bbs0an.c里不会显示文件内容,只会读.names去列出标题
判断一个文件所在的版面是不是能被读应该在bbsanc.c里做啊
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 嗯
: 我明白你的意思了:)
: 我是说
: char *getbfroma(char *path)返回的是版面名称
: 而我们所说的漏洞是利用两个或者多个/来跳过版面权限检查
: 而漏洞产生于char *getbfroma(char *path)这个函数
: 当发送类似groups/GROUP_*//之类字符串的时候,判断返回的版面名称为 0
: 具体作用是这句:
: strsncpy(board, ptr + 1, sizeof (board));
: ptr = strchr(board, '/');
: if (ptr)
: *ptr = 0;
: return board;
: 我不是很明白这句的作用,但是就是这句话导致//返回的目录是0,猜想是去掉groups/GROUP_*//版面名/用的
: 而bbs0an_main()中
: if (*ptr && !has_read_perm(currentuser, ptr))
: 根据返回的版面名称判断权限
: 因为getbfroma的问题。造成所有利用//制造的url都返回版面名称为0,结果不会进行检查权限
: 所以我改了一下getbfroma
: 因为在bbs0an_main()中,无论是浏览目录还是文件,只要是精华区url都会通过这个函数判断一下文件或者目录所属版面的权限。
: 【 在 chutium (秋天|阿新) 的大作中提到: 】
: : 啥?……
: : char *getbfroma(char *path)
: : 明显是返回一个字符串啊……
: : 再者我说的不仅仅是修补那个带多余/的漏洞了,我是在说如何对一个精华区目录的权限进行检查……
: : /那个很好解决啊,就是ptr++一下就可以跳过了,我发在bbs.zzu.edu.cn的里已经说到了
: : 我这个修改的作用是在读.Names的时候就把没有读权限的版面隐藏掉,不知道我说明白没。。。是在读.Names的时候用的……
: : 当然,只把版面隐藏掉是不够的,如果对方知道这个版面的英文名,还是可以进去,所以隐藏不能读取的版面上第一步,第二步就是还要在bbs0an.c里判断打开的版面是不是有读取权限。
: : 然后只在bba0an里检查了权限也是不够的,因为如果有nb人士神通广大,知道隐藏版面里的某个文件的文件名,他就可以用bbsanc去打开他本不能看到的文件。所以在bbsanc.c里也要加权限检查…………这就是第三步。
: : ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Mon Jan 3 01:52:55 2005) 提到:
总算搞完了,感谢chutium的帮助
嗯嗯
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: eee
: 刚才又有人来偷看
: 哼唧
: 【 在 chutium (秋天|阿新) 的大作中提到: 】
: : 呼呼,if (*ptr && !has_read_perm(currentuser, ptr))是不行的,我开始也是这么做的,没有考虑到非目录不能带进去给has_read_perm的问题,导致有些文件也不能出现在精华区列表里了。
: : bbs0an.c里做这个判断必须要加(file_isdir(buf))的,bbs0an.c里不会显示文件内容,只会读.names去列出标题
: : 判断一个文件所在的版面是不是能被读应该在bbsanc.c里做啊
: : ...................
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Mon Jan 3 00:18:52 2005) 提到:
收到
:)
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 呼呼,if (*ptr && !has_read_perm(currentuser, ptr))是不行的,我开始也是这么做的,没有考虑到非目录不能带进去给has_read_perm的问题,导致有些文件也不能出现在精华区列表里了。
: bbs0an.c里做这个判断必须要加(file_isdir(buf))的,bbs0an.c里不会显示文件内容,只会读.names去列出标题
: 判断一个文件所在的版面是不是能被读应该在bbsanc.c里做啊
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 嗯
: : 我明白你的意思了:)
: : 我是说
: : char *getbfroma(char *path)返回的是版面名称
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Mon Jan 3 00:53:19 2005) 提到:
eee
刚才又来偷看
哼唧
这个(file_isdir(buf))改成(file_isdir(ptr))比较好,否则还是能够直接用文件名来透窥
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 呼呼,if (*ptr && !has_read_perm(currentuser, ptr))是不行的,我开始也是这么做的,没有考虑到非目录不能带进去给has_read_perm的问题,导致有些文件也不能出现在精华区列表里了。
: bbs0an.c里做这个判断必须要加(file_isdir(buf))的,bbs0an.c里不会显示文件内容,只会读.names去列出标题
: 判断一个文件所在的版面是不是能被读应该在bbsanc.c里做啊
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 嗯
: : 我明白你的意思了:)
: : 我是说
: : char *getbfroma(char *path)返回的是版面名称
: ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Mon Jan 3 02:09:05 2005) 提到:
八成能上转信十大了。。。:p
整理的文档就是那个
http://bbs.zzu.edu.cn/ZZU/con?B=BBSDev&F=M.1104676845.A
基本上把上面提到的修改都做了,还有其它的一些改进
唯一的一个就是(file_isdir(buf))用buf还是ptr不太确定,因为file_isdir跟的参数应该是一个完整的路径的。。。ptr只是一个版名,我不知道用ptr做参数能不能正常完成功能…
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 总算搞完了,感谢chutium的帮助
: 嗯嗯
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : eee
: : 刚才又有人来偷看
: : 哼唧
: : ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Mon Jan 3 02:09:40 2005) 提到:
这就叫通宵啊…………嘿,小意思小意思……
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 总算搞完了,感谢chutium的帮助,感谢kcn的批评指导,感谢大家的帮助,我可以睡觉了
: 另外:感谢bbs代码,我又连续2天通宵
: 嗯嗯
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : eee
: : 刚才又有人来偷看
: : 哼唧
: : ...................
: ...................
☆─────────────────────────────────────☆
朱雀.bbs@wusetu.cn (睡觉§暗黑§魔兽§凤凰涅磐不加人) 于 (Mon Jan 3 02:13:27 2005) 提到:
元旦晚上通宵,昨晚通宵,加上今晚到现在
【 在 chutium (秋天|阿新) 的大作中提到: 】
: 这就叫通宵啊…………嘿,小意思小意思……
: 【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: : 总算搞完了,感谢chutium的帮助,感谢kcn的批评指导,感谢大家的帮助,我可以睡觉了
: : 另外:感谢bbs代码,我又连续2天通宵
: : 嗯嗯
: : ...................
☆─────────────────────────────────────☆
chutium.bbs@wusetu.cn (秋天|阿新) 于 (Mon Jan 3 02:14:37 2005) 提到:
..pfpf
【 在 朱雀 (睡觉§暗黑§魔兽§凤凰涅磐不加人) 的大作中提到: 】
: 元旦晚上通宵,昨晚通宵,加上今晚到现在
: 【 在 chutium (秋天|阿新) 的大作中提到: 】
: : 这就叫通宵啊…………嘿,小意思小意思……
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Mon Jan 3 04:40:31 2005) 提到:
有个函数叫 realpath...
加上目录权限检查应该就可以了
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 主要是需要检查到最终的真实目录,这个比较麻烦。所以要考虑
: 各种可能的路径写法。另外就是目录权限的实现了,如果要考虑
: 目录权限嵌套的话,更麻烦,只能一层层查下来。
: ...................
☆─────────────────────────────────────☆
KCN (毒中之毒~我已剪短了长发~) 于 (Mon Jan 3 10:56:17 2005) 提到:
看看linux man里面对 realpath的说明...这个函数是有些不好的..
【 在 atppp (Big Mouse) 的大作中提到: 】
: 有个函数叫 realpath...
: 加上目录权限检查应该就可以了
☆─────────────────────────────────────☆
flyriver (江~~每天进步一点点) 于 (Mon Jan 3 12:01:38 2005) 提到:
realpath 对精华区目录来说用处不大,不管怎样都需要检查每一级目录的 .Names 文件。
【 在 atppp (Big Mouse) 的大作中提到: 】
: 有个函数叫 realpath...
: 加上目录权限检查应该就可以了
☆─────────────────────────────────────☆
rwayan (阿言) 于 (Mon Jan 3 13:18:15 2005) 提到:
难道FreeBSD下面的实现也是有问题的??
【 在 KCN (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 看看linux man里面对 realpath的说明...这个函数是有些不好的..
☆─────────────────────────────────────☆
atppp@bbs.stanford.edu-SPAM.no (Big Mouse) 于 (Mon Jan 3 11:17:13 2005) 提到:
你是说以前那个缓冲区溢出漏洞吗...
另外这个函数几个平台也没统一,dst缓冲区到底应该留多少要根据平台来判断...
为此php里面还有人争论过是不是php应该自己写一个realpath函数
不过linux+glibc里面用也有问题?
【 在 KCN@smth.org-SPAM.no (毒中之毒~我已剪短了长发~) 的大作中提到: 】
: 看看linux man里面对 realpath的说明...这个函数是有些不好的..
: 【 在 atppp (Big Mouse) 的大作中提到: 】
: : 有个函数叫 realpath...
: : 加上目录权限检查应该就可以了
☆─────────────────────────────────────☆
atppp@bbs.stanford.edu-SPAM.no (Big Mouse) 于 (Mon Jan 3 13:23:34 2005) 提到:
我们是在说同一个问题么...赫赫...
【 在 flyriver@smth.org-SPAM.no (江~~每天进步一点点) 的大作中提到: 】
: realpath 对精华区目录来说用处不大,不管怎样都需要检查每一级目录的 .Names 文件。
: 【 在 atppp (Big Mouse) 的大作中提到: 】
: : 有个函数叫 realpath...
: : 加上目录权限检查应该就可以了
☆─────────────────────────────────────☆
flyriver (江~~每天进步一点点) 于 (Mon Jan 3 17:22:04 2005) 提到:
难道不是在讨论精华区目录权限问题?
【 在 atppp@bbs.stanford.edu-SPAM.no (Big Mouse) 的大作中提到: 】
: 我们是在说同一个问题么...赫赫...