跳转至

每日一题 —— [PolarCTF]简单rce

题目地址:https://www.polarctf.com/#/page/challenges

打开观察代码,发现 eval 函数,并对传入字符串进行了简单的过滤。直接给出最后的 payload:

?sys=echo(`c\at\t/flag`);

注意最后的还要提交一个 yyds=666 的 POST 请求。

现在来解析一下 payload:

首先看到 echo() 函数。这里没有过滤括号和 echo 也没有过滤反引号,所以 echo(`cmd`) 就可以直接执行系统命令。

然后看到反引号里面,我们直接输入 ls 可以发现能执行命令。但是他过滤了空格,因此我们需要使用 \t 。这个符号会在 php 执行过程中被转义成制表符,但是不会转义 \a 。所以我们的 php 会执行 c\at /flag 命令。

而到了 bash 里面,反斜杠是完全没有影响的,除非反斜杠后面跟着的是空格、引号或是另一个反斜杠。所以这个 payload 就正常执行了 cat /flag

最后给出另一个 payload, 更加简单,原理就是重定向。

?sys=echo(`c\at</flag`);

文章热度:0次阅读