首页 > Web开发 > 详细

bugku_web8

时间:2021-02-08 16:42:47      阅读:18      评论:0      收藏:0      [点我收藏+]

题型:php语言的文件包含相关语法

打开题目,发现是一段php代码:

<?php
    include "flag.php";
    $a = @$_REQUEST[‘hello‘];
    eval( "var_dump($a);");
    show_source(__FILE__);
?>

代码知识补充:

  1. @:错误抑制符:
    @在PHP中叫错误抑制符,也就是用来屏蔽错误的。
    @之后的表达式如果出错误,是不提示错误信息的,如果不加@出错之后一般是会在浏览器中显示错误信息,加上之后浏览器中就不显示错误信息了。
  2. $_REQUEST是用来收取表单数据的超级全局变量。可以通过$_REQUEST["name"]来访问表单值。
  3. eval()函数在php中的作用是将参数字符串作为php代码运行。
  4. show_source()是highlight_file() 的别名,使用show_source()时整个文件内容都会被显示。
  5. __FILE__是魔术常量,是文件的完整路径和文件名。如果用在被包含文件中。则返回被包含的文件名。
  6. var_dump():将参数的变量信息详细打印出来

代码分析:

代码首先将flag文件包含进来。将收集到的名为“hello”的表单信息赋值给$a,然后将a的内容作为代码执行。

payload:

  • 法一:
    ?hello=show_source(‘flag.php‘); 记得文件名要用单引号括起来。这样网页会直接显示flag.php的源码,拿到flag
  • 法二:
    ?hello=file(‘flag.php‘); 这样文件的内容也会被打印出来。顺带说一句php的file() 函数把整个文件读入一个数组中,数组中的每个元素都是文件中相应的一行,包括换行符在内。

bugku_web8

原文:https://www.cnblogs.com/csszl/p/14388886.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!