[ctf]命令执行漏洞 (I)
命令执行漏洞原理
命令执行漏洞,就是指用户通过浏览器或其他辅助程序提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,用户可以提交恶意语句并交由服务器执行。
在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
相关函数
eval函数:
assert函数:
PHP 5assert ( mixed $assertion [, string $description ] ) : bool
PHP 7assert ( mixed $assertion [, Throwable $exception ] ) : bool
PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE。
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。assertion 是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包含 assertion 表达式。
使用assert函数时,传入的字符串最好为函数包裹,否则可能不能执行。
call_user_func函数:
call_user_func(callable c a l l b a c k ∗ ∗ , m i x e d ∗ ∗ callback**, mixed ** callback∗∗,mixed∗∗parameter = ?, mixed $.… = ?): mixed
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
但有许多函数不能调用
使用is_callable函数可以检测是否支持回调
call_user_func_array函数
用法与call_user_func函数类似,区别在于传入的参数的数组的形式
create_function函数
create_function ( string $args , string $code ):字符串
args:函数参数
code:功能代码相当于创建一个函数的作用
preg_replace函数
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int & $count ]] )
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
$count: 可选,为替换执行的次数。
但如果未匹配到字符,则不会执行
array_map函数:
array_map(myfunction,array1,array2,array3…)
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
也可以直接传入数组
usort函数:
usort() 通过用户自定义的比较函数对数组进行排序。
使用方法一:
可以传入多个数组型的参数,但你的参数必须大于1,且你需要执行的语句要写在第一个参数,否则无法执行。
使用方法二:
uasort函数:
和usort函数类似;
php代码直接执行:
推荐阅读
-
重现CVE-2023-33246 命令执行漏洞研究与实操解析
-
` 自动填充为 `cp test.txt`
- 文件和目录名补全:输入文件名首字母后按 Tab,如 `vi ed
` 显示可用的编辑器列表 - 查看命令帮助: - 使用 `man` 命令配合具体命令名获取详尽帮助,如 `man ls` 或者 `man grep --help`"> 在 Linux 中操作指令指南 - 基本构造与种类 - 指令组成: 1. **主指令 + 选项 + 参数**: 如 `ls -l /home`,`main-action option object` - 内置指令:系统预装的 shell 功能,如 `cd`, `pwd` - 外部指令:独立可执行文件,直接用文件名当作命令,如 `rm`, `mv` - **选项与参数**: - 选项:定制命令行为, `-l` 或 `--long-help` - 短选项:简写形式,例如 `-v` 和 `-V` 可能合并使用 - 长选项:详细描述的选项,如 `--version` 或 `--human-readable` - 参数:命令作用的目标,如 `ls` 对 `/home` 目录的操作 - **指令应用**: - 不同指令需要不同的参数 - 选项可带或不带参数,比如 `grep -i "keyword"` (忽略大小写搜索) - 参数间通常用空格分隔,如 `cp file1 file2 file3` - **中断与完成提示**: - 终止当前指令:按下 Ctrl+C - **自动完成**: - 输入部分命令关键词后,按 Tab 键补全命令,如 `cp ta
` 自动填充为 `cp test.txt` - 文件和目录名补全:输入文件名首字母后按 Tab,如 `vi ed ` 显示可用的编辑器列表 - 查看命令帮助: - 使用 `man` 命令配合具体命令名获取详尽帮助,如 `man ls` 或者 `man grep --help` -
HC3存在可执行任意命令的安全漏洞
-
实操验证:Nginx Web管理界面发现可进行远程命令执行的前端漏洞 - 验证过程第四步
-
Nginx Web管理界面的运行CMD命令远程执行前端漏洞
-
Nginx Web界面发现可被利用的前端远程命令执行漏洞
-
命令执行漏洞
-
命令执行漏洞利用和旁路摘要
-
学习笔记 - 命令执行漏洞
-
命令执行漏洞