【攻防世界】file_include

1.信息收集:

从题目及题目描述:直到文件包含漏洞,怎样读取到文件;

2.思路:

<?php
highlight_file(__FILE__);
    include("./check.php");
//php包含当前文件并执行指定的文件;
    if(isset($_GET['filename'])){
    //用于检查特定变量或数组键是否已设置且不为NULL的PHP函数;
        $filename  = $_GET['filename'];
        include($filename);
    }
?>
当包含include()函数时,PHP将在当前目录或PHP配置中指定的include_path中搜索文件check.php;如果找到该文件,将执行其中的代码,并使当前脚本中定义的任何变量或函数在其中可用。

1.找漏洞点;

这个参数filename,,用户可以通过这个参数找到漏洞;

1.当我使用filename=php://filter/read=convert.base64-encode/resource=check.php及用其他参数时被过滤了;

2.漏洞的本质:是对各种输入进行过滤,我们要绕过,不被过滤掉,找到flag;

先去了解各种过滤器:PHP: 可用过滤器列表 - Manual

1.当试用各种字符串过滤器时,显示:没有成功;

2.当试用各种转换过滤器时,用convert.base64-encode 和 convert.base64-decode和convert.quoted-printable-encode 和 convert.quoted-printable-decode过滤器时,显示:

当我试用:convert.iconv.*:             官方文档:convert.iconv.* ¶

php支持的编码格式(部分):                        官方文档:支持的字符编码 ¶ 

该 PHP 扩展支持的字符编码有以下几种:

  • UCS-4*
  • UCS-4BE
  • UCS-4LE*
  • UCS-2
  • UCS-2BE
  • UCS-2LE
  • UTF-32*
  • UTF-32BE*
  • UTF-32LE*
  • UTF-16*
  • UTF-16BE*
  • UTF-16LE*
  • UTF-7
  • UTF7-IMAP
  • UTF-8*

这个使用burp suite,去试每个字符编码格式:

1.进行拦截:

2.字符编码格式复制,并找到一种能绕过的编码组合:

设置payload:两组,把各种字符编码复制,选择一组,有明显返回的:

2.利用漏洞,试:

http://61.147.171.105:55206/?filename=php://filter/convert.iconv.UTF-8*.UTF-32*%20/resource=check.php

改变参数:flag.php,得到flag;

总结:发现这种漏洞没有那么明显,需要不断的去试,要有耐心;
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值