21、命令执行

文章目录

  • 一、命令执行概述
    • [1.1 基本定义](#1.1 基本定义)
    • [1.2 原理](#1.2 原理)
    • [1.3 两个条件](#1.3 两个条件)
    • [1.4 命令执行漏洞产生的原因](#1.4 命令执行漏洞产生的原因)
    • [1.5 管道符号和通用命令符](#1.5 管道符号和通用命令符)
  • 二、远程命令执行
    • [2.1 远程命令执行相关函数](#2.1 远程命令执行相关函数)
    • [2.2 远程命令执行漏洞的利用](#2.2 远程命令执行漏洞的利用)
  • 三、系统命令执行
    • [3.1 相关函数](#3.1 相关函数)
    • [3.2 系统命令执行漏洞利用](#3.2 系统命令执行漏洞利用)
  • 四、命令执行漏洞防御

一、命令执行概述

1.1 基本定义

命令执行漏洞是指攻击者可以随意执行系统命令,分为远程命令执行 (远程代码执行)和系统命令执行两类。

1.2 原理

应用程序有时需要调用一些执行系统命令的函数,如PHP中的systemexecshell_execpassthrupopenproc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

1.3 两个条件

  • 用户能够控制函数的输入
  • 存在可以执行代码或者系统命令的危险函数

1.4 命令执行漏洞产生的原因

  • 由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交而已构造语句,并提交服务器执行。
  • 命令注入攻击中,web服务器没有过滤类似systemevalexec等函数,是该漏洞攻击成功的主要原因。

1.5 管道符号和通用命令符

(1)Linux

  • <command 1>;<command 2>命令1执行完,再执行命令2。
  • <command 1> | <command 2>是管道符,命令1的结果作为命令2的输入,直接执行命令2,显示命令2的执行结果。
  • <command 1> || <command 2>当命令1执行出错时,执行命令2。

(2)Windows

  • <command 1> & <command 2>:命令1是否假,都执行命令2。
  • <command 1> && <command 2>:命令1为假直接报命令1的错误,命令2不会被执行。
  • <command 1> | <command 1>:直接执行命令2,显示命令2的执行结果。
  • <command 1> || <command 2>当命令1执行出错时,执行命令2.

(3)通用命令符

  • <command 1> | <command 1>:命令1的结果作为命令2的输入,直接执行命令2,显示命令2的执行结果。
  • <command 1> & <command 2>:命令1和命令2之间不相互影响;
  • <command 1> && <command 2>:命令1为假直接报命令1的错误,命令2不会被执行。

二、远程命令执行

2.1 远程命令执行相关函数

在PHP中,允许命令执行的函数有:eval()assert()preg_replace()call_user_func()$a($b)。如果页面中存在这些函数并且对用户的输入没有做严格的过滤,那么就有可能造成远程命令执行漏洞。

2.2 远程命令执行漏洞的利用

(1)?a=@eval($_POST[666]); //一句话木马

(2)?a=print(_FILE_); //获取当前绝对路径

(3)?a=var_dump(file_get_contents('<file_path>')); //读取文件

(4)?a=var_dump(file_put_contents($_POST[1],$_POST[2])); //写shell

三、系统命令执行

3.1 相关函数

允许系统命令执行的函数有:system()exec()shell_exec()passthru()popen()反引号

3.2 系统命令执行漏洞利用

(1)?a=type <file_path> //查看文件

(2)?a=cd //查看当前绝对路径

(3)?a=echo "<?php phpinfo();?>" > <file_path> //写shell

四、命令执行漏洞防御

  • 尽量不要执行外部命令
  • 使用escapeshellarg函数来处理命令参数,escapeshellarg函数会将任何引起参数或命令结束的字符转义;
  • 使用safe_mode_exec_dir指定要执行程序的主目录(php.ini),该函数会将要使用的命令提前放入此路径内。
相关推荐
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
20242817李臻2 小时前
20242817李臻-安全文件传输系统-项目验收
数据库·安全
DevSecOps选型指南11 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
ABB自动化11 小时前
for AC500 PLCs 3ADR025003M9903的安全说明
服务器·安全·机器人
恰薯条的屑海鸥11 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
阿部多瑞 ABU12 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
moongoblin15 小时前
行业赋能篇-2-能源行业安全运维升级
运维·安全·协作
Fortinet_CHINA15 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
网络·安全
这儿有一堆花16 小时前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全
饮长安千年月19 小时前
JavaSec-SpringBoot框架
java·spring boot·后端·计算机网络·安全·web安全·网络安全