AI 助教问 AI 助教
东方瑞通 · CISP-PTE

命令执行与管道符

命令执行漏洞指程序拼接系统命令未过滤,攻击者注入额外命令在服务器上执行;管道符用于拼接与连接命令。

考点精讲

  1. PHP 命令执行相关函数与语法:eval、assert、${}(PHP5 支持动态调用、PHP7 不支持)、preg_replace()、create_function()、shell_exec()。管道符:; 分号(顺序执行全部命令)、| 管道(左边输出作为右边输入)、& 后台(把命令放后台执行)、&& 逻辑与(左边成功才执行右边)、|| 逻辑或(左边失败才执行右边)。通配符 ? 可代替单个字母绕过过滤,如 /???/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 漏洞 命令执行与管道符

AI 助教

让 AI 助教带你深入学习,把你卡住的地方直接问它

随时为您答疑解惑

开始答疑