BugkuCTF-Web-本地包含

虽然这道题目在Bugkuctf给的链接已经无法进入,但是这道题涉及的知识点还是值得大家花时间来学习的。

1. 代码审计部分

<?php
    include "flag.php"; 
    $a = @$_REQUEST['hello'];
    eval("var_dump($a);");
    show_source(__FILE__);
?>
  • include “flag.php”; 从本地中包含flag.php文件。
  • a = @ a = @ a=@_REQUEST[‘hello’]; 一个超全局变量,可以接收_get,_post,_cookie发送的数据(为了方便起见,我们用_get来发送数据)
  • eval(“var_dump($a);”); eval函数,如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句;简单来说,就是将引号中字符串当作php代码
  • var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.
    此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
    这里是将变量a的值打印到界面中。
  • show_source(FILE);高亮显示文件中的代码。

2. 知识点补充
那么什么是文件包含呢?
简单来说,就是一段提前写好的代码,在开发中为了避免写出冗余的代码,开发人员会提前设计好一部分会被重复利用的代码。文件包含就是你在开发中调用了这一部分函数。


在这里插入图片描述
3. 思路分析
所以,当看到include函数的时候就要考虑本地包含漏洞这以方面的内容。题目中的这段代码明明调用了flag.php但是却没有起到任何的效果,这就意味着flag文件中的内容很有可能被注释掉了,因此我们要想办法将它还原出来,这么一想题目的思路就很清晰了。

方法一:
直接将flag.php文件的内容读入参数hello中,然后让var_dump()函数打印出来。
所以可以将payload写成:?hello=file(“flag.php”)

方法二:
最基本的注入引号闭合的思路,可以利用eval函数的特性来执行这一漏洞
payload写成:?hello=3);show_source(%27flag.php%27);//
这样eval函数执行的语句就变成了:var_dump(3); show_source(%27flag.php%27);
后面的内容被//注释掉了。执行后就得到了flag.php中的源代码,在里面成功找到flag。(这张图是网上截的,大致的形式就是这样的)。
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值