#4 代码执行漏洞基础

作者: saya 分类: Web安全基础系列,代码执行篇 发布时间: 2010-01-06 16:51

命令执行漏洞在安全体系中是直接的致命的,在我的理解里命令执行应该叫做代码执行更为贴切。本质其实还是在代码层中的函数,变量等逻辑关系,过滤不严格导致。代码变成了命令,这个字符串的东西也是人的视角决定的。取决于不同场景下的类型罢了。在攻防中这类漏洞是最直接有效的获取到权限shell等战果。OK,看看一些原理解读。

一、什么是命令执行漏洞:
应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

二、命令执行漏洞产生原因:
*开发人员没有对特殊函数入口做过滤,导致用户可以提交恶意代码并提交服务端执行。
*Web服务器没有过滤危险函数导致命令执行漏洞攻击成功。

三、PHP中的危险函数:

system:成功则返回命令输出的最后一行,失败则返回FALSE。
exec:命令执行结果的最后一行内容。
shell_exec:命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。
passthru:执行外部程序并且显示原始输出。
eval:将输入的字符串参数当做PHP程序代码来执行。
assert
preg_replace
call_user_func

四、命令执行漏洞的危害:

  • 任意执行系统命令
  •  恶意木马被种植
  • 挂马、钓鱼
  • 敏感信息泄露

五、简单基本案例:
PS:其实这些命令执行的漏洞案例非常多,靶机环境也是多如牛毛。DVWA等都可以做测试。Struts2 、java反序列等等

案例一:
先看下非常简单的php代码:

<?php
$s_f=$_GET['s_f'];
$max=$_GET['max'];
$s_f($max);
?>

一看就能看出问题所在,变量过滤没有,变量带入危险函数作为参数触发命令执行。如传入system、exec、shell_exec等函数名字符串,会被当命令执行。

实际某网站代码执行,和上面类似,函数执行过滤不严导致

案例:

某网站漏洞地址:
http://wx.xxxxxxxx.cn/Content/details/id/$%7B@phpinfo()%7D.html

接收参数未作过滤,如eval()等函数执行字符串内容,造成命令执行。

 

防范:
尽量不使用系统命令
执行命令/函数方法之前,变量一定做好过滤,对敏感字符进行转义
使用动态函数的时候,确保使用的函数是指定的函数
对PHP语言来说,不适用不能完全控制的函数

 

六、常见命令执行应用

1.常见的webCMS系统,dedecms等
2.框架类如ThinkPHP、struts2(洞王)等
3.Java反序列化类漏洞如WebSphere、JBoss、Jenkins、WebLogic

 

