代码审计——命令执行详解

news/2024/11/8 2:56:25/

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓

    • 01 漏洞描述
    • 02 审计要点
    • 03 漏洞特征
    • 04 漏洞案例
    • 05 修复方案

01 漏洞描述


命令注入是指因为系统使用了可以执行命令的危险函数,但是调用这些函数的参数可控,并没有做过滤或过滤不严格,使攻击者可以通过构造特殊命令字符串的方式将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,来非法获取数据或者网络资源。

简单来说,就是系统使用可执行命令的函数,调用这些函数的参数被被攻击者控制,参数过滤不严,造成攻击者直接实施攻击。

在这里插入图片描述



02 审计要点

命令执行漏洞发生的根本原因是"用户可控的"、”未经净化“的数据直接作为可执行命令函数的参数,造成攻击者直接实施攻击。

1、参数是否用户可控,如用户输入的外部数据是否拼接到可执行命令函数的参数内?

2、是否配置了全局过滤器?检查过滤器的配置,是否所有命令的执行都经过过滤器处理,过滤器的过滤规则是否符合安全要求?

03 漏洞特征

Java

String btype = request.getParameter("inputparam");
String cmds[] = {"cmd.exe","/K","\"C: &&del C:\\r2.txt"+btype+" &&del C:\\r1.txt \""};
System.Runtime.getRuntime().exec(cmds);

此时cmd.exe使用了/K参数,将后续传入的参数用户命令执行,这里拼接的参数从前段中获取,对参数未作任何过滤,导致命令注入。

PHP

$arr = explode("&",$_COOKIE["USER"]);
//--验证cookie。
for($i=0;$i<count($arr);$i++)
{if(ereg("^SKIN=(.*)$",$arr[$i],$reg)){$skin = trim($reg[1]);}if(ereg("^UID=(.*)$",$arr[$i],$reg)){$uid  = trim($reg[1]);}if(ereg("^DOMAIN=(.*)$",$arr[$i],$reg)){$domain  = trim($reg[1]);}if(ereg("^TOKEN=(.*)$",$arr[$i],$reg)){$token  = trim($reg[1]);}
}
$part = $_GET['s'];
//$uid = "support";
//$domain = "**.**.**.**";
$users = readAddress($uid, $domain);

从上述代码看到代码直接从cookie中获取参数USER,然后赋值给uid和domain,接着看看函数readAddress($uid, $domain)究竟做了什么

function readAddress($uid,$domain){$binary = array();$userDir = getUserDir($uid,$domain);$addressDir = trim($userDir, "\n\r ")."/Profile/alias.individual";if(!is_file($addressDir)) return false;$fp = fopen($addressDir, "r");if(!$fp){ echo "打开地址薄失败";exit;}while(false != ($content = fgets($fp, 568))){$binary[] =unpack("a20nick_name/a40email/a40name/a60h_street_address/a30h_city/a30h_province/a8h_zip/a20h_country/a16h_phone/a30c_company/a60c_street_address/a30c_city/a30c_province/a8c_zip/a20c_country/a16c_phone/a16pager/a16cellular/a16fax/a20icq/a30other/a5b_year/a3b_month/a3b_day",$content);}//var_dump($binary);return $binary;
}

看到函数内,uid和domain又进入了函数getUserDir( u i d , uid, uid,domain),这边继续跟进getUserDir

function getUserDir($uid, $domain) {$handle = popen("/var/eyou/sbin/hashid $uid $domain", 'r');$read = fread($handle, 2096);pclose($handle);return $read;
}

观察到最后uid和domain进入了popen $handle = popen(“/var/eyou/sbin/hashid $uid $domain”, ‘r’);这里uid和domain没有经过任何过滤直接进入了命令,导致任意命令执行。

04 漏洞案例

在这里插入图片描述

针对代码中编写的命令执行语句,那么可通过搜索“Runtime.getRuntime().exec”直接定位漏洞代码,然后根据数据流的过程,逐步向上回溯,定位到用户可控参数。

