Emlog修复后台编辑器存储型XSS漏洞的方法

  • 内容
  • 相关

以前DYBOY就发布过关于Emlog6.0的代码审计文章,其中就有分析道emlog文章编辑器的XSS漏洞,如果有些含有会员系统的EMLOG网站,就可能会遭到此漏洞攻击,严重可导致盗取管理员cookie,最后网站被黑客入侵拿下webshell。

xss防御.jpg

当然,我这里不会教大家如何去入侵,而是讲一讲如何防御EMLOG的编辑器XSS攻击。

一、XSS攻击会带来的风险?

Emlog后台使用的编辑器是kindeditor,由于版本较低,对于HTML语法也是直接解析渲染,如果编辑器内的代码有JavaScript代码,也会正常执行。

当管理员查看到含有黑客插入的恶意JavaScript代码的文章时,恶意代码就会执行并获取管理员的cookie,然后将cookie发送给黑客的远程服务器。

在B/S架构中,依靠cookie来鉴别用户身份,cookie就是钥匙,管理员有了cookie,才可以在网站上使用管理员才可以使用的功能。

倘若cookie泄露给黑客,黑客就能拿着你的cookie,打开你网站的门,进行管理员的操作,严重的可导致服务器被入侵,你的网站就再也不是你的了。

二、如何防御Emlog中的XSS攻击?

从上述我们知道,XSS就是一些JavaScript代码执行并获取cookie。那么我们有什么办法阻止JavaScript代码获取Cookie呐?

答案是HTTPONLY。

httponly是cookie属性之一,当httponly的设置值为 TRUE 时,使得JavaScript无法获取到该值,有效地防御了XSS盗取管理员的 cookie

三、Emlog内核改造

来到“include\lib\loginauth.php”文件第134行的setAuthCookie函数:

emlog设置用户的cookie.jpg

我们将其改为如下代码:

  1. /**
  2. * 写用于登录验证cookie
  3. *
  4. * @param int $user_id User ID
  5. * @param bool $remember Whether to remember the user or not
  6. */
  7. public static function setAuthCookie($user_login, $ispersis = false) {
  8. if ($ispersis) {
  9. $expiration = time() + 3600 * 24 * 30 * 12;
  10. } else {
  11. $expiration = null;
  12. }
  13. $auth_cookie_name = AUTH_COOKIE_NAME;
  14. $auth_cookie = self::generateAuthCookie($user_login, $expiration);
  15. setcookie($auth_cookie_name, $auth_cookie, $expiration,'/', '', false,true);
  16. }

另外还需要将212行的gentoken函数改为:

  1. /**
  2. * 生成token,防御CSRF攻击
  3. */
  4. public static function genToken() {
  5. $token_cookie_name = 'EM_TOKENCOOKIE_' . md5(substr(AUTH_KEY, 16, 32) . UID);
  6. if (isset($_COOKIE[$token_cookie_name])) {
  7. return $_COOKIE[$token_cookie_name];
  8. } else {
  9. $token = md5(getRandStr(16));
  10. setcookie($token_cookie_name, $token, 0, '/', '', false, true);
  11. return $token;
  12. }
  13. }

这样就给关键的cookie设置上了httponly检查,如此JavaScript代码无法执行,黑客也就无法获取到任何用户的cookie了!充分保证了网站的安全!

四、效果演示:

httponly设置后的效果.jpg

本文标签:

版权声明:若无特殊注明,本文皆为《偶然》原创,转载请保留文章出处。

本文链接:Emlog修复后台编辑器存储型XSS漏洞的方法 - https://www.1314zf.com/post-50.html

发表评论

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

未显示?请点击刷新

Sitemap