Struts2漏洞目录

  • S2-001– 远程代码利用表单验证错误
  • S2-002– <s:url>和<s:a>标记上的跨站点脚本(XSS)漏洞
  • S2-003– XWork ParameterInterceptors旁路允许OGNL语句执行
  • S2-004– 提供静态内容时的目录遍历漏洞
  • S2-005– XWork ParameterInterceptors旁路允许远程命令执行
  • S2-006– XWork中的多个跨站点脚本(XSS)生成错误页面
  • S2-007– 当出现转换错误时,用户输入被评估为OGNL表达式
  • S2-008– Struts2中的多个关键漏洞
  • S2-009– ParameterInterceptor漏洞允许远程命令执行
  • S2-010– 当使用Struts 2令牌机制进行CSRF保护时,可能会因滥用已知会话属性而绕过令牌检查
  • S2-011– 长请求参数名称可能会显着提高DOS攻击的有效性
  • S2-012– 展示应用程序漏洞允许远程命令执行
  • S2-013– URL和锚标记的includeParams属性中存在的漏洞允许远程命令执行
  • S2-014– 强制参数包含在URL和锚标记中引入的漏洞允许远程命令执行,会话访问和操作以及XSS攻击
  • S2-015– 通配符匹配机制引入的漏洞或OGNL表达式的双重评估允许远程命令执行。
  • S2-016– 通过操作前缀为“action:”/“redirect:”/“redirectAction:”的参数引入的漏洞允许远程命令执行
  • S2-017– 通过操作前缀为“redirect:”/“redirectAction:”的参数引入的漏洞允许打开重定向
  • S2-018– Apache Struts2中的访问控制漏洞
  • S2-019– 默认情况下禁用动态方法调用
  • S2-020– 将Commons FileUpload升级到版本3.1(避免DoS攻击)并添加’class’以排除ParametersInterceptor中的params(避免ClassLoader操作)
  • S2-021– 改进了ParametersInterceptor和CookieInterceptor中被排除的参数,以避免ClassLoader操作
  • S2-022– 在CookieInterceptor中扩展排除的params以避免操纵Struts的内部
  • S2-023– 令牌的生成值可以预测
  • S2-024– 错误的excludeParams会覆盖DefaultExcludedPatternsChecker中定义的那些
  • S2-025– 调试模式和公开的JSP文件中的跨站点脚本漏洞
  • S2-026– 特殊顶级对象可用于访问Struts的内部
  • S2-027– TextParseUtil.translateVariables不过滤恶意OGNL表达式
  • S2-028– 使用具有损坏的URLDecoder实现的JRE可能会导致基于Struts 2的Web应用程序中的XSS漏洞。
  • S2-029– 在标记属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行。
  • S2-030– I18NInterceptor中可能的XSS漏洞
  • S2-031– XSLTResult可用于解析任意样式表
  • S2-032– 启用动态方法调用时,可以通过方法:前缀执行远程执行代码。
  • S2-033– 使用REST插件时可以执行远程执行代码!启用动态方法调用时的运算符。
  • S2-034– OGNL缓存中毒可能导致DoS漏洞
  • S2-035– 动作名称清理容易出错
  • S2-036– 在标签属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行(类似于S2-029)
  • S2-037– 使用REST插件时可以执行远程执行代码。
  • S2-038– 可以绕过令牌验证并执行CSRF攻击
  • S2-039– Getter作为行动方法导致安全绕过
  • S2-040– 使用现有默认操作方法输入验证绕过。
  • S2-041– 使用URLValidator时可能发生DoS攻击
  • S2-042– “公约”插件中可能的路径遍历
  • S2-043– 在生产中使用Config Browser插件
  • S2-044– 使用URLValidator时可能发生DoS攻击
  • S2-045– 基于Jakarta Multipart解析器执行文件上载时可能的远程执行代码。
  • S2-046– 基于Jakarta Multipart解析器执行文件上传时可能的RCE(类似于S2-045)
  • S2-047– 使用URLValidator时可能发生DoS攻击(类似于S2-044)
  • S2-048– Struts 2.3.x系列中Struts 1插件示例中的Struts Showcase应用程序中可能的RCE
  • S2-049– DoS攻击可用于Spring安全操作
  • S2-050– 使用URLValidator时的正则表达式拒绝服务(类似于S2-044和S2-047)
  • S2-051– 远程攻击者可能在使用Struts REST插件时通过发送精心设计的xml请求来创建DoS攻击
  • S2-052– 使用带有XStream处理程序的Struts REST插件处理XML有效负载时可能发生的远程代码执行攻击
  • S2-053– 在Freemarker标记中使用无意表达而不是字符串文字时可能发生的远程执行代码攻击
  • S2-054– 使用Struts REST插件时,可以使用精心设计的JSON请求执行DoS攻击
  • S2-055– Jackson JSON库中的RCE漏洞
  • S2-056– 使用Struts REST插件时,可以使用精心设计的XML请求执行DoS攻击
  • S2-057– 当alwaysSelectFullNamespace为true(由用户或插件如Convention Plugin)时可能执行远程代码执行,然后:结果使用没有命名空间,同时,其上层包没有或通配符名称空间,类似于结果,当使用没有值和动作集的url标记时,它的上层包没有或通配符命名空间。

Struts2漏洞详细补充:https://www.freebuf.com/vuls/168609.html

 

总结:

命令执行漏洞或者说代码执行漏洞,本质原理其实差不多。危害极大,在攻防实战中是一个质变点。需要掌握主流命令执行漏洞的高发应用,理解其原理,开发自己的exp等。如s2、java反序列化、thinkphp等

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云