文件包含之LFI

0x00 含义&&类型

首先,PHP文件包含主要由这四个函数完成:

  • include()  //包含一些html模块文件

  • require()  //包含一些数据库,配置文件

  • include_once()  //只调用一次包含文件,多次调用就会报错

  • require_once()

当使用这4个函数包含一个新的文件时,该文件将作为PHP代码执行,PHP内核并不会在意该被包含文件是什么类型。所以如果被包含的是txt文件、图片文件、远程URL,也都将作为PHP代码执行。

include与require的区别在于:

1.include是当代码执行到它所在的行数是,它才会开始包含文件,并且如果文件加载错误,依然会向下执行代码。

2.require是只要当前程序执行它就会立刻包含文件,并且在加载文件错误的时候会停止运行并发出警告。

文件包含漏洞的类型分为:

1.本地文件包含(LFI)

2.远程文件包含(RFI)

当php.ini中,设置allow_url_include=On allow_url_fopen=On,即可执行远程代码。

 

0x01 包含本地目录文件

简单的漏洞代码示例

1 <?php
2     if($_GET['file'])
3     { include '$_GET['file']';}
4     else
5      include 'hello.php';  
6 ?>

 正确页面:

 

包含当前目录中flag.php文件:

包含上级目录中的某个文件:

 

 

既然这样,我们就可以使用./(当前目录)、../(上级目录)对整个目录进行遍历,也就可以获取敏感的文件

 

0x02 PHP伪协议以及其他封装协议的利用

php各种伪协议参考:http://php.net/manual/zh/wrappers.php.php

1.php://input

 php://input可以读取没有处理过的POST数据,不依赖于特定的php.ini指令。当enctype=”multipart/form-data” 的时候 php://input 是无效的。

简单举例如下:

 

 2.php://filter

php://filter可以说是是最经常使用的一个伪协议,用它在没有特殊情况下(我没遇到过TnT)可以进行任意文件的读取。

就拿最近SWPU CTF中学长出的一道题来举例:

题目地址为:http://39.106.13.2/web2/file.php?file=index

在url中发现file=index,有此猜想可能有本地包含获取网页源码,所以尝试直接用php://filter读取index源码

这里用base64加密了index.php的源码,直接解密就得到了源码。

exp: ?key=php://filter/read=convert.base64-encode/resource=xxx.php

 

3.zip协议&&phar协议

zip协议:http://php.net/manual/zh/wrappers.compression.php

利用phar://协议特性可以在渗透过程中帮我们绕过一些waf检测(此方法使用要php>5.3.0).

关于zip://

zip://test.jpg#dir/test.php

先新建一个test.php,里面写个phpinfo,然后压缩成.zip,然后把zip的名字改成test.jpg后把这个jpg文件上传上去 然后使用zip协议包含.

 

 phar利用方法与zip协议类似。

0x03 一些简单的绕过姿势

有些程序员为了防止本地包含漏洞,通常会编写一些这样的代码:

 

<?php
    include $_GET['page'].".php";
  
?>

 

1. 00截断

(1) /etc/passwd%00,访问文件

(2)%00目录遍历

2. 使用长目录截断

/etc/passwd/././././././.[…...]/./././././.
(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)

 

0x04 相关学习资料

1.文件包含漏洞小节

https://www.cnblogs.com/iamstudy/articles/include_file.html

2.论PHP常见的漏洞

http://www.anquan.us/static/drops/papers-4544.html

3.php伪协议

http://blog.csdn.net/Ni9htMar3/article/details/69812306?locationNum=2&fps=1

4.包含日志文件getshell

https://www.cnblogs.com/my1e3/p/5854897.html

 

 

个人的第一篇博客,希望自己在安全的路上越走越好,越走越远

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2017-11-08 23:12  c1e4r  阅读(3369)  评论(0编辑  收藏  举报