免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13681 | 回复: 11
打印 上一主题 下一主题

惊人发现:PHP所有版本 SESSION 漏洞 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-13 17:57 |显示全部楼层 |倒序浏览
惊人发现:PHP所有版本 SESSION 漏洞

关键字:php 漏洞 session register_globals 登录 安全

先看这一段简单的代码
<?php
session_start();

$_SESSION['isadmin']='yes';

$isadmin='no';

echo $_SESSION['isadmin'];

?>
当php.ini里配置 register_globals = Off 时,
没任何问题,
输出 yes

但是
当php.ini里配置 register_globals = On 的时候,
第一次运行输出 yes
而刷新一下,则显示的是 no

显然这是不正常的,
这是个很奇怪的问题,
如果说是 $isadmin='no'; 改变了SESSION,
那么为什么第一次会显示yes呢?


都知道:当配置 register_globals = On 的时候,
通过 xxx.php?id=123 访问时,程序会自动创建变量 id
那么自动创建的变量会不会改变SESSION呢?
测试代码
<?php
//xxx.php
session_start();
echo $_SESSION['id'];
?>
通过 xxx.php?id=123 访问,没任何输出,
还好,不然不知道将有多少
采用 SESSION 做登录的
而PHP配置 register_globals 为 On 的网站
将被随便登录。

还有两个常用的函数 import_request_variables() 和 extract()
import_request_variables -- 将 GET/POST/Cookie 变量导入到全局作用域中
extract --  从数组中将变量导入到当前的符号表
<?php
//xxx.php

import_request_variables('G');
echo $id;

?>
当通过xxx.php?id=123访问的时候,
就算 register_globals 设为 Off
也是会输出123

extract($_GET) 与 import_request_variables('G') 功能相似

那么试试import_request_variables() 与 extract()创建的变量会不会影响SESSION呢?
测试代码
<?php
//xxx.php
session_start();

import_request_variables('G');

echo $_SESSION['id'];
?>
当通过xxx.php?id=123访问程序,
没有输出,再用extract($_GET)代替import_request_variables('G')测试,
还是没输出,这一点又很奇怪了,因为测试
<?php
session_start();
$arr=array('id'=>123);
extract($arr);
echo $_SESSION['id'];
?>
register_globals 为 On 时
会输出 123

看来同样是数组,
extract 处理 $_GET 与处理定义的数组
用的是不一样的方法。

结论:
register_globals 为 On 的时候,
用import_request_variables('G')和extract($_GET)创建的变量是不会改变SESSION的。

总结:漏洞只存在于PHP配置register_globals = On的时候,定义的变量会改变同名的SESSION。

转载请保留
作者:Cos.X
日期:2007年6月13日
ps. 结果让我挺失望的,以为会发现一个惊人的PHP SESSION 登录安全漏洞。

[ 本帖最后由 115300111 于 2007-6-14 19:12 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-13 18:37 |显示全部楼层
楼上的意思是说register_global=on的时候它不是漏洞,
那么register_global=off的时候它就是漏洞了

那么register_global本来就是可以开可以关的,
哪有说关上了就不是漏洞了

什么逻辑

大标题党我承认

论坛徽章:
0
3 [报告]
发表于 2007-06-14 08:50 |显示全部楼层
你的比喻不大合适吧,

不是容易走火,问题是它拔掉保险马上就走火了,你说是不是有问题的手枪呢?

就像一个电视,可是看有线电视台,也可以看VCD,看VCD的时候变成黑白,

你说他没问题,只要不看VCD就行了。

如果register_global设置可以开可以关,

那就应该可以正常使用,不应该让一个定义的变量改变同名SESSION

论坛徽章:
0
4 [报告]
发表于 2007-06-14 08:52 |显示全部楼层
原帖由 csona 于 2007-6-13 20:45 发表
您没有明白register_global是什么意思



那你说register_global什么意思呢???

你觉得当php.ini里配置 register_globals = On 的时候,
<?php
session_start();

$_SESSION['isadmin']='yes';

$isadmin='no';

echo $_SESSION['isadmin'];

?>
输出no是正常的吗???这没问题吗???

我想应该是你没明白register_global什么意思吧

论坛徽章:
0
5 [报告]
发表于 2007-06-14 19:00 |显示全部楼层
是,技术决定安全,这我同意

但这里就是有一个漏洞,

<?php
session_start();

$_SESSION['isadmin']='yes';

$isadmin='no';

echo $_SESSION['isadmin'];

?>

当php.ini里配置 register_globals = On 的时候,
第一次运行输出 yes
而刷新一下,则显示的是 no

这正常吗?

这么多人,没有一个人没有一个人认可,我很不服。

如果说定义的变量本来就是可以改变同名SESSION,

那为什么刷新之前不改变呢?

SESSION可不是COOKIE

论坛徽章:
0
6 [报告]
发表于 2007-06-14 19:03 |显示全部楼层
原帖由 volca 于 2007-6-14 13:32 发表
楼主的逻辑是:

他开始用一把枪,先去掉保险,然后扣动了扳机,这枪居然发射了?这是走火!!这把枪有巨大的缺陷,它居然会发射!!

扣动了扳机就会发射,这是常识好不好?多看看使用说明书不会有坏处。许多 ...


你的逻辑我已经无法理解了

还是看一下我楼上说的吧。。。

论坛徽章:
0
7 [报告]
发表于 2007-06-14 19:10 |显示全部楼层
原帖由 HonestQiao 于 2007-6-14 10:02 发表
结帖!


版主你找出来的也无法证明这不是个漏洞。

而且手册上有错,你发现没?


另一个例子是关于会话的。当 register_globals = on 的时候,$username 也可以用在下面的代码中,但要意识到 $username 也可能会从其它途径进来,比如说通过 URL 的 GET。

例子 29-2. 使用会话时同时兼容 register_globals on 和 off 的例子

<?php
// 我们不知道 $username 的来源,但很清楚 $_SESSION 是
// 来源于会话数据
if (isset($_SESSION['username'])) {

    echo "Hello <b>{$_SESSION['username']}</b>";

} else {

    echo "Hello <b>Guest</b><br />";
    echo "Would you like to login?";

}
?>


事实上register_globals 为 on 也无法通过URL 的 GET改变SESSION,我贴子中用例子证明了。

请认真对待,希望得到认同,虽然标题有点高调。

这是一个bug

论坛徽章:
0
8 [报告]
发表于 2007-06-15 10:51 |显示全部楼层
是一知半解,但好像没有断章取义吧,

手册上就是说可以通过GET改变SESSION呀,而事实上不会

论坛徽章:
0
9 [报告]
发表于 2007-06-15 18:42 |显示全部楼层
此处...

s.gif (13.91 KB, 下载次数: 64)

s.gif

论坛徽章:
0
10 [报告]
发表于 2007-06-18 11:22 |显示全部楼层
原帖由 小胡他爹 于 2007-6-17 08:24 发表
还不锁啊。楼主无聊至极,到处发=_=! 不觉得丢人吗

到处发怎么就丢人了呢?
你说话能不能自己先想想为什么?

有什么丢人呢?
我谈技术有什么不对的,
人家发广告的都活得有滋有味,逍遥自在,
我在这里谈技术有何不可?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP