云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

京东云_怎么自己建设一个网站_排行榜

小七 141 0

另一种流行语:Joomla Unserialize漏洞

在CloudFlare,我们花了很多时间讨论我们在全球拥有的POP(存在点),然而,在12月14日,另一种POP出现了:一个针对Joomla内容管理系统的漏洞正在被利用。这被称为"零日攻击",即该漏洞的修补程序发布以来已经是零天了。已为该特定漏洞发布了CVE ID,名为CVE-2015-8562。杰米·科克伦和我决定仔细看看。在这篇博客文章中,我们将解释漏洞是什么,给出我们看到的实际攻击有效负载的示例,并展示CloudFlare如何自动保护Joomla用户。如果您现在使用的是Joomla和CloudFlare,并且启用了WAF,那么您已经得到了保护。默认情况下,Joomla Web Application Firewall规则集为具有Pro或更高计划的CloudFlare客户启用,可阻止此攻击。您可以在WAF仪表板中CloudFlare规则集的Joomla部分找到它。乔姆拉是什么?Joomla是一个开源的内容管理系统,它允许您构建web应用程序并控制网站内容的各个方面。其中一些资源包括照片、视频、文本和文档等等。可以想象,如果攻击者能够访问管理控制面板,这是一个高价值的目标。非序列化脆弱性该漏洞是大多数语言中固有的bug类,包括Java、Python的pickle、C的unmarshalling、Ruby(CVE-2013-0333)和许多其他语言。这类漏洞并不新鲜,但最近@breenmachine写的一篇优秀博客发表后,引起了安全界的兴趣。与CMS/framework软件中的许多漏洞一样,实现了远程代码执行,这意味着通常未经身份验证的攻击者可以从远处执行任意代码,从而导致获取敏感信息、外壳,并最终危及整个系统。那么,如何实现远程代码执行呢?有两个未经清理的输入可以由用户控制,一个是用户代理头,另一个是X-Forwarded-For头,然后作为会话.client.browser以及会话.client.forwarded对象,序列化并插入Joomla的MySQL数据库。这些请求头必须包含被称为"POP-Chain"(面向属性编程)的恶意数据。POP-chains,类似于它们的老兄ROP(面向返回的编程)是由一系列已经存在于代码中的"神奇的PHP方法"构成的,这就是为什么这些类型的攻击通常被称为代码重用。攻击者必须将这些方法链接在一起才能实现所需的代码执行。然后,攻击者在User Agent或X-Forwarded-For报头中发送POP链,攻击者保存请求完成后返回的会话cookie。从我们注意到的情况来看,大多数POP链都对POST数据运行eval(),但不是全部,因为您还可以在eval()中运行一个chr()编码的字符串,该字符串将执行所有错误的PHP调用:system()、popen()、exec()、passthru()、shell_exec()等。下面是一个利用漏洞有效载荷的示例:eval(base64解码($\u POST[111]))现在,您可能想知道,如果初始请求不是POST请求,如何利用此漏洞。这是利用该漏洞的下一个部分,在获取会话cookie值之后,攻击者将发送一个带有会话cookie集的后续请求。前一个请求的用户代理或X-Forwarded-For头被插入到MySQL数据库中,并在后续请求中取消序列化。诀窍是在有效负载的末尾附加四个UTF-8字符(例如:\xf0\xfd\xfd\xfd),这将截断有效负载,允许代码执行。构建一个成功的有效负载还包括计算有效负载的大小并将其插入eval()之前,如下所示:s: 221:"eval(base64解码($\u POST[111]))否则这个漏洞就会失败。在我们的测试环境中,我们已经能够成功地利用这两个易受攻击的报头,使用POP链的多种变体。更重要的是,我们也能阻止他们。易受攻击的代码在本节中,我们将从会话.php,在其中创建会话。如果您查看第909行和第932行,您将看到未初始化的用户代理和X-Forwarded-For头被设置为会话.client.browser以及会话.client.forwarded.909:if(isset($\u SERVER['HTTP_X_FORWARDED_FOR']))910:{911:$this->set('会话.client.forwarded',$服务器['HTTP_X_FORWARDED_FOR']);912:}932:if(在_array('fix\'u browser',$this->\u security)&&isset($\u SERVER['HTTP_USER_AGENT']))933年:{934:$browser=$this->get('会话.client.browser');935:如果($browser===null)936年:{937:$this->set('会话.client.browser',$服务器['HTTP_USER_AGENT']);938:}PHP有一种处理会话的独特方式,它实际上序列化和反序列化会话对象:PHP的session handler对象创建并保存在这里:公共函数write($id,$data){尝试{$query=$this->db->getQuery(true);$query->update($this->db->quoteName('\#u session'))->设置($this->db->quoteName('data')。'= ' . $this->db->quote($data))->设置($this->db->quoteName('time')。'= ' . $this->db->quote((int)time())->其中($this->db->quoteName('session_id')。'= ' . $this->db->quote($id));//尝试更新数据库表中的会话数据。$this->db->setQuery($query);如果(!$this->db->execute()){返回false;}//由于$this->db->execute没有引发异常,因此查询成功。//要么数据改变了,要么数据完全相同。不管是哪种情况,我们都完蛋了。返回true;}catch(\Exception$e){返回false;}}然后从数据库中弹出:公共函数读取($id){//获取数据库连接对象并验证其已连接。$db=JFactory::getDbo();尝试{//从数据库表中获取会话数据。$query=$db->getQuery(true)->选择($db->quoteName('data'))->从($db->quoteName('\#u session'))->其中($db->quoteName('session_id')。'= ' . $db->quote($id));$db->setQuery($query);$result=(字符串)$db->loadResult();$result=str_replace('\0\0\0',chr(0)。'*' . chr(0),$结果;返回$result;}catch(异常$e){返回false;}}根据PHP文档:"返回的值将由PHP自动取消序列化,并用于填充$\u SESSION superglobal。"因此会话的标识是从数据库中提取的,未序列化,如果POP链构造正确,它将执行恶意代码。我们看到的Web应用程序防火墙在编写了一个专门用于阻止此攻击的规则集并使其在默认情况下对所有客户进行阻止之后,我们看到了大量触发该规则集的请求。这显示恶意参与者试图直接利用Joomla安装:正如您所看到的,当公开攻击被释放时,被阻止的请求数量会急剧增加。以下是一个小样本,我们看到了自一天前发布公开漏洞以来的不同有效负载:[有效载荷]:123}未经联合测试的| O:21:"JDatabaseBaseDriverMysysqli":3:{s:4:"\0\0\0 0a";O:17:"JSimple普金factory":0:{}s:21:"\0\0\0断开连接处理人员"的情况;a:1:{i:0;a:2:2:{i:0;O:9:"SimplePie":5:{s:8:"Sannitize";O:20:"O:20:"JDataBasbaseDriverMyQL":0:{}s:5:"缓存";b:1;s:19:"cache"19:"缓存"缓存"缓存"19:"缓存"19:"缓存name_函数;s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s: 221:"eval(base64_decode('ellyel8');phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0连接";i:1;}[有效载荷]:123}未经联合测试的| O:21:"JDatabaseBaseDriverMysysqli":3:{s:4:"\0\0\0 0a";O:17:"JSimple普金factory":0:{}s:21:"\0\0\0断开连接处理人员"的情况;a:1:{i:0;a:2:2:{i:0;O:9:"SimplePie":5:{s:8:"Sannitize";O:20:"O:20:"JDataBasbaseDriverMyQL":0:{}s:5:"缓存";b:1;s:19:"cache"19:"缓存"缓存"缓存"19:"缓存"19:"缓存name_函数;s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s: 221:"221:"eval(base64 U解码(‘zmlzzv9wdxfy29udgvudgvudhmozglybmftzgzgkx1nfulzfulsnu0nssvbux0zjjtEvoqq1fj0PlCVbg李fg李fzfzzzl29uzv93bjjjjjjjjzczjzczj0pzz8+Jyk7’);phpinfo();JFactory::getConfig();出口;出口;"}i:1;s:4:"init";}s:13:"\0\0\0 0 0\0连接";i;i:"0\0\0\0连接";i连接";i:"0\0\0:1;}