欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Joomla! Core SQL注入漏洞(CVE-2018-8045)

程序员文章站 2023-12-21 14:59:22
...

Joomla! Core SQL注入漏洞(CVE-2018-8045)

漏洞描述:

​ joomla!3.5.0-3.8.5版本对sql语句内的变量缺少类型转换,导致User Notes列表视图内SQL注入漏洞

影响版本:

​ joomla!3.5.0-3.8.5

漏j洞复现:

首先,安装joomla!如3.8.5

Joomla! Core SQL注入漏洞(CVE-2018-8045)

然后,访问http://ip:port/YourJoomlaPath/administrator/index.php?option=com_users&view=notes,然后按下图顺序点击,并开启burpsuite拦截抓包

Joomla! Core SQL注入漏洞(CVE-2018-8045)

抓包后可以发现,Bcategory_id的值处便是注入点

Joomla! Core SQL注入漏洞(CVE-2018-8045)

尝试在7 后添加sql注入的paylaod,如and updatexml(1,concat(0x7e,(select version()),0x7e),3)等

Joomla! Core SQL注入漏洞(CVE-2018-8045)

如上图可见,复现成功

漏洞分析:

这是未修复的版本漏洞点:

$categoryId = $this->getState('filter.category_id');

​    if ($categoryId && is_scalar($categoryId))
​    {
​        $query->where('a.catid = ' . $categoryId);
​    }

可以看到,$categoryId = $this->getState(‘filter.category_id’); 在获取category_id未进行过滤,导致了sql注入

再看一下修复后的相关代码:

Joomla! Core SQL注入漏洞(CVE-2018-8045)

	// Filter by a single or group of categories.
	$categoryId = $this->getState('filter.category_id');
	// Filter by a single category.
	$categoryId = (int) $this->getState('filter.category_id');

	if ($categoryId && is_scalar($categoryId))
	if ($categoryId)
	{
		$query->where('a.catid = ' . $categoryId);
	}

可以看到,3.8.6版本中对notes.php中的 c a t e g o r y I d 的 值 进 行 了 限 制 , 强 制 转 换 类 型 为 i n t 型 , 所 以 categoryId的值进行了限制,强制转换类型为int型,所以 categoryIdintcategoryId是漏洞参数,可以进行sql注入

修复建议:

升级更新Joomla 以修复漏洞

漏洞相应拦截:

由于sql注入可以进行编码等方式绕过,所以需要注意绕过等,规则如下:

alert tcp any any -> any any (msg:"Joomla! Core SQL注入漏洞(CVE-2018-8045) Attempt"; flow:to_server,established; content:"|2f|administrator|2F|index|2E|php|3F|option|3D|com|5F|users|26|view|3D|notes"; pcre:"/category_id[\s\S]*\x3D[\s\S]*(([\s\S]*))|(%28[\s\S]*%29)/im"; reference:cve,2018-8045; classtype:web-application-attack; sid:20201104; rev:1;)

上一篇:

下一篇: