0x00 漏洞简介
- 影响版本:from Joomla 1.5 up until 3.4.5
- 漏洞类型:php 反序列化造成的对象注入
- 漏洞触发:将session插入数据库中,发送同样的数据包来取出session,触发漏洞,执行任意代码
0x01 利用分析
在看完这两篇漏洞分析文章后,对里面分析利用进行了下总结。
乌云的分析: http://drops.wooyun.org/papers/11330
百度安全团队的分析: http://xteam.baidu.com/?p=379 细致看底层原理可以看看百度安全团队的分析。想了解攻击步骤,请看乌云的分析。
乌云上提到的生成payload代码只是一部分,我改了改,可以用以下代码生成第一步攻击payload:
1 |
|
3个部分需要说明:
- 将序列化出来的
chr(0)*chr(0)
改为\0\0\0
表示,这是因为Joomla在read函数读取序列化字符串时,源码有这样的一段:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public function read($id)
{
// Get the database connection object and verify its connected.
$db = JFactory::getDbo();
try
{
// Get the session data from the database table.
$query = $db->getQuery(true)
->select($db->quoteName('data'))
->from($db->quoteName('#__session'))
->where($db->quoteName('session_id') . ' = ' . $db->quote($id));
$db->setQuery($query);
$result = (string) $db->loadResult();
$result = str_replace('\0\0\0', chr(0) . '*' . chr(0), $result);
return $result;
}
catch (Exception $e)
{
return false;
}
}
其中$result = str_replace('\0\0\0', chr(0) . '*' . chr(0), $result);
进行了转换处理。
配合UTF-8数据库截断技术,
\xF0\x9D\x8C\x86
这4字节字符即可截断数据,使其后面的数据不能存入数据库中,这样就可以安心的执行我们控制的对象,不受影响。字符串前面使用
|
注入技巧,使序列化字符串|
前面部分全部当成了键名对待。
0x02 攻击步骤
1. 将session值插入数据库
使用burpsuite抓包,改User-Agent为生成的payload。 可以看到数据库中已经存储了我们的序列化值,并且截断成功。
2. 直接使用浏览器访问(相同cookie)
可以看到执行了phpinfo()
代码:
0x03 参考
乌云文章分析: http://drops.wooyun.org/papers/11330
百度安全团队分析: http://xteam.baidu.com/?p=379