String btype = request.getParameter("inputparam");
String cmds[] = {"cmd.exe","/K","\"C: &&del C:\\r2.txt"+btype+" &&del C:\\r1.txt \""};
System.Runtime.getRuntime().exec(cmds);

当服务器后端调用Runtime.getRuntime().exec的过程为以上逻辑时,存在系统命令注入漏洞,漏洞验证举例如下

在这里插入图片描述

05 修复方案


1、所有需要执行的系统命令,必须是开发人员定义好的,不允许接收用户传来的参数,加入到系统命令中去。任何一个执行系统命令的代码,都必须经过安全工程师确认。

2、执行代码的参数或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户只能提交“1、2、3”参数,代表相应代码。


http://www.ppmy.cn/news/429990.html

相关文章

【汤4操作系统】深入掌握操作系统-文件管理篇

第六章 文件管理 文件 数据项&记录&文件 数据项分为&#xff1a; 基本数据项&#xff1a;描述对象的某些属性&#xff0c;例如学生的年龄&#xff0c;姓名学号等组合数据项&#xff1a;由若干个基本数据项组合而成 记录&#xff1a;一组相关数据项的集合&#xff0…

iphone12android在线啥意思,iOS12要来了,你还不知道这些iPhone的隐藏功能?

「有技巧」是UBook知识在线的高效技巧专栏&#xff0c;专注于分享各种高效好玩的小技巧&#xff0c;发现更多神器&#xff0c;助你更高效地工作、学习和思考。 所谓智能手机&#xff0c;不仅仅是具备基本通信能力的设备&#xff0c;更是能够方便生活&#xff0c;提升幸福感的设…

常见3D引擎

unity3d Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画这些类型互动内容的多平台的综合型游戏开发工具&#xff0c;是一个全面整合的专业游戏引擎。goto unreal engine 4 E4 是 Unreal Engine 4 的缩写&#xff0c;中文译…

建模软件有哪些?

1、3D max 其前身是基于DOS操作系统的3D Studio系列软件。在Windows NT出现以前&#xff0c;工业级的CG制作被SGI图形工作站所垄断。3D Studio Max Windows NT组合的出现一下子降低了CG制作的门槛&#xff0c;首先开始运用在电脑游戏中的动画制作&#xff0c;后更进一步开始参…

3D建模软件有哪些?

3D建模软件有哪些&#xff0c;下面我来给大家说一说 1、MODO 12(3d建模软件) 一款艺点动画人非常优秀的3D建模设计软件&#xff0c;使用这款MODO 12(3D建模软件)可以让你感受高级多边形细分曲面、建模、雕刻、3D绘画、动画与渲染于一体的便利性&#xff0c;简单的操作&#xf…

工业设计三维软件有哪些?

三维设计是建立在平面和二维设计的基础上&#xff0c;让设计目标更立体化&#xff0c;更形象化的一种新兴设计方法。常见的三维软件有&#xff1a;Solidworks、PRO/E、UG等&#xff0c;每款软件都各有所长&#xff0c;接下来就给大家介绍一下工业设计三维软件有哪些吧&#xff…

DAZ 3D 软件简单安装和使用

DAZ 3D 软件简单安装和使用 免费资源下载 这个软件对我来说真是一个神奇巨坑&#xff0c;从下载到安装至少用了我4天的时间。但是不得不说其中很大一部分原因是因为网络问题吧&#xff0c;如果除去这些乱七八糟的问题&#xff0c;其实整个安装过程也挺快的&#xff08;谁说不是…

3D 文件格式 - 对应厂商

一、3D 文件格式 CAD文件格式&#xff1a;dwf、dwg、dxf revit的格式:rfa、rte、rvt Bentley的格式&#xff1a;dgn Autodesk Navisworks 文件格式&#xff1a;nwd、nwf 和 nwc 3dmax文件格式&#xff1a;3ds、.max Autodesk Maya源文件格式&#xff1a;ma、mb Alembic(…