ctf show web 入门43
打开靶场代码逻辑如下:
if(!preg_match(“/\ |/|cat/i”, $c))
它过滤了三个关键内容:
\ (空格):你不能直接在命令中使用空格(例如 ls -l 或 cat flag 都会失败)。
/ (正斜杠):你不能使用路径符号(例如 /flag 这种绝对路径会被拦截)。
cat:读取文件的常用命令被禁用了。/i 表示不区分大小写,所以 CAT、caT 也不行。
/dev/null 2>&1:依然存在,所以还是需要用分隔符截断,且不能看到直接回显
我们可以尝试使用换行符%0a强制换行,让重定向的内容在下一行不再影响上一行的内容
我们先尝试查看当前目录下有什么文件构造flag为:?c=ls%0a
发现了当前目录下包含的文件flag.php,所以我们尝试构造payload来读取该文件
我们发现cat函数被禁用了但是有很多cat命令过滤
有很多命令可以替代 cat 来读取文件内容:
tac:反向列出内容。
more / less:分页显示。
head / tail:查看开头或结尾。
nl:带行号列出内容(常用)。
vi / vim:虽然是编辑器,但在某些 system 调用中也能读取。
sort:排序显示。
grep:搜索读取。
我们尝试使用tac来反向列出内容
构造的payload为:?c=tac flag.php%0a
得到flag
