EXGB GUESTBOOK安全性分析 Analysist 2001年 32期 ExGB GuestBook被认为是国内最好的PHP文本多用户留言簿,具有速度快,界面美观,体积小,功能强,支持多用户,在线申请、在线开通和使用文本存储数据等特点,源代码可以从http://www.codechina.net/soft/down/87523158ztskygb1.zip得到。   本来半年前就接触到了这个程序,但是一直没有分析它的安全性,前些日子看到一个比较正规的商业站点用的就是这个留言簿,所以决定花点时间分析一下这个程序。分析的结果大大出乎我的意料,因为这个程序的安全性实在是不堪一击,我们可以轻易地获得留言簿的超级管理员密码以及所有注册用户的账号和密码等所有信息。   好了,下面我就详细地为大家分析一下ExGB GuestBook存在的安全漏洞及其危害,并给出一些临时的解决方案。   ★漏洞之一:泄露所有注册用户的账号和密码等信息   漏洞描述:由于ExGB GuestBook没有对存储注册用户信息的文本文件做任何的访问限制,而其文件名又是可预测的,因此,通过在地址栏输入:http://www.????.org/gbook/data/user.list,我们就可以获得所有注册用户的信息。   危害程度:泄露所有注册用户的账号,密码等所有信息,攻击者利用这些信息可以冒充留言本管理员对留言内容进行任意回复,修改,删除,甚至可能利用这些信息直接获得目标网站的控制权。   解决方案:   1.把这些数据文件改为比较难猜的名字。   2.控制对这些文件的访问,Apache下的典型配置样本如下:      order deny,allow   deny from all   allow from localhost   Options All   AllowOverride None      需要注意的是:目录“data”下的留言数据文件,即“.dat”文件,也可以被远程攻击者访问,通过分析这些数据,可以获得程序对用户输入的限制,为攻击者的进一步攻击提供信息。   ★漏洞之二:泄露超级管理员密码信息   漏洞描述:通过构造一个特殊的输入,我们可以获得超级管理员的密码,具体步骤为:   1.进入免费申请留言本页面。   2.用户密码和重复密码均输入“$pass”,留言本名,头部HTML或尾部HTML至少有一个输入“$pass”,其它随意输入。   3.进入你申请的留言本页面,可以看到超级管理员的明文密码。   这个过程的原理是:超级管理员的密码保存在程序的变量“$pass”中,超级管理员登录时是用户输入的密码和“$pass”变量中保存的密码进行比较。而多用户的情况下,程序需要载入一个“data/$user.php”文件,文件包含了该用户注册时的一些变量信息,其中包含变量“$pass”,目的是为了重新设置“$pass”的值。如果我们把“$pass”的值仍然设为“$pass”,实际上就是我们没有改变超级管理员的密码,这时的密码还是超级管理员的密码,再通过为其它可以在网页中显示的变量(如留言本名,头部HTMl和尾部HTMl)赋值为“$pass”,我们就能获得超级管理员的密码。   危害程度:泄露超级管理员的密码,利用这个密码,再加上超级管理员的账号(一般从站点信息很容易推测出来),攻击者可以获得超级管理员的权限,除了可以对留言内容做任意的回复,修改和删除外,还可以浏览所有注册用户的账号和密码等所有信息,同时也可能直接获得对目标网站的控制权。   解决方案:   过滤用户输入的“$”等特殊字符。   通过以上的分析可以看出,免费的东西总是有风险的。目前开发CGI程序的人大多数对安全知识一无所知或者知之甚少,因此他们开发的程序难免会存在或多或少的漏洞,我们在使用之前最好先分析一下它的安全性,然后再确定是不是采用它。这是个非常值得注意的问题,安全性那么脆弱的程序在国内流行了那么长时间,这难道不能说明一些问题吗?