haidong 发表于 2010-2-24 13:35:50

PHP文件上载暴露任意文件

<br>                   这是一个值得重视的问题,但并不如文章中说的那么严重,只是希望各位使用php上传文件是留心这个问题。   <BR><BR>【来源】   <BR>SecureRealityPtyLtd.SecurityAdvisory#1(SRADV00001)   <BR>http://www.securereality.com.au,2000-09-04   <BR><BR>【影响系统】   <BR>几乎任何提供文件上载能力的PHP程序都受影响。   <BR><BR>【简介】   <BR>PHP是一个功能很强的web脚注语言,已经广泛流行。它有一个特性就是易于处理从远程浏览器上载来的文件。这个功能运用得非常普遍,特别是在图片画廊、拍卖和web邮件风格的应用中。   <BR><BR>PHP处理文件上载的方法容易使PHP应用程序工作于服务器上的任意文件,而不是用户上载来的文件。这通常会引导远程攻击者读取服务器上的任何文件,而它们通常只能被运行web服务器(一般是’nobody’)的用户访问。   <BR><BR>【影响】   <BR>1.暴露文件   <BR>2.经常会泄漏PHP代码   <BR>3.经常会泄漏数据库认证数据   <BR>4.可能使机器崩溃   <BR><BR>【细节】   <BR>当文件上载给一个PHP脚本时,PHP接收文件,赋予它一个随机名称,然后把它放在一个配置好的临时目录中。上载文件的信息将传递给PHP脚本,内容是4个全局变量。假设信息的文件域叫做’hello’,那么4个变量将会是:   <BR>$hello=临时文件名(例如’/tmp/ASHDjkjbs’)   <BR>$hello_name=当文件位于远程计算机时的名称(例’c:\hello.tmp)   <BR>$hello_type=文件的Mime类型(例如’text/plain’)   <BR>$hello_size=上载文件的大小(例如2000字节)   <BR><BR>临时文件会在脚本执行结束时自动删除,因此PHP脚本通常需要把它移到其它地方。例如,它可能会把文件拷贝到一个MySQL数据库之中。   <BR><BR>问题实际上存在于PHP缺省的行为。除非特意进行另外的配置(通过php.ini文件里的register_globals=Off),否则,提交时表格域指定的值在PHP脚本中会自动定义为全局变量。   <BR><BR>如果有一个表,它的输入域是:   <BR>&lt;inputname="test"&gt;   <BR>那么当PHP脚本被调用来处理表格输入时,就会设置全局变量$test。这是一个严重的安全弱点。问题非常简单,通过用户定义的输入搅乱全局名字空间,就会使环境不稳定。   <BR><BR>回到前面提到的示例,我们可以使用如下的表格输入创建四个变量$hello,   <BR>$hello_name,$hello_type,$hello_size:   <BR><BR>这就会引导PHP脚本工作于口令文件,结果通常是将它暴露给攻击者。   <BR><BR>【补丁】   <BR>目前没有。   <BR>建议改变php.ini,设置register_globals为off,track_vars为on。                   <br><br>

daneo 发表于 2020-6-15 20:57:06

{:6_264:}
页: [1]
查看完整版本: PHP文件上载暴露任意文件