安全路透社
当前位置:安全路透社 > 网络转载 > 正文

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

写在前面的话

Joomla!目前的下载量已经超过了8400万次了,它也已经成为了目前全球最热门的内容管理系统之一。据统计,目前互联网上有大约3.3%的网站内容和文章都是由Joomla!驱动的。

我们的代码分析解决方案RIPS在Joomla!的LoginController中检测到了一个之前从未被发现过的LDAP注入漏洞。这个安全漏洞将允许远程攻击者通过盲注技术获取超级用户的密码,并使用LDAP注入技术在几秒内完全接管任何一个安装了Joomla!(版本号小于3.7.5)的网站。Joomla!目前已经在最新版本v3.8中修复了这个漏洞

受影响版本

符合下列条件的网站将会受到该漏洞的影响:

 Joomla!  v1.5 <= 3.7.5

身份认证使用了LDAP的Joomla!

注:这并不是一个配置漏洞,在利用该漏洞的过程中攻击者并不需要任何的特殊权限。

攻击者能做什么?

通过在登录页面利用该漏洞进行攻击,非特权的远程攻击者可以提取出LDAP服务器中所有的用户凭证(用于安装Joomla!),这些凭证包括特权用户以及Joomla!管理员的用户名以及密码。获取到这些凭证之后,攻击者就可以使用这些信息来登录Joomla!的管理员控制面板并完全接管Joomla!,或者通过上传自定义的Joomla!扩展实现远程代码执行并相关的Web服务器。

漏洞分析:CVE-2017-14596

我们的代码分析解决方案RIPS能够自动化识别出下列代码段中的安全漏洞。首先在LoginController中,Joomla!应用可以从登录表单中接收用户提供的凭证数据。

/administrator/components/com_login/controller.php

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

凭证数据会被传递给login方法,而login方法中又会调用authenticate方法。

/libraries/cms/application/cms.php

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

/libraries/joomla/authentication/authentication.php

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

authenticate方法可以向onUserAuthenticate方法发送用户凭证,具体方法取决于管理员所使用的身份验证插件。如果Joomla!在进行身份验证时使用的是LDAP,那么这里将需要调用LDAP插件的内置方法。

/plugins/authentication/ldap/ldap.php

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

在LDAP插件中,username嵌入在LDAP查询语句(在search_string选项中指定)中。根据Joomla!的官方文档,search_string配置选项是一个用于搜索用户的查询字符串,其中的[search]会被登录表单中的搜索文本直接替换,例如“uid=[search]”。接下来,LDAP查询语句会被传递给LdapClient中的simple_search方法,这个函数负责与LDAP服务器建立连接并执行ldap_search方法。

/libraries/vendor/joomla/ldap/src/LdapClient.php

如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

即使RIPS没有能够发现LDAP查询字符串是从一个外部配置文件加载进来的,但RIPS仍然能够成功检测并报告这个漏洞的根本原因:传递给ldap_search函数的用户输入虽然嵌入在了LDAP查询语句中,但输入数据并没有经过数据清洗。

RIPS报告:【点我查看

PoC:LDAP盲注

由于没有对LDAP查询语句中的username数据进行过滤,这将导致攻击者能够修改LDAP搜索的结果集合。通过使用特殊字符并观察不同的认证错误信息,攻击者将能够通过不断地发送测试payload来暴力破解出凭证字符。

XXX;(&(uid=Admin)(userPassword=A*))
XXX;(&(uid=Admin)(userPassword=B*))
XXX;(&(uid=Admin)(userPassword=C*))
...
XXX;(&(uid=Admin)(userPassword=s*))
...
XXX;(&(uid=Admin)(userPassword=se*))
...
XXX;(&(uid=Admin)(userPassword=sec*))
...
XXX;(&(uid=Admin)(userPassword=secretPassword))

其中的每一行Payload代码都可以从LDAP服务器中提取出目标数据,而这也是一种相对非常高效的LDAP盲注攻击方式。

攻击演示视频:

时间轴

2017年07月27日:向厂商提供漏洞细节以及PoC;

2017年07月29日:厂商确认漏洞信息;

2017年09月19日:厂商发布更新版本;

总结

作为目前最热门的一款开源CMS应用之一,Joomla!也受到了安全社区的极大关注。在洋洋洒洒500000多行的代码中,只要有一行代码存在安全问题,就有可能导致服务器被攻击。此次所发现的这个LDAP注入漏洞(CVE-2017-14596)已经存在了8年之久,但我们仍然要感谢Joomla!安全团队,感谢他们能够迅速对此漏洞进行相应,感谢他们对该项目所做的贡献。

 

* 参考来源:ripstech, FB小编Alpha_h4ck编译

未经允许不得转载:安全路透社 » 如何通过LDAP注入在20秒之内绕过Joomla!的登录认证(含演示视频)

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册