Level 0
- 这关 Flag 怎么获取就不多说了, 开头显示的两个就是
- 接下来对靶场的源码解释一下
- 前面输出的两句包含 Flag 的先跳过, 后面再说怎么来的
- 从
<?php
后开始看- 首先是
探姬
写的注释, 也是提示, 请务必自己仔细阅读(后面就不对此强调了)- 当于是一步步引导如何完成这些关卡
- 理论上就应该看着些提示, 然后自己去学习相关内容, 就有能力完成题目~~(而不是来看别人写的WP)~~
- 然后就定义了
$code
,$bash
两个变量, 然后就通过eval()
执行$code
变量的内容, 然后通过system
执行$bash
的内容 - 先来看
$code
和eval()
这两个语句$code
是一个字符串变量- 其中包含着两个语句
- 一个是
include(flag.php);
, 将flag.php
的文件内容包含到本文件内容中, 并执行- 但是这里并不能看出
flag.php
内容是什么 - 大概是定义了
$flag
这个变量
- 但是这里并不能看出
- 另一个语句就是
echo 'This will get the flag by eval PHP code: '.\$flag;
- 首先是
echo
, 这个语法的作用是把后面的字符输出到前端页面 - 在
echo
后跟着是'This will get the flag by eval PHP code: '.\$flag;
字符串- 把他们进行拆分一下
'This will get the flag by eval PHP code: '
- 这个是个常规的字符串
.
- 这个是 PHP 中的字符串连接符, 将字符串与其他变量进行连接
- 并自动进行转换
\$flag
- 这里的
\
对$flag
变量进行转义, 使$flag
变量在这里是$flag
- 而非这个变量的值
- 这里的
- 把他们进行拆分一下
- 首先是
- 接着
$code
变量会被传递给eval()
执行
- 接着来看
$bash
和system()
这两个语句- 与
eval()
不同的是system()
执行的是系统命令行的 Bash 指令, 而非 PHP 语句 - 所以
$bash
变量中, 先用echo
输出提示, 然后再使用cat /flag
获取根目录下flag文件中的内容- 或许这里会有疑问
echo
不是 PHP 的语法吗,system
执行的不是 Bash 命令吗, 为什么这里可以用- 其实只是刚好同名罢了,
echo
在 PHP 和 Bash 中都存在
- 其实只是刚好同名罢了,
- 或许这里会有疑问
- 与
- 最后在通过
highlight_file(__FILE__);
- 使 index.php 的代码高光显示, 并自然而然地衔接在上文输出之后
- 首先是
- 或许看完这么多, 会对后续的 PHP 代码理解有所帮助吧