打开题目,一个搜索框,输入1搜索试试,根据结果,推测是find命令查询文件位置
查询flag,得到位置/flag
想办法读取/flag,尝试命令拼接执行,提示字符非法,看来是被过滤了,尝试各种方法无果,对网站进行目录扫描,得到www.zip
,下载读取源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?php error_reporting(0); $argv = $_GET["search"]; for ($i = 0; $i < strlen($argv); $i++) { if (($argv[$i] == '&') || ($argv[$i] == '>') || ($argv[$i] == '<') || ($argv[$i] == '(') || ($argv[$i] == ';') || ($argv[$i] == '|') ) {
if ($i == 0) { goto error; } if (($i == 1) && ($argv[0] == '\\')) { continue; } if (($argv[$i - 1] == '\\') && ($argv[$i - 2] != '\\')) { continue; } error: exit("Input contains prohibited characters!<br>"); } } echo "<h3>Search reslut:</h3><br>"; system("find / -iname " . $argv); ?>
|
发现过滤了;
等字符,但允许存在\;
,有些不知该如何进行下去,但是根据提示,查看find命令手册,发现find命令有一个参数-exec
可以对查找的文件进行命令操作,语法为-exec 'command' {} \;
,想要输出flag可以执行find / -iname flag -exec 'cat' {} \;
于是构造查询语句flag -exec 'cat' {} \;
,查询成功得到flag