0.题前学习
你知道什么是RCE代码执行漏洞吗?
RCE(Remote Code Execution),即远程代码执行,是一种安全漏洞,允许攻击者通过远程方式在目标系统上执行任意代码,也可以参考这个帖子。
我们创建实例,可以看到这个画面:
这是一个在线计算器。除去HTML代码固定格式的部分,我们注意到这个片段:
<?php
if(isset($_GET['calc'])){ # Use the isset() function to check whether the calc parameter exists, so as to prevent errors caused by calling non-existent variables.
$calc = $_GET['calc'];
eval('echo '.$calc.';');
}
echo '<hr>';
highlight_file(__FILE__); #It is this line of code that displays the source code.
?>
这段PHP代码主要实现了两个功能:一是接收并处理通过 GET 方式传递过来的名为 calc 的参数,尝试对其内容进行计算并输出结果;二是在页面上显示当前 PHP 文件自身的源代码。
关于PHP语言的更多学习,可以参考这个帖子。PHP中文网的教程同样可以帮助你学习PHP语言。
我们解析这个代码:
isset($_GET['calc'])
这个语句于判断通过 GET 方法传递过来的 calc 参数是否存在。
如果 calc 参数存在,那么就会将其值赋给变量 $calc,随后进行计算。
$calc($calc = $_GET['calc'];)
我们注意到这串代码里有一个问题。
这代码使用了 eval() 函数。该函数的作用是把传入的字符串当作 PHP 代码来执行。在这里,当用户输入”2+3“时,程序会把它当作PHP代码执行,输出5。
这给了我们可乘之机。我们打开Hackbar插件,点击”Load URL“,然后直接在后面加入 “calc=system(‘ls /’)”。这个操作直接调用了“ls”命令。ls ,是类Unix系统中的指令,用于列出文件和目录。
你可能会认为这个操作是用GET方法向calc参数传递某些信息,但这个想法是错误的。事实上,这里是直接利用了网站所展现的RCE漏洞,传入了system(‘ls /’)的恶意命令。(这里需要 (‘’) 把命令括起来。)
这是Linux系统的基础命令。大部分使用PHP语言编写的网站都有Linux内核。
Linux的命令是每个网安学习者的必学项目,这里给出两个参考帖子:
我们会看到这样的画面:
这是网站的系统目录。我们在这里不细究,有兴趣的话可以参考这个贴子。
我们注意到了两个以“flag”命名的文件。一个是“flag.sh”,一个是“flag.txt”。我们使用另一个命令:cat。它的主要作用是用于查看和连接文件。
我们在下方的搜索框内把“ls /”改成 “cat /flag.sh”。
(斜杠是标明文件地址的做法,因为这里是根目录,所以我们在斜杠后不用输入任何内容。)
得到了这样的结果:
(如果你确实做到了这里,可以借助AI进行分析。)
这是一个脚本文件。其内容是是利用 sed 命令来进行文本替换操作,目的是将文件 /flag.txt 中的特定字符串 flag{testflag} 替换为环境变量 GZCTF_FLAG 的值,不过后面又将 GZCTF_FLAG 环境变量设置为空字符串(export GZCTF_FLAG=“” )。所以我们可以知道,应该去找flag.txt的内容。
我们把“cat /flag.sh"改成 “cat /flag.txt”,得到这样的结果:
所以,本题的flag就是
Redrock{ca1fb146-745d-400f-b9d4-d82d633af88b}
学到了什么?
- 什么是RCE代码漏洞;
- Linux基础命令之ls与cat的应用;
- 怎么用Hackbar向漏洞网址传递命令;
对于前期学习而言,AI是非常有用的工具。我们可以把看不懂的代码交给AI阅读。但一定要注意:要利用而不是依赖AI。