考点精讲
记忆技巧
; 全执行、| 管道、& 后台
&& 成功才执行、|| 失败才执行
/???/c?t 匹配 /bin/cat 用 ? 绕过滤
&& 成功才执行、|| 失败才执行
/???/c?t 匹配 /bin/cat 用 ? 绕过滤
常见误区
- 混淆 &&(左边成功才执行)与 ||(左边失败才执行)
- 忽略通配符 ? 在绕过过滤中的作用
- 以为只有 shell_exec 一个危险函数——eval、assert、${}、preg_replace、create_function 等同样危险
真题思路
- 【示例】 在命令执行场景中,若需「左边命令执行失败时才执行右边命令」,应使用的连接符是()
; | && ||
答案:D
解析:; 是顺序全执行,| 是管道,&& 是左边成功才执行右边,|| 是左边失败才执行右边,故选 D。
常见问题
Q:; 和 | 有什么区别?
A:; 分号表示顺序执行,前后所有命令都会执行;| 管道符表示把左边命令的输出作为右边命令的输入。
Q:&& 和 || 执行条件分别是什么?
A:&& 逻辑与,左边命令成功才执行右边;|| 逻辑或,左边命令失败才执行右边。
Q:PHP 中危险函数有哪些?
A:eval、assert、${}(PHP5 支持、PHP7 不支持)、preg_replace()、create_function()、shell_exec() 等。
Q:通配符 ? 如何用来绕过过滤?
A:? 可代替单个字母,如 /???/c?t 可匹配 /bin/cat,从而在关键字被过滤时用通配符替代字母来执行命令。
相关知识
教材出处:第4章 Web 漏洞 命令执行与管道符