Joomla 3.2.0 – 3.4.4 SQL注入漏洞批量检测与利用

针对近期爆出的Joomla3.2-3.4版本的SQL注入漏洞,写了一个简单的批量检测脚本。
漏洞的具体细节和形成原因参见下面的链接,在此就不赘述了。

漏洞的相关介绍:

http://packetstormsecurity.com/files/134097/Joomla-3.44-SQL-Injection.html

http://www.secpulse.com/archives/39485.html

https://www.exploit-db.com/exploits/38445/ 

话不多上,直接上脚本运行截图:

1.png

2.png

写到此处,很多小伙伴觉得拿到的密码哈希很难破解,故而没什么卵用。

于是,我将提供2个登录后台的思路:

1. 破解密码

因为Joomla使用的是PHP的crypt函数生成的密码,所以爆破密码也得按照这个思路来进行,比如下面的脚本:

<?php 
$file = fopen("/root/hacker/dict", "r") or exit("Unable to open file!"); #指定字典路径 
$num = 1; 
while(!feof($file)) { 
$cpwd = fgets($file); 
$epwd = '$2y$10$gwsVA7DcL6rSgApkhsGoQeBH9Qfmg7Uqf3MXK9JYcvYyR06hkAJze'; #指定获取的哈希密码 
echo $num.':'.$cpwd; 
$result = crypt(trim($cpwd),$epwd); 
if($result == $epwd) { 
echo "[+]Password Found!Clear password:".$cpwd."\n"; 
break; 
} 
$num ++; 
} 
fclose($file);

首先利用批量检测脚本获取管理员的密码哈希,比如:

$2y$10$gwsVA7DcL6rSgApkhsGoQeBH9Qfmg7Uqf3MXK9JYcvYyR06hkAJze

然后可以配上获取到的username和email社工组合密码字典或者利用各位小伙伴私藏的各种牛逼密码字典,爆破之。运气好的话,你会像我一样得到想要的明文密码: 

session_id.png

verify.png

2. 利用获取的session_id登录

还是先跑脚本,获取到session_id,有的小伙伴肯定会问要是管理员千年不上线咋办,session_id很难获取到啊!我想说的是,你是白帽子肯定比我更有办法,这里我只是提一个简单的方法仅供参考。
搜索存在漏洞的站点,写个循环检测的脚本检测是否发现到session_id,一旦检出发出通知(比如:邮件),这样你就可以躺着睡觉,等待session_id的到来。 拿到session_id后,访问网站后台,修改cookie带上你获取的session值,就这么轻松愉快的进入了后台了。

cookiemgr.png

admin.png

批量检测脚本参见: https://github.com/brianwrf/hackUtils

声明:此脚本旨在学习和研究,切不可用于非法目的,否则一切后果由使用者自己承担。

《Joomla 3.2.0 – 3.4.4 SQL注入漏洞批量检测与利用》有5个想法

    1. 这种密码的破解没有那么容易,如果是简单的,可以先去CMD5上试试破解一下,但是稍微复杂一点的就不行了,比如:$2y$10类似的密码格式是blowfish加密的,具体的使用可以参见PHP的Crypt函数,你可以自己写个脚本然后使用这个函数碰撞,但是几率很小。至于session_id,如果你跑出了某个session_id说明该管理员的session还在有效期内,你可以通过burp抓包修改cookie中的session_id的值,然后进入后台。

  1. 你好,麻烦问下,为什么我这边已经有管理员登录了,但是脚本上还是显示session_id: no info!,谢谢。

    1. 可能是多个session存在导致payload无法获取到,出现了如下的错误:
      Subquery returns more than 1 row SQL=SELECT (select 1 from (select count(*),concat((select(select concat(session_id))from hovdw_session limit 0,1),floor(rand(0)*2))x from information_schema.tables GROUP BY x)a),uc.name AS editor FROM `hovdw_ucm_history` AS h LEFT JOIN hovdw_users AS uc ON uc.id = h.editor_user_id WHERE `h`.`ucm_item_id` = 1 AND `h`.`ucm_type_id` = 1 ORDER BY `h`.`save_date`

    2. 针对这个问题,github上的代码已经更新了,现在可以正确获取到session_id了,可以试试了

评论已关闭。