bash通配符与命令执行

关于bash通配符有以下几个

?是匹配一个任意字符.也就是说如果我们平时执行的是cat /etc/passwd可以用?来替代

例如:

root@bee-box:~# which ls
/bin/ls
root@bee-box:~# echo /???/?s
/bin/ls /bin/ps /sys/fs
root@bee-box:~#

可以用/???/?s来取代.类似的cat也是可以用/???/??t或者/???/c?t等来查找到.如果在绕waf的过程里面应该是可以直接拿出来用的.

root@bee-box:~# echo /???/c?t
/bin/cat
root@bee-box:~# echo /???/??t
/bin/cat /dev/net /etc/apt /etc/opt /etc/rmt /var/opt

试试常见的cat /etc/passwd
我们用/???/??t /???/??ss??来替换

cat /etc/passwd

/???/??t /???/??ss??

可以看到达到了同样的效果

在安恒月赛里出现过一道题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
include 'flag.php';
if(isset($_GET['code'])){
$code = $_GET['code'];
if(strlen($code)>35){
die("Long.");
}
if(preg_match("/[A-Za-z0-9_$]+/",$code)){
die("NO.");
}
@eval($code);
}else{
highlight_file(__FILE__);
}
//$hint = "php function getFlag() to get flag";
?>

字母和数字都被过滤了,我们就可以利用上面的特性

/???/??? => /bin/cat

详细的wp在安全客:https://www.anquanke.com/post/id/160582?from=singlemessage