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),该函数会将要使用的命令提前放入此路径内。
相关推荐
嘉里蓝海5 小时前
我在嘉顺达蓝海的安全日常
安全
2301_780789665 小时前
渗透测试真的能发现系统漏洞吗
服务器·网络·安全·web安全·网络安全
嘉里蓝海5 小时前
我在嘉顺达蓝海的安全坚守
安全
你的人类朋友7 小时前
认识一下Bcrypt哈希算法
后端·安全·程序员
Coovally AI模型快速验证11 小时前
基于YOLO集成模型的无人机多光谱风电部件缺陷检测
人工智能·安全·yolo·目标跟踪·无人机
夏天的风9913 小时前
本地部署PLM系统,如何用 ZeroNews 实现远程访问?
安全·远程工作
wanhengidc13 小时前
高性价比云手机挑选指南
运维·网络·安全·游戏·智能手机
拉法豆粉15 小时前
三方软件测试可移植性测试哪些内容
数据库·安全
午夜游鱼17 小时前
Go 泛型实战:一行代码封装 sync.Pool,性能与安全兼得
开发语言·安全·golang
半桔19 小时前
【Linux手册】信号量与建造者模式:以 PV 操作保证并发安全,分步组装构建复杂对象
linux·运维·安全·建造者模式