原理
开发者为了方便网站使用,将多个网站都需要用到的代码写到一个文件中,在其他网页需要这串代码时能够直接将这个文件包含进去而不是重新写一遍代码,但是在调用该文件时,没有对调用的代码和字符做限制导致攻击者能够任意调用文件,利用漏洞执行文件中的代码。
文件包含分为本地包含和远程包含
本地包含
所能包含的只能够时自己本网站(电脑中)有的文件,没有的就不能够包含。
无限制
http://192.168.1.9/1.php?baby=1.txt (正常的文件包含)
http://192.168.1.9/1.php?baby=../../../../../../1.txt 越级包含
有限制
http://192.168.1.9/1.php?baby=1.txt %00 (截断) 条件:php版本要<5.3.4 且 magic_quotes_gpc = off
长度截断:windows长度需要大于256;Linux大于4096
远程包含
能够利用漏洞包含我们自己创建的网站,由于是自己创建的网站,所以可以将写入任意代码的文件包含执行,这样就说明该漏洞风险极大了。条件:allow_url_include =On
有限制
? %20 %23
伪协议
用法参照地址:php伪协议 - 看不尽的尘埃 - 博客园
一开始测试时先看一看是否时文件中的参数,然后在试一试能否包含除原网页之外的网站
如:xxx.php?file=www.huaiwar.com 可以试一试能否 xxx.php?file=www.baidu.com
再则查看目标网站的CMS,通过历史漏洞来发现
总体来说就是这个漏洞可以将.txt或者其他后缀名的包含在.php后缀等脚本语言中,从而将txt中的代码当作脚本语言来执行。