一、命令执行概述:1.1 命令与代码执行原理1.1.1 命令执行原理:设计者在编写代码时没做严格的安全控制,导致攻击者通过接口或相关参数提交“意想不到的命令”,从而让后台执行,控制整个后台服务器。1.1.2 代码执行原理:没有对接口输入的内容进行严格判断,造成攻击者精心构造的代码非法执行。成因:用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变$PATH或程序执行环境的其他方面来执行一个恶意构造的代码。1.2 漏洞分类SQL注入导致的命令执行:利用数据库自身的特性(如:xp_cmdshell)等存储过程执行系统命令。通用框架/组件漏洞:目前最常见的攻击面Sturst2 命令执行Weblogic 命令执行Fastjson 反序列化导致命令执行Apache组件:如Shiro、Log4j2、Solr等爆出高危的RCE(远程代码执行)漏洞。业务功能模块:开发者在实现某些业务功能(如:ping测试、文件导出、系统诊断)时,直接拼接用户参数导致的漏洞。1.3 漏洞测试与利用方法使用特殊字符拼接&:后台执行(命令1&命令2)&&:逻辑与,前一个命令成功才执行后一个|:管道符,将前一个命令的输出作为后一个命令的输入||:逻辑或,前一个命令执行失败才执行后一个1.4 代码审计中的危险函数如何排查:PHP中的危险啊函数:执行系统命令:system()、exec()、shell_exec()、passthru()、popen()、porc_open(),以及反引号运算符。代码执行:eval()、assert()、call_suer_func()。编码解码绕过:base64_decode()、gzinflate()、gzuncompress()、gzdecode()、str_rot13()。攻击者常用这些编码绕过/隐藏恶意代码。文件包含/写入:require_once、include、file_get_contentss、file_put_contents、fputs、fwrite。特殊函数:mail()、mb_sendmail(),以及配置项auto_prepend_file、auto_append_file。Java中的执行方式:Runtime:Runtime.getRuntime().exec():Runtime是单例,用于与运行环境交互。ProcessBuilder:用于创建操作系统进程,功能强大,同样可用于命令执行。1.5 漏洞常见出现位置与危害1.5.1 出现位置任何带参数的地方都可能出现命令执行漏洞。特别熟常见的路由器、防火墙、入侵检测系统(IDS)、自动化运维平台等网络设备或管理后台。1.5.2 危害攻击者一旦利用成功,可以直接控制整个服务器后台,进行数据窃取、植入后门、内网横向渗透等攻击。1.6 典型案例:Struts2命令执行漏洞由于Struts2对OGNL表达式解析过滤不严谨,导致攻击者可以传入恶意OGNL表达式执行任意Java代码和系统命令。S2-005/S2-009/S2-013/S2-016/S2-019:这个阶段的漏洞主要出现在参数拦截器和标签解析上,攻击者可以通过构造恶意的HTTP参数,触发OGML表达式执行。S2-032/S2-033/S2-037随着Struts2集成REST插件,攻击面转移到了RESTful API的处理逻辑上。利用REST插件对请求进行解析的特性,绕过防御执行OGNL。S2-045/S2-046/S2-052/S2-057史诗级漏洞:这个阶段出现了Struts2历史上破坏力最强的漏洞,特别是S2-045,直接导致了全球大量服务被攻陷。S2-045(CVE-2017-5638):“Content-Type”。攻击者只需要在HTTP请求头的Content-Type中插入恶意的OGNL表达式,即可瞬间秒杀服务器,无需任何前置条件。影响范围:Struts 2.3.5 - 2.3.31 以及 2.5.x -2.5.10.1。1.7 防御建议严格过滤输入:对用户输入进行白名单校验,只允许合法的字符。禁用危险函数:在php.ini或服务器配置中禁用exec、system等危险函数。及时打补丁:更新Web框架防范已知漏洞。使用escapeshellcmd/escapeshellarg:对命令参数进行转义处理,防止参数被当做命令解析。S2-059:test-Payloadhttp://hbc2.haobachang.com:45293/?id=%25{7*7}
一、命令执行概述:
1.1 命令与代码执行原理
1.1.1 命令执行
原理:设计者在编写代码时没做严格的安全控制,导致攻击者通过接口或相关参数提交“意想不到的命令”,从而让后台执行,控制整个后台服务器。
1.1.2 代码执行
原理:没有对接口输入的内容进行严格判断,造成攻击者精心构造的代码非法执行。
成因:用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变$PATH或程序执行环境的其他方面来执行一个恶意构造的代码。
1.2 漏洞分类
1.3 漏洞测试与利用方法
1.4 代码审计中的危险函数
如何排查:
1.5 漏洞常见出现位置与危害
1.5.1 出现位置
任何带参数的地方都可能出现命令执行漏洞。特别熟常见的路由器、防火墙、入侵检测系统(IDS)、自动化运维平台等网络设备或管理后台。
1.5.2 危害
攻击者一旦利用成功,可以直接控制整个服务器后台,进行数据窃取、植入后门、内网横向渗透等攻击。
1.6 典型案例:Struts2命令执行漏洞
由于Struts2对OGNL表达式解析过滤不严谨,导致攻击者可以传入恶意OGNL表达式执行任意Java代码和系统命令。
1.7 防御建议
S2-059:test-Payload