知识点
- Linux读取文件指令
- 星号通配符
- 文件名作为指令执行
解题思路
先审计代码
猜测是RCE读取当前php,要求指令长度小于4
要小于4,只能用nl读取
Linux中可以将文件名作为函数和参数,通过星号通配执行
先新建一个名称是nl的文件作为指令
?1=>nl
将右尖括号左侧的内容写入右侧文件,因此相当于新建了一个叫nl的空文件
接着读取当前的php,我们预期是执行nl xxx.php
,这里由于不知道这个php的名称,无法执行
?1=*>z
这里的操作是:
- 根目录下有两个文件:新建的
nl
和当前的xxx.php
- ✳️号代表字符串
nl xxx.php
,将当前目录下所有文件的名字列出来,(试试echo *
就知道了 - 将其写入一个空文件
z
- 访问该文件就会自动执行字符串
nl xxx.php
最后,再次访问http://(环境的url)/z
时,可下载php到本地,包含了